forked from pool/libqt5-qtbase
8b9e88c08a
The Time Has Come to Shoot You Down... What a Sound OBS-URL: https://build.opensuse.org/request/show/431274 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=56
61 lines
2.4 KiB
Diff
61 lines
2.4 KiB
Diff
From 6f423555eba55ccdf7287071e10576bc1b687fd2 Mon Sep 17 00:00:00 2001
|
|
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
Date: Mon, 1 Aug 2016 13:39:53 +0200
|
|
Subject: REG: Fix unwanted cache flush in Freetype engine
|
|
|
|
The Freetype cache was almost completely disabled by
|
|
134c6db8587a8ce156d4fa31ffa62605821851b2 because after that
|
|
change, the lockedAlphaMapForGlyph() function would no longer
|
|
cut off early for empty glyphs like spaces, but rather go
|
|
through all alpha map functions before it realized that there
|
|
was nothing to render. This would in turn invalidate the cache
|
|
for every empty glyph, causing all glyphs to be rerendered for
|
|
every isolated word.
|
|
|
|
This change adds back a cut off. This is only needed in the
|
|
lockedAlphaMapForGlyph() function, since the superclass implementation
|
|
of the other alpha map functions already contains a cut off for
|
|
width/height == 0.
|
|
|
|
[ChangeLog][Qt Gui][Text] Fixed a performance regression in Freetype
|
|
engine that was introduced in Qt 5.5.
|
|
|
|
Change-Id: I381285939909e99cc5fb5f3497fecf9fa871f29a
|
|
Task-number: QTBUG-49452
|
|
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
---
|
|
src/gui/text/qfontengine_ft.cpp | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
|
|
index 4de41df..7c878da 100644
|
|
--- a/src/gui/text/qfontengine_ft.cpp
|
|
+++ b/src/gui/text/qfontengine_ft.cpp
|
|
@@ -1716,7 +1716,7 @@ glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, QFixed subPixe
|
|
|
|
static inline QImage alphaMapFromGlyphData(QFontEngineFT::Glyph *glyph, QFontEngine::GlyphFormat glyphFormat)
|
|
{
|
|
- if (glyph == Q_NULLPTR)
|
|
+ if (glyph == Q_NULLPTR || glyph->height == 0 || glyph->width == 0)
|
|
return QImage();
|
|
|
|
QImage::Format format = QImage::Format_Invalid;
|
|
@@ -1764,11 +1764,15 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe
|
|
|
|
currentlyLockedAlphaMap = alphaMapFromGlyphData(glyph, neededFormat);
|
|
|
|
+ const bool glyphHasGeometry = glyph != Q_NULLPTR && glyph->height != 0 && glyph->width != 0;
|
|
if (!cacheEnabled && glyph != &emptyGlyph) {
|
|
currentlyLockedAlphaMap = currentlyLockedAlphaMap.copy();
|
|
delete glyph;
|
|
}
|
|
|
|
+ if (!glyphHasGeometry)
|
|
+ return Q_NULLPTR;
|
|
+
|
|
if (currentlyLockedAlphaMap.isNull())
|
|
return QFontEngine::lockedAlphaMapForGlyph(glyphIndex, subPixelPosition, neededFormat, t, offset);
|
|
|
|
--
|
|
cgit v1.0-4-g1e03
|