Use indicator overlays for status bar icons

This commit is contained in:
David Hrdlička
2025-03-29 00:13:10 +01:00
parent ed4a312f4f
commit 8b72c84c02
30 changed files with 94 additions and 54 deletions

View File

@@ -194,6 +194,9 @@ add_library(ui STATIC
qt_openglshaderconfig.hpp qt_openglshaderconfig.hpp
qt_openglshaderconfig.cpp qt_openglshaderconfig.cpp
qt_openglshaderconfig.ui qt_openglshaderconfig.ui
qt_iconindicators.hpp
qt_iconindicators.cpp
) )
if(RTMIDI) if(RTMIDI)

BIN
src/qt/icons/active.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/qt/icons/disabled.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -0,0 +1,33 @@
#include <QSize>
#include <QPainter>
#include "qt_iconindicators.hpp"
QIcon
getIndicatorIcon(IconIndicator indicator)
{
switch (indicator) {
case Active:
return QIcon(":/settings/qt/icons/active.ico");
case Disabled:
return QIcon(":/settings/qt/icons/disabled.ico");
default:
return QIcon();
}
}
QPixmap
getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, IconIndicator indicator)
{
auto iconPixmap = icon.pixmap(size, iconMode);
if (indicator == None)
return iconPixmap;
auto painter = QPainter(&iconPixmap);
auto indicatorPixmap = getIndicatorIcon(indicator).pixmap(size);
painter.drawPixmap(0, 0, indicatorPixmap);
painter.end();
return iconPixmap;
}

View File

@@ -0,0 +1,15 @@
#ifndef QT_ICONINDICATORS_HPP
# define QT_INDICATORS_HPP
#include <QPixmap>
#include <QIcon>
enum IconIndicator {
None,
Active,
Disabled,
};
QPixmap getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, IconIndicator indicator);
#endif

View File

@@ -54,6 +54,7 @@ extern "C" {
#include "qt_mainwindow.hpp" #include "qt_mainwindow.hpp"
#include "qt_soundgain.hpp" #include "qt_soundgain.hpp"
#include "qt_progsettings.hpp" #include "qt_progsettings.hpp"
#include "qt_iconindicators.hpp"
#include <array> #include <array>
@@ -65,19 +66,24 @@ namespace {
struct PixmapSetActive { struct PixmapSetActive {
QPixmap normal; QPixmap normal;
QPixmap active; QPixmap active;
void load(const QString &basePath); void load(const QIcon &icon);
};
struct PixmapSetDisabled {
QPixmap normal;
QPixmap disabled;
void load(const QIcon &icon);
}; };
struct PixmapSetEmpty { struct PixmapSetEmpty {
QPixmap normal; QPixmap normal;
QPixmap empty; QPixmap empty;
void load(const QString &basePath); void load(const QIcon &icon);
}; };
struct PixmapSetEmptyActive { struct PixmapSetEmptyActive {
QPixmap normal; QPixmap normal;
QPixmap active; QPixmap active;
QPixmap empty; QPixmap empty;
QPixmap empty_active; QPixmap empty_active;
void load(QString basePath); void load(const QIcon &icon);
}; };
struct Pixmaps { struct Pixmaps {
PixmapSetEmpty cartridge; PixmapSetEmpty cartridge;
@@ -90,7 +96,7 @@ struct Pixmaps {
PixmapSetEmptyActive mo; PixmapSetEmptyActive mo;
PixmapSetActive hd; PixmapSetActive hd;
PixmapSetEmptyActive net; PixmapSetEmptyActive net;
QPixmap sound, soundMuted; PixmapSetDisabled sound;
}; };
struct StateActive { struct StateActive {
@@ -170,30 +176,35 @@ struct StateEmptyActive {
}; };
static QSize pixmap_size(16, 16); static QSize pixmap_size(16, 16);
static const QString pixmap_empty = QStringLiteral("_empty");
static const QString pixmap_active = QStringLiteral("_active");
static const QString pixmap_empty_active = QStringLiteral("_empty_active");
void void
PixmapSetEmpty::load(const QString &basePath) PixmapSetEmpty::load(const QIcon &icon)
{ {
normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
} }
void void
PixmapSetActive::load(const QString &basePath) PixmapSetActive::load(const QIcon &icon)
{ {
normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
} }
void void
PixmapSetEmptyActive::load(QString basePath) PixmapSetDisabled::load(const QIcon &icon)
{ {
normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); disabled = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Disabled);
empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); }
empty_active = QIcon(basePath.arg(pixmap_empty_active)).pixmap(pixmap_size);
void
PixmapSetEmptyActive::load(const QIcon &icon)
{
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
empty_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Active);
} }
} }
@@ -202,21 +213,20 @@ struct MachineStatus::States {
States(QObject *parent) States(QObject *parent)
{ {
pixmaps.cartridge.load(":/settings/qt/icons/cartridge%1.ico"); pixmaps.cartridge.load(QIcon(":/settings/qt/icons/cartridge.ico"));
pixmaps.cassette.load(":/settings/qt/icons/cassette%1.ico"); pixmaps.cassette.load(QIcon(":/settings/qt/icons/cassette.ico"));
pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size); pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size);
pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal;
pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal;
pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal;
pixmaps.floppy_525.load(":/settings/qt/icons/floppy_525%1.ico"); pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico"));
pixmaps.floppy_35.load(":/settings/qt/icons/floppy_35%1.ico"); pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico"));
pixmaps.cdrom.load(":/settings/qt/icons/cdrom%1.ico"); pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico"));
pixmaps.zip.load(":/settings/qt/icons/zip%1.ico"); pixmaps.zip.load(QIcon(":/settings/qt/icons/zip.ico"));
pixmaps.mo.load(":/settings/qt/icons/mo%1.ico"); pixmaps.mo.load(QIcon(":/settings/qt/icons/mo.ico"));
pixmaps.hd.load(":/settings/qt/icons/hard_disk%1.ico"); pixmaps.hd.load(QIcon(":/settings/qt/icons/hard_disk.ico"));
pixmaps.net.load(":/settings/qt/icons/network%1.ico"); pixmaps.net.load(QIcon(":/settings/qt/icons/network.ico"));
pixmaps.sound = QIcon(":/settings/qt/icons/sound.ico").pixmap(pixmap_size); pixmaps.sound.load(QIcon(":/settings/qt/icons/sound.ico"));
pixmaps.soundMuted = QIcon(":/settings/qt/icons/sound_mute.ico").pixmap(pixmap_size);
cartridge[0].pixmaps = &pixmaps.cartridge; cartridge[0].pixmaps = &pixmaps.cartridge;
cartridge[1].pixmaps = &pixmaps.cartridge; cartridge[1].pixmaps = &pixmaps.cartridge;
@@ -510,7 +520,7 @@ MachineStatus::refresh(QStatusBar *sbar)
sound_muted ^= 1; sound_muted ^= 1;
config_save(); config_save();
if (d->sound) if (d->sound)
d->sound->setPixmap(sound_muted ? d->pixmaps.soundMuted : d->pixmaps.sound); d->sound->setPixmap(sound_muted ? d->pixmaps.sound.disabled : d->pixmaps.sound.normal);
muteUnmuteAction->setText(sound_muted ? tr("&Unmute") : tr("&Mute")); muteUnmuteAction->setText(sound_muted ? tr("&Unmute") : tr("&Mute"));
}); });
@@ -694,7 +704,7 @@ MachineStatus::refresh(QStatusBar *sbar)
} }
d->sound = std::make_unique<ClickableLabel>(); d->sound = std::make_unique<ClickableLabel>();
d->sound->setPixmap(sound_muted ? d->pixmaps.soundMuted : d->pixmaps.sound); d->sound->setPixmap(sound_muted ? d->pixmaps.sound.disabled : d->pixmaps.sound.normal);
if (muteUnmuteAction) if (muteUnmuteAction)
muteUnmuteAction->setText(sound_muted ? tr("&Unmute") : tr("&Mute")); muteUnmuteAction->setText(sound_muted ? tr("&Unmute") : tr("&Mute"));

View File

@@ -1,16 +1,9 @@
<RCC> <RCC>
<qresource prefix="/settings"> <qresource prefix="/settings">
<file>qt/icons/cartridge.ico</file> <file>qt/icons/cartridge.ico</file>
<file>qt/icons/cartridge_empty.ico</file>
<file>qt/icons/cassette.ico</file> <file>qt/icons/cassette.ico</file>
<file>qt/icons/cassette_active.ico</file>
<file>qt/icons/cassette_empty.ico</file>
<file>qt/icons/cassette_empty_active.ico</file>
<file>qt/icons/cdrom.ico</file> <file>qt/icons/cdrom.ico</file>
<file>qt/icons/cdrom_active.ico</file>
<file>qt/icons/cdrom_disabled.ico</file> <file>qt/icons/cdrom_disabled.ico</file>
<file>qt/icons/cdrom_empty.ico</file>
<file>qt/icons/cdrom_empty_active.ico</file>
<file>qt/icons/cdrom_mute.ico</file> <file>qt/icons/cdrom_mute.ico</file>
<file>qt/icons/cdrom_unmute.ico</file> <file>qt/icons/cdrom_unmute.ico</file>
<file>qt/icons/cdrom_image.ico</file> <file>qt/icons/cdrom_image.ico</file>
@@ -18,38 +11,24 @@
<file>qt/icons/cdrom_host.ico</file> <file>qt/icons/cdrom_host.ico</file>
<file>qt/icons/display.ico</file> <file>qt/icons/display.ico</file>
<file>qt/icons/floppy_35.ico</file> <file>qt/icons/floppy_35.ico</file>
<file>qt/icons/floppy_35_active.ico</file>
<file>qt/icons/floppy_35_empty.ico</file>
<file>qt/icons/floppy_35_empty_active.ico</file>
<file>qt/icons/floppy_525.ico</file> <file>qt/icons/floppy_525.ico</file>
<file>qt/icons/floppy_525_active.ico</file>
<file>qt/icons/floppy_525_empty.ico</file>
<file>qt/icons/floppy_525_empty_active.ico</file>
<file>qt/icons/floppy_and_cdrom_drives.ico</file> <file>qt/icons/floppy_and_cdrom_drives.ico</file>
<file>qt/icons/floppy_disabled.ico</file> <file>qt/icons/floppy_disabled.ico</file>
<file>qt/icons/hard_disk.ico</file> <file>qt/icons/hard_disk.ico</file>
<file>qt/icons/hard_disk_active.ico</file>
<file>qt/icons/input_devices.ico</file> <file>qt/icons/input_devices.ico</file>
<file>qt/icons/machine.ico</file> <file>qt/icons/machine.ico</file>
<file>qt/icons/mo.ico</file> <file>qt/icons/mo.ico</file>
<file>qt/icons/mo_active.ico</file>
<file>qt/icons/mo_disabled.ico</file> <file>qt/icons/mo_disabled.ico</file>
<file>qt/icons/mo_empty.ico</file>
<file>qt/icons/mo_empty_active.ico</file>
<file>qt/icons/network.ico</file> <file>qt/icons/network.ico</file>
<file>qt/icons/network_active.ico</file>
<file>qt/icons/network_empty.ico</file>
<file>qt/icons/other_peripherals.ico</file> <file>qt/icons/other_peripherals.ico</file>
<file>qt/icons/other_removable_devices.ico</file> <file>qt/icons/other_removable_devices.ico</file>
<file>qt/icons/ports.ico</file> <file>qt/icons/ports.ico</file>
<file>qt/icons/sound.ico</file> <file>qt/icons/sound.ico</file>
<file>qt/icons/sound_mute.ico</file>
<file>qt/icons/storage_controllers.ico</file> <file>qt/icons/storage_controllers.ico</file>
<file>qt/icons/zip.ico</file> <file>qt/icons/zip.ico</file>
<file>qt/icons/zip_active.ico</file>
<file>qt/icons/zip_disabled.ico</file> <file>qt/icons/zip_disabled.ico</file>
<file>qt/icons/zip_empty.ico</file> <file>qt/icons/active.ico</file>
<file>qt/icons/zip_empty_active.ico</file> <file>qt/icons/disabled.ico</file>
<file>qt/icons/86Box-gray.ico</file> <file>qt/icons/86Box-gray.ico</file>
<file>qt/icons/86Box-green.ico</file> <file>qt/icons/86Box-green.ico</file>
<file>qt/icons/86Box-red.ico</file> <file>qt/icons/86Box-red.ico</file>