From 72a1709cbe216220722750c743641bf5ba8a8da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Thu, 2 Sep 2010 08:11:18 +0200 Subject: Minor performance improvement to QGraphicsItem::update. Reported by other teams in Nokia. Avoid calling discardUpdateRequest() twice, first in update() and then in markDirty(). No-brainer. Task-number: QTBUG-10817 Reviewed-by: Trustme --- src/gui/graphicsview/qgraphicsitem.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 7a622f1..fc122d2 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5666,9 +5666,6 @@ void QGraphicsItem::update(const QRectF &rect) return; } - if (d_ptr->discardUpdateRequest()) - return; - if (d_ptr->scene) d_ptr->scene->d_func()->markDirty(this, rect); } -- cgit v0.12 From 4c8571de2d50e1dbfeef38b1e1e09c48a0a27aa4 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 23 Aug 2010 12:53:04 +0200 Subject: Fix symbol font detection in generic CMap decoding For fonts that have an AppleRoman name table, *isSymbolFont failed to return correct value even if they have a symbol table. This patch corrected this behavior by using symbolTable variable to detect that instead of checking if score == Symbol. Also prefer symbol table over AppleRoman table to make generic CMap decoding consistent with QFontEngineFT (which will use the symbol table whenever its available). Task-number: QTBUG-3852 Reviewed-by: Lars Knoll --- src/gui/text/qfontengine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 3f758b1..1e8461f 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -874,8 +874,8 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy enum { Invalid, - Symbol, AppleRoman, + Symbol, Unicode11, Unicode, MicrosoftUnicode, @@ -939,7 +939,7 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy return 0; resolveTable: - *isSymbolFont = (score == Symbol); + *isSymbolFont = (symbolTable > -1); unsigned int unicode_table = qFromBigEndian(maps + 8*tableToUse + 4); -- cgit v0.12 From 7f5cae532d9f1841d15f01064bf97775b9fd8b0d Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 23 Aug 2010 12:56:50 +0200 Subject: Keep mirrored char handling consistent between some font engines Mirrored character subsitution should be used in right-to-left text direction unless the font is a symbol font. This patch will keep this behavior consistent between FreeType, QPF and S60 font engines. For Mac font engines, the shaping process is delegated to Core Text or ATSUI, so we don't do mirrored char handling by ourselves. Task-number: QTBUG-3852 Reviewed-by: Lars Knoll --- src/gui/text/qfontengine_ft.cpp | 2 -- src/gui/text/qfontengine_qpf.cpp | 2 -- src/gui/text/qfontengine_s60.cpp | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 60db8b6..a9b25f5 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -1565,8 +1565,6 @@ bool QFontEngineFT::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs FT_Face face = freetype->face; for ( int i = 0; i < len; ++i ) { unsigned int uc = getChar(str, i, len); - if (mirrored) - uc = QChar::mirroredChar(uc); glyphs->glyphs[glyph_pos] = uc < QFreetypeFace::cmapCacheSize ? freetype->cmapCache[uc] : 0; if ( !glyphs->glyphs[glyph_pos] ) { glyph_t glyph; diff --git a/src/gui/text/qfontengine_qpf.cpp b/src/gui/text/qfontengine_qpf.cpp index a0593cc..53b6910 100644 --- a/src/gui/text/qfontengine_qpf.cpp +++ b/src/gui/text/qfontengine_qpf.cpp @@ -578,8 +578,6 @@ bool QFontEngineQPF::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph if (symbol) { for (int i = 0; i < len; ++i) { unsigned int uc = getChar(str, i, len); - if (mirrored) - uc = QChar::mirroredChar(uc); glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc); if(!glyphs->glyphs[glyph_pos] && uc < 0x100) glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000); diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 2cc3f50..2c533db 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -256,7 +256,7 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout for (int i = 0; i < len; ++i) { const unsigned int uc = getChar(characters, i, len); *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, - isRtl ? QChar::mirroredChar(uc) : uc); + (isRtl && !m_symbolCMap) ? QChar::mirroredChar(uc) : uc); } glyphs->numGlyphs = g - glyphs->glyphs; -- cgit v0.12 From 19beb3de012c4531dc69699bbb33f2cf1e86a84c Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Thu, 2 Sep 2010 15:57:59 +0200 Subject: Fix broken S60 build Reviewed-by: Liang Qi --- src/gui/text/qfontengine_s60.cpp | 7 ++++++- src/gui/text/qfontengine_s60_p.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 2c533db..5980f20 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -166,6 +166,11 @@ const uchar *QSymbianTypeFaceExtras::cmap() const return reinterpret_cast(m_cmapTable.constData()); } +bool QSymbianTypeFaceExtras::isSymbolCMap() const +{ + return m_symbolCMap; +} + CFont *QSymbianTypeFaceExtras::fontOwner() const { return m_cFont; @@ -256,7 +261,7 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout for (int i = 0; i < len; ++i) { const unsigned int uc = getChar(characters, i, len); *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, - (isRtl && !m_symbolCMap) ? QChar::mirroredChar(uc) : uc); + (isRtl && !m_extras->isSymbolCMap()) ? QChar::mirroredChar(uc) : uc); } glyphs->numGlyphs = g - glyphs->glyphs; diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index d65f13b..d05c23c 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -81,6 +81,7 @@ public: bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; const uchar *cmap() const; CFont *fontOwner() const; + bool isSymbolCMap() const; private: CFont* m_cFont; -- cgit v0.12