summaryrefslogtreecommitdiffstats
path: root/src/plugins/styles
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@qt.io>2018-01-08 19:16:49 -0800
committerGabriel de Dietrich <gabriel.dedietrich@qt.io>2018-01-11 23:37:34 +0000
commitcf7a4016a17615df2952389bae11149a49b151bc (patch)
treebe4bce90b346c6f911b93295976191be9acaed5a /src/plugins/styles
parente5b422382a512a8267a0eb24e6543a8cf84478d9 (diff)
QMacStyle: Draw CE_MenuItem text using AppKit
We seem to induce QCoreTextFontEngine to draw text the wrong way in non-native QMenu popups. Here, we just delegate menu items' text rendering to AppKit. This is only a workaround pending a proper fix or better understanding of the aforementioned issue. Change-Id: I71088ebe2a534bebca2ad396b1ea6754be093f55 Task-number: QTBUG-65653 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io> Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src/plugins/styles')
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index e540ff4d3b..ee5fb6def8 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -4285,9 +4285,39 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
// and then the combo inherits it and passes it onward. At that point the resolve mask
// is very, very weak. This makes it stonger.
myFont.setPointSizeF(QFontInfo(mi->font).pointSizeF());
+#if 0
+ // QTBUG-65653: This doesn't look good enough, especially on non-retina displays.
+ // Worked around below while waiting for a proper fix in QCoreTextFontEngine.
p->setFont(myFont);
p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1,
mi->rect.height(), text_flags, s);
+#else
+ QMacCGContext cgCtx(p);
+ d->setupNSGraphicsContext(cgCtx, YES);
+
+ // Respect the menu item palette as set in the style option.
+ const auto pc = p->pen().color();
+ NSColor *c = [NSColor colorWithSRGBRed:pc.redF()
+ green:pc.greenF()
+ blue:pc.blueF()
+ alpha:pc.alphaF()];
+
+ // Respect the menu item action font as set in the style option.
+ const auto *fontEngine = QFontPrivate::get(myFont)->engineForScript(QChar::Script_Common);
+ Q_ASSERT(fontEngine);
+ if (fontEngine->type() == QFontEngine::Multi) {
+ fontEngine = static_cast<const QFontEngineMulti *>(fontEngine)->engine(0);
+ Q_ASSERT(fontEngine);
+ }
+ Q_ASSERT(fontEngine->type() == QFontEngine::Mac);
+ NSFont *f = (NSFont *)(CTFontRef)fontEngine->handle();
+
+ s = qt_mac_removeMnemonics(s);
+ [s.toNSString() drawInRect:CGRectMake(xpos, yPos, mi->rect.width() - xm - tabwidth + 1, mi->rect.height())
+ withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c }];
+
+ d->restoreNSGraphicsContext(cgCtx);
+#endif
}
p->restore();
}