diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2022-04-28 08:38:17 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-04-28 12:36:23 +0200 |
commit | 12dcfc191bc258b51f5d00f46ea44a6a1c6fda91 (patch) | |
tree | 2cb861f63d2b2ec4cc1e6f7138ca659093c55951 /vcl | |
parent | f8d6ec1a516237f0e9f73080b172ecba3e96478d (diff) |
include LogicalFontInstance font scale in SalLayoutGlyphsCache key
For some reason it may differ even if vcl::Font is the same.
Without this ScExportTest2::testTdf66668 fails.
Change-Id: I728a0848ac0420ce0d746134c7072f6ab59f2761
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133537
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/impglyphitem.cxx | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/vcl/source/gdi/impglyphitem.cxx b/vcl/source/gdi/impglyphitem.cxx index 09acbae46150..93f70a853a74 100644 --- a/vcl/source/gdi/impglyphitem.cxx +++ b/vcl/source/gdi/impglyphitem.cxx @@ -364,6 +364,9 @@ SalLayoutGlyphsCache::CachedGlyphsKey::CachedGlyphsKey(const VclPtr<const Output , layoutMode(outputDevice->GetLayoutMode()) , digitLanguage(outputDevice->GetDigitLanguage()) { + const LogicalFontInstance* fi = outputDevice->GetFontInstance(); + fi->GetScale(&fontScaleX, &fontScaleY); + hashValue = 0; o3tl::hash_combine(hashValue, vcl::text::FirstCharsStringHash()(text)); o3tl::hash_combine(hashValue, index); @@ -371,7 +374,13 @@ SalLayoutGlyphsCache::CachedGlyphsKey::CachedGlyphsKey(const VclPtr<const Output o3tl::hash_combine(hashValue, logicWidth); o3tl::hash_combine(hashValue, outputDevice.get()); + // Need to use IgnoreColor, because sometimes the color changes, but it's irrelevant + // for text layout (and also obsolete in vcl::Font). o3tl::hash_combine(hashValue, font.GetHashValueIgnoreColor()); + // For some reason font scale may differ even if vcl::Font is the same, + // so explicitly check it too. + o3tl::hash_combine(hashValue, fontScaleX); + o3tl::hash_combine(hashValue, fontScaleY); o3tl::hash_combine(hashValue, mapMode.GetHashValue()); o3tl::hash_combine(hashValue, rtl); o3tl::hash_combine(hashValue, layoutMode); @@ -383,10 +392,8 @@ inline bool SalLayoutGlyphsCache::CachedGlyphsKey::operator==(const CachedGlyphs return hashValue == other.hashValue && index == other.index && len == other.len && logicWidth == other.logicWidth && outputDevice == other.outputDevice && mapMode == other.mapMode && rtl == other.rtl && layoutMode == other.layoutMode - && digitLanguage == other.digitLanguage - // Need to use EqualIgnoreColor, because sometimes the color changes, but it's irrelevant - // for text layout (and also obsolete in vcl::Font). - && font.EqualIgnoreColor(other.font) + && digitLanguage == other.digitLanguage && fontScaleX == other.fontScaleX + && fontScaleY == other.fontScaleY && font.EqualIgnoreColor(other.font) && vcl::text::FastStringCompareEqual()(text, other.text); // Slower things last in the comparison. } |