Cover browser: improve rendering of text with heavily hinted fonts. Fixes #1886239 [Cover Browser: Font clipping with Microsoft ClearType Fonts](https://bugs.launchpad.net/calibre/+bug/1886239)

Turn off hinting since we render to an offscreen buffer that is copied
to screen later anyway and hinting results in very poor rendering.
Hinting should not be needed at the larger text sizes typically used in
the cover browser anyway.
This commit is contained in:
Kovid Goyal 2020-07-04 22:10:32 +05:30
parent 8b7b02cc41
commit b948bf49f6
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -435,6 +435,7 @@ PictureFlowPrivate::PictureFlowPrivate(PictureFlow* w, int queueLength_)
target = 0; target = 0;
fade = 256; fade = 256;
subtitleFont = QFont(); subtitleFont = QFont();
subtitleFont.setHintingPreference(QFont::PreferNoHinting);
triggerTimer.setSingleShot(true); triggerTimer.setSingleShot(true);
triggerTimer.setInterval(0); triggerTimer.setInterval(0);
@ -767,6 +768,11 @@ void PictureFlowPrivate::render()
r = renderSlide(centerSlide); r = renderSlide(centerSlide);
int c1 = r.left(); int c1 = r.left();
int c2 = r.right(); int c2 = r.right();
QFont font = QFont();
font.setBold(true);
font.setPixelSize(fontSize);
font.setHintingPreference(QFont::PreferNoHinting);
if(step == 0) if(step == 0)
{ {
@ -788,10 +794,6 @@ void PictureFlowPrivate::render()
QPainter painter; QPainter painter;
painter.begin(&buffer); painter.begin(&buffer);
QFont font = QFont();
font.setBold(true);
font.setPixelSize(fontSize);
painter.setFont(font); painter.setFont(font);
painter.setPen(Qt::white); painter.setPen(Qt::white);
//painter.setPen(QColor(255,255,255,127)); //painter.setPen(QColor(255,255,255,127));
@ -835,14 +837,8 @@ void PictureFlowPrivate::render()
c2 = rs.right(); c2 = rs.right();
} }
QPainter painter; QPainter painter;
painter.begin(&buffer); painter.begin(&buffer);
QFont font = QFont();
font.setBold(true);
font.setPixelSize(fontSize);
painter.setFont(font); painter.setFont(font);
int leftTextIndex = (step>0) ? centerIndex : centerIndex-1; int leftTextIndex = (step>0) ? centerIndex : centerIndex-1;
@ -1253,6 +1249,7 @@ void PictureFlow::setPreserveAspectRatio(bool preserve)
void PictureFlow::setSubtitleFont(QFont font) void PictureFlow::setSubtitleFont(QFont font)
{ {
d->subtitleFont = font; d->subtitleFont = font;
d->subtitleFont.setHintingPreference(QFont::PreferNoHinting);
} }
QFont PictureFlow::subtitleFont() const QFont PictureFlow::subtitleFont() const