nativetext: Fix baseline positioning for CoreText

The Qt and CoreText positioning is now in sync.

Change-Id: I0cbb5b150d1bef732674b8d42c64a040773a62ab
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
Tor Arne Vestbø 2018-12-10 17:57:26 +01:00
parent ab448f731e
commit f10b980840

View File

@ -101,7 +101,9 @@ public:
const int ascent = fontMetrics().ascent();
p.setPen(Qt::magenta);
QPen metricsPen(Qt::magenta, 1.0);
metricsPen.setCosmetic(true);
p.setPen(metricsPen);
p.drawLine(QPoint(0, ascent), QPoint(width(), ascent));
p.end();
@ -152,13 +154,22 @@ public:
if (font().styleStrategy() & QFont::NoAntialias)
CGContextSetShouldAntialias(ctx, false);
// Retain count already tracked by QMacCGContext above
NSGraphicsContext.currentContext = [NSGraphicsContext graphicsContextWithCGContext:ctx flipped:YES];
[text().toNSString() drawAtPoint:CGPointZero withAttributes:@{
NSFontAttributeName : (NSFont *)fontEngine->handle(),
NSForegroundColorAttributeName : nsColor
}];
NSGraphicsContext.currentContext = nil;
// Flip to what CT expects
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -height());
// Set up baseline
CGContextSetTextPosition(ctx, 0, height() - fontMetrics().ascent());
auto *attributedString = [[NSAttributedString alloc] initWithString:text().toNSString()
attributes:@{
NSFontAttributeName : (NSFont *)fontEngine->handle(),
NSForegroundColorAttributeName : nsColor
}
];
QCFType<CTLineRef> line = CTLineCreateWithAttributedString(CFAttributedStringRef([attributedString autorelease]));
CTLineDraw(line, ctx);
#endif
}