make menu icons optional

This commit is contained in:
shun-iwasawa 2021-04-02 01:17:32 +09:00 committed by manongjohn
parent abb537f7d4
commit 818f80a99f
5 changed files with 56 additions and 22 deletions

View file

@ -46,6 +46,7 @@ enum PreferencesItemId {
interfaceFontStyle,
colorCalibrationEnabled,
colorCalibrationLutPaths,
showIconsInMenu,
viewerIndicatorEnabled,
//----------

View file

@ -1413,6 +1413,12 @@ QAction *MainWindow::createAction(const char *id, const char *name,
QString newStatusTip, CommandType type,
const char *iconSVGName) {
QAction *action = new DVAction(tr(name), this);
#if !defined(_WIN32)
bool visible = Preferences::instance()->getBoolValue(showIconsInMenu);
action->setIconVisibleInMenu(visible);
#endif
// In Qt5.15.2 - Windows, QMenu stylesheet has alignment issue when one item
// has icon and another has not one. (See
// https://bugreports.qt.io/browse/QTBUG-90242 for details.) To avoid the

View file

@ -1019,6 +1019,7 @@ QString PreferencesPopup::getUIString(PreferencesItemId id) {
{colorCalibrationLutPaths,
tr("3DLUT File for [%1]:")
.arg(LutManager::instance()->getMonitorName())},
{showIconsInMenu, tr("Show Icons In Menu*")},
{viewerIndicatorEnabled, tr("Show Viewer Indicators")},
// Visualization
@ -1476,6 +1477,7 @@ QWidget* PreferencesPopup::createInterfacePage() {
// insertUI(interfaceFontStyle, lay, buildFontStyleList());
QGridLayout* colorCalibLay = insertGroupBoxUI(colorCalibrationEnabled, lay);
{ insertUI(colorCalibrationLutPaths, colorCalibLay); }
insertUI(showIconsInMenu, lay);
lay->setRowStretch(lay->rowCount(), 1);
insertFootNote(lay);

View file

@ -437,6 +437,15 @@ void Preferences::definePreferenceItems() {
define(colorCalibrationLutPaths, "colorCalibrationLutPaths",
QMetaType::QVariantMap, QVariantMap());
// hide menu icons by default in macOS since the icon color may not match with
// the system color theme
#ifdef Q_OS_MACOS
bool defIconsVisible = false;
#else
bool defIconsVisible = true;
#endif
define(showIconsInMenu, "showIconsInMenu", QMetaType::Bool, defIconsVisible);
setCallBack(pixelsOnly, &Preferences::setPixelsOnly);
setCallBack(linearUnits, &Preferences::setUnits);
setCallBack(cameraUnits, &Preferences::setCameraUnits);

View file

@ -318,31 +318,47 @@ QIcon createQIcon(const char *iconSVGName, bool useFullOpacity) {
QIcon icon;
// Base icon
icon.addPixmap(compositePixmap(themeIconPixmap, baseOpacity), QIcon::Normal,
QIcon::Off);
icon.addPixmap(compositePixmap(themeIconPixmap, disabledOpacity),
QIcon::Disabled, QIcon::Off);
#ifdef _WIN32
bool showIconInMenu = Preferences::instance()->getBoolValue(showIconsInMenu);
// set transparent icon
if (themeIconPixmap.size() == QSize(16 * devPixRatio, 16 * devPixRatio) &&
!showIconInMenu) {
static QPixmap emptyPm(16 * devPixRatio, 16 * devPixRatio);
emptyPm.fill(Qt::transparent);
// Over icon
icon.addPixmap(!overPixmap.isNull()
? compositePixmap(overPixmap, activeOpacity)
: compositePixmap(themeIconPixmap, activeOpacity),
QIcon::Active);
// On icon
if (!onPixmap.isNull()) {
icon.addPixmap(compositePixmap(onPixmap, activeOpacity), QIcon::Normal,
QIcon::On);
icon.addPixmap(compositePixmap(onPixmap, disabledOpacity), QIcon::Disabled,
QIcon::On);
} else {
icon.addPixmap(compositePixmap(themeIconPixmap, activeOpacity),
QIcon::Normal, QIcon::On);
icon.addPixmap(emptyPm, QIcon::Normal, QIcon::Off);
icon.addPixmap(emptyPm, QIcon::Normal, QIcon::On);
icon.addPixmap(emptyPm, QIcon::Disabled, QIcon::Off);
icon.addPixmap(emptyPm, QIcon::Disabled, QIcon::On);
icon.addPixmap(emptyPm, QIcon::Active);
} else
#endif
{
// Base icon
icon.addPixmap(compositePixmap(themeIconPixmap, baseOpacity), QIcon::Normal,
QIcon::Off);
icon.addPixmap(compositePixmap(themeIconPixmap, disabledOpacity),
QIcon::Disabled, QIcon::On);
}
QIcon::Disabled, QIcon::Off);
// Over icon
icon.addPixmap(!overPixmap.isNull()
? compositePixmap(overPixmap, activeOpacity)
: compositePixmap(themeIconPixmap, activeOpacity),
QIcon::Active);
// On icon
if (!onPixmap.isNull()) {
icon.addPixmap(compositePixmap(onPixmap, activeOpacity), QIcon::Normal,
QIcon::On);
icon.addPixmap(compositePixmap(onPixmap, disabledOpacity),
QIcon::Disabled, QIcon::On);
} else {
icon.addPixmap(compositePixmap(themeIconPixmap, activeOpacity),
QIcon::Normal, QIcon::On);
icon.addPixmap(compositePixmap(themeIconPixmap, disabledOpacity),
QIcon::Disabled, QIcon::On);
}
}
//----------
// For icons intended for menus that are 16x16 in dimensions, to repurpose