diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2018-04-21 20:38:58 +0200 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2018-04-22 06:39:45 +0200 |
commit | bb56e2ded30d190c57810812983e5010f6945915 (patch) | |
tree | 6a5f5d22c4cf294a6fe22191365b846f222a2f14 | |
parent | 63a716783a555e91ad3a32f25f20cffc88ca15e4 (diff) |
Don’t abuse glyph id for flagging dropped glyphs
Use a bitflag instead.
Change-Id: I7833a37578112b5326f4a30578596e53085ff3c0
Reviewed-on: https://gerrit.libreoffice.org/53269
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Khaled Hosny <khaledhosny@eglug.org>
-rw-r--r-- | vcl/inc/sallayout.hxx | 4 | ||||
-rw-r--r-- | vcl/source/gdi/sallayout.cxx | 9 |
2 files changed, 7 insertions, 6 deletions
diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx index ba9cd3bd08e9..ffc38d4b8adf 100644 --- a/vcl/inc/sallayout.hxx +++ b/vcl/inc/sallayout.hxx @@ -286,7 +286,8 @@ public: IS_DIACRITIC = 0x004, IS_VERTICAL = 0x008, IS_SPACING = 0x010, - ALLOW_KASHIDA = 0x020 + ALLOW_KASHIDA = 0x020, + IS_DROPPED = 0x040 }; bool IsClusterStart() const { return ((mnFlags & IS_IN_CLUSTER) == 0); } @@ -295,6 +296,7 @@ public: bool IsVertical() const { return ((mnFlags & IS_VERTICAL) != 0); } bool IsSpacing() const { return ((mnFlags & IS_SPACING) != 0); } bool AllowKashida() const { return ((mnFlags & ALLOW_KASHIDA) != 0); } + bool IsDropped() const { return ((mnFlags & IS_DROPPED) != 0); } }; class VCL_PLUGIN_PUBLIC GenericSalLayout : public SalLayout diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index 616fc63e27fc..2d73d55517ea 100644 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -47,7 +47,6 @@ // Glyph Flags #define GF_FONTMASK 0xF0000000 #define GF_FONTSHIFT 28 -#define GF_DROPPED 0xFFFFFFFF std::ostream &operator <<(std::ostream& s, ImplLayoutArgs const &rArgs) @@ -1003,19 +1002,19 @@ void GenericSalLayout::DropGlyph( int nStart ) std::vector<GlyphItem>::iterator pGlyphIter = m_GlyphItems.begin(); pGlyphIter += nStart; - pGlyphIter->maGlyphId = GF_DROPPED; pGlyphIter->mnCharPos = -1; + pGlyphIter->mnFlags |= GlyphItem::IS_DROPPED; } void GenericSalLayout::Simplify( bool bIsBase ) { - const sal_GlyphId nDropMarker = bIsBase ? GF_DROPPED : 0; - // remove dropped glyphs inplace size_t j = 0; for(size_t i = 0; i < m_GlyphItems.size(); i++ ) { - if( m_GlyphItems[i].maGlyphId == nDropMarker ) + if (bIsBase && m_GlyphItems[i].IsDropped()) + continue; + if (!bIsBase && m_GlyphItems[i].maGlyphId == 0) continue; if( i != j ) |