diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-04-06 16:23:34 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-04-06 16:53:04 +0200 |
commit | 06e8d0cae3651beaf95de05e89696cbab4978740 (patch) | |
tree | 5c6f01a1aa61627c63d22d25d28744ca2e2b8347 /src/gui/painting/qtextureglyphcache.cpp | |
parent | c272d672fc1863f9e3a201e93ad277c734749845 (diff) | |
download | qt4-tools-06e8d0cae3651beaf95de05e89696cbab4978740.tar.gz |
Fix painting artifacts on text
The height of the row is not only decided by the maximum height of the
set of glyphs currently being added to the glyph cache, but also the
height of the glyphs previously added to the current line in the glyph
cache. To minimize the space used, we now calculate the maximum height
for glyphs per line, and use this as the vertical advancement when
positioning the next line in the cache. The change also removes a
redundant test ((c_x + c.w > c.h) is caught earlier on and will
always be false at this point.)
Task-number: QTBUG-9176
Reviewed-by: Trond
Diffstat (limited to 'src/gui/painting/qtextureglyphcache.cpp')
-rw-r--r-- | src/gui/painting/qtextureglyphcache.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index cf545bed28..9eda0ef5ad 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -133,10 +133,13 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const while (iter != listItemCoordinates.end()) { Coord c = iter.value(); + m_currentRowHeight = qMax(m_currentRowHeight, c.h + margin * 2); + if (m_cx + c.w > m_w) { // no room on the current line, start new glyph strip m_cx = 0; - m_cy += rowHeight; + m_cy += m_currentRowHeight; + m_currentRowHeight = 0; // New row } if (m_cy + c.h > m_h) { int new_height = m_h*2; @@ -153,14 +156,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const fillTexture(c, iter.key()); coords.insert(iter.key(), c); - if (m_cx + c.w > m_w) { - m_cx = 0; - m_cy += rowHeight; - } else { - // for the Mono case, glyph_width is 8-bit aligned, - // and therefore so will m_cx - m_cx += c.w; - } + m_cx += c.w; ++iter; } |