Fix high dpi multimonitor glitch (T2D missing icon fix)

This commit is contained in:
manongjohn 2022-03-16 07:27:07 -04:00
parent 6ec5f60a8f
commit 8d3bda3a5d
3 changed files with 42 additions and 31 deletions

View file

@ -447,6 +447,7 @@ ToolOptionPopupButton::ToolOptionPopupButton(TTool *tool,
QAction *action = addItem(createQIcon(items[i].iconName.toUtf8()));
// make the tooltip text
action->setToolTip(items[i].UIName);
action->setIconVisibleInMenu(true);
}
setCurrentIndex(0);
updateStatus();

View file

@ -453,7 +453,7 @@ int main(int argc, char *argv[]) {
// qDebug() << "All icon theme search paths:" << QIcon::themeSearchPaths();
// Set show icons in menus flag (use iconVisibleInMenu to disable selectively)
QApplication::instance()->setAttribute(Qt::AA_DontShowIconsInMenus, false);
QApplication::instance()->setAttribute(Qt::AA_DontShowIconsInMenus, true);
TEnv::setApplicationFileName(argv[0]);

View file

@ -405,41 +405,51 @@ QIcon createQIcon(const char *iconSVGName, bool useFullOpacity,
// them for use in toolbars that are set for 20x20 we want to draw them onto a
// 20x20 pixmap so they don't get resized in the GUI, they will be loaded into
// the icon along with the original 16x16 pixmap.
// In case of multiple monitors with different resolutions, let's create icons
// for those also
if (themeIconPixmap.size() == QSize(16 * devPixRatio, 16 * devPixRatio)) {
const QSize drawOnSize(20, 20);
const int x = (drawOnSize.width() - 16) / 2; // left adjust
const int y = (drawOnSize.height() - 16) / 2; // top adjust
for (auto screen : QApplication::screens()) {
QSize drawOnSize(20, 20);
int otherDevPixRatio = screen->devicePixelRatio();
if (otherDevPixRatio != devPixRatio) {
drawOnSize.setWidth(16 * otherDevPixRatio);
drawOnSize.setHeight(16 * otherDevPixRatio);
}
int x = (drawOnSize.width() - 16) / 2; // left adjust
int y = (drawOnSize.height() - 16) / 2; // top adjust
// Base icon
icon.addPixmap(
compositePixmap(themeIconPixmap, baseOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::Off);
icon.addPixmap(
compositePixmap(themeIconPixmap, disabledOpacity, drawOnSize, x, y),
QIcon::Disabled, QIcon::Off);
// Over icon
icon.addPixmap(
!overPixmap.isNull()
? compositePixmap(overPixmap, activeOpacity, drawOnSize, x, y)
: compositePixmap(themeIconPixmap, activeOpacity, drawOnSize, x, y),
QIcon::Active);
// On icon
if (!onPixmap.isNull()) {
icon.addPixmap(compositePixmap(onPixmap, activeOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::On);
// Base icon
icon.addPixmap(
compositePixmap(onPixmap, disabledOpacity, drawOnSize, x, y),
QIcon::Disabled, QIcon::On);
} else {
icon.addPixmap(
compositePixmap(themeIconPixmap, activeOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::On);
compositePixmap(themeIconPixmap, baseOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::Off);
icon.addPixmap(
compositePixmap(themeIconPixmap, disabledOpacity, drawOnSize, x, y),
QIcon::Disabled, QIcon::On);
QIcon::Disabled, QIcon::Off);
// Over icon
icon.addPixmap(
!overPixmap.isNull()
? compositePixmap(overPixmap, activeOpacity, drawOnSize, x, y)
: compositePixmap(themeIconPixmap, activeOpacity, drawOnSize, x,
y),
QIcon::Active);
// On icon
if (!onPixmap.isNull()) {
icon.addPixmap(
compositePixmap(onPixmap, activeOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::On);
icon.addPixmap(
compositePixmap(onPixmap, disabledOpacity, drawOnSize, x, y),
QIcon::Disabled, QIcon::On);
} else {
icon.addPixmap(
compositePixmap(themeIconPixmap, activeOpacity, drawOnSize, x, y),
QIcon::Normal, QIcon::On);
icon.addPixmap(
compositePixmap(themeIconPixmap, disabledOpacity, drawOnSize, x, y),
QIcon::Disabled, QIcon::On);
}
}
}