Add CD audio play/pause indicators to icons

This commit is contained in:
Cacodemon345
2025-12-25 15:17:46 +06:00
parent f0ab2e9b78
commit adb8af06f9
5 changed files with 52 additions and 6 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -6,6 +6,10 @@ QIcon
getIndicatorIcon(IconIndicator indicator)
{
switch (indicator) {
case Play:
return QIcon(":/menuicons/qt/icons/run.ico");
case Pause:
return QIcon(":/menuicons/qt/icons/pause.ico");
case Active:
return QIcon(":/settings/qt/icons/active.ico");
case WriteActive:
@@ -36,13 +40,18 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode,
return iconPixmap;
auto painter = QPainter(&iconPixmap);
auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive) ? Active : indicator).pixmap(size);
auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive
|| indicator == PlayActive || indicator == PauseActive)? Active : indicator)
.pixmap((indicator == Play || indicator == Pause) ? size / 2. : size);
if (indicator == WriteProtectedBrowse)
indicatorPixmap = getIndicatorIcon(WriteProtected).pixmap(size);
painter.drawPixmap(0, 0, indicatorPixmap);
if ((indicator == ReadWriteActive) || (indicator == WriteProtectedActive)) {
painter.drawPixmap(0, (indicator == Play || indicator == Pause) ? (size.height() / 2) : 0, indicatorPixmap);
if (indicator == PlayActive || indicator == PauseActive) {
auto playPauseIndicatorPixmap = getIndicatorIcon(indicator == PlayActive ? Play : Pause).pixmap(size / 2.);
painter.drawPixmap(0, size.height() / 2, playPauseIndicatorPixmap);
} else if ((indicator == ReadWriteActive) || (indicator == WriteProtectedActive)) {
auto writeIndicatorPixmap = getIndicatorIcon(indicator == WriteProtectedActive ? WriteProtected : WriteActive).pixmap(size);
painter.drawPixmap(0, 0, writeIndicatorPixmap);
} else if (indicator == WriteProtectedBrowse) {

View File

@@ -16,7 +16,11 @@ enum IconIndicator {
Browse,
WriteProtectedBrowse,
Export,
Eject
Eject,
Play,
Pause,
PlayActive,
PauseActive
};
QPixmap getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, IconIndicator indicator);

View File

@@ -83,6 +83,10 @@ struct PixmapSetEmpty {
struct PixmapSetEmptyActive {
QPixmap normal;
QPixmap active;
QPixmap play;
QPixmap pause;
QPixmap play_active;
QPixmap pause_active;
QPixmap empty;
QPixmap empty_active;
QPixmap write_active;
@@ -169,6 +173,26 @@ struct StateEmptyActive {
bool active = false;
bool write_active = false;
bool wp = false;
bool play = false;
bool pause = false;
void setPlay(bool b)
{
if (!label || b == play)
return;
play = b;
refresh();
}
void setPause(bool b)
{
if (!label || b == pause)
return;
pause = b;
refresh();
}
void setActive(bool b)
{
@@ -212,10 +236,12 @@ struct StateEmptyActive {
else
label->setPixmap(write_active ? pixmaps->empty_write_active : (active ? pixmaps->empty_active : pixmaps->empty));
} else {
if (wp)
if (wp && !(play || pause))
label->setPixmap(active ? pixmaps->wp_active : pixmaps->wp);
else if (active && write_active)
else if (active && write_active && !wp)
label->setPixmap(pixmaps->read_write_active);
else if ((play || pause) && !write_active)
label->setPixmap(play ? (active ? pixmaps->play_active : pixmaps->play) : (active ? pixmaps->pause_active : pixmaps->pause));
else
label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal));
}
@@ -252,6 +278,10 @@ void
PixmapSetEmptyActive::load(const QIcon &icon)
{
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
play = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Play);
pause = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Pause);
play_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, PlayActive);
pause_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, PauseActive);
wp = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteProtected);
wp_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteProtectedActive);
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
@@ -504,8 +534,11 @@ MachineStatus::refreshIcons()
d->fdd[i].setWriteActive(machine_status.fdd[i].write_active);
}
for (size_t i = 0; i < CDROM_NUM; ++i) {
auto status = cdrom_get_current_status(&cdrom[i]);
d->cdrom[i].setActive(machine_status.cdrom[i].active);
d->cdrom[i].setWriteActive(machine_status.cdrom[i].write_active);
d->cdrom[i].setPlay(status == 0x11);
d->cdrom[i].setPause((!cdrom[i].is_chinon) ? (status == 0x12) : (status == 0x15));
if (machine_status.cdrom[i].active) {
ui_sb_update_icon(SB_CDROM | i, 0);
}