[Libreoffice-commits] core.git: vcl/inc vcl/quartz vcl/source vcl/unx vcl/win

Khaled Hosny khaledhosny at eglug.org
Sun Dec 11 00:22:47 UTC 2016


 vcl/inc/salglyphid.hxx                         |    4 ----
 vcl/quartz/ctfonts.cxx                         |    4 ++--
 vcl/quartz/salgdi.cxx                          |    2 +-
 vcl/quartz/salgdicommon.cxx                    |    2 +-
 vcl/source/gdi/pdffontcache.cxx                |    6 ++----
 vcl/source/gdi/pdfwriter_impl.cxx              |    2 +-
 vcl/source/gdi/sallayout.cxx                   |    9 +--------
 vcl/source/outdev/text.cxx                     |    2 +-
 vcl/unx/generic/gdi/cairotextrender.cxx        |    2 +-
 vcl/unx/generic/glyphs/freetype_glyphcache.cxx |    4 ++--
 vcl/unx/generic/glyphs/glyphcache.cxx          |    4 ++--
 vcl/win/gdi/salfont.cxx                        |   23 ++++++-----------------
 vcl/win/gdi/winlayout.cxx                      |    6 +++---
 13 files changed, 23 insertions(+), 47 deletions(-)

New commits:
commit a597dc833966aba23d4b677e5bcd6f74b979fc9d
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Thu Dec 8 05:57:40 2016 +0200

    sal_GlyphId is a simple glyph id now
    
    No more cleverness.
    
    Change-Id: I760c602802961b37728c6987c4ade14fb02ca034
    Reviewed-on: https://gerrit.libreoffice.org/31819
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Khaled Hosny <khaledhosny at eglug.org>

diff --git a/vcl/inc/salglyphid.hxx b/vcl/inc/salglyphid.hxx
index 72cf4fc..6d5480e 100644
--- a/vcl/inc/salglyphid.hxx
+++ b/vcl/inc/salglyphid.hxx
@@ -19,13 +19,9 @@
 #ifndef INCLUDED_VCL_INC_SALGLYPHID_HXX
 #define INCLUDED_VCL_INC_SALGLYPHID_HXX
 
-// TODO: sal_GlyphId should become a class...
 typedef sal_uInt32 sal_GlyphId;
 
 // Glyph Flags
-#define GF_FLAGMASK 0xFF800000
-#define GF_IDXMASK  ~GF_FLAGMASK
-
 #ifdef _WIN32
 // caution !!!
 #define GF_VERT     0x02000000
diff --git a/vcl/quartz/ctfonts.cxx b/vcl/quartz/ctfonts.cxx
index 52062eb..f5ea6db 100644
--- a/vcl/quartz/ctfonts.cxx
+++ b/vcl/quartz/ctfonts.cxx
@@ -154,7 +154,7 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
 
 bool CoreTextStyle::GetGlyphBoundRect(const GlyphItem& rGlyph, Rectangle& rRect ) const
 {
-    CGGlyph nCGGlyph = rGlyph.maGlyphId & GF_IDXMASK;
+    CGGlyph nCGGlyph = rGlyph.maGlyphId;
     CTFontRef aCTFontRef = static_cast<CTFontRef>(CFDictionaryGetValue( mpStyleDict, kCTFontAttributeName ));
 
     SAL_WNODEPRECATED_DECLARATIONS_PUSH //TODO: 10.11 kCTFontDefaultOrientation
@@ -229,7 +229,7 @@ bool CoreTextStyle::GetGlyphOutline(const GlyphItem& rGlyph, basegfx::B2DPolyPol
 {
     rResult.clear();
 
-    CGGlyph nCGGlyph = rGlyph.maGlyphId & GF_IDXMASK;
+    CGGlyph nCGGlyph = rGlyph.maGlyphId;
     CTFontRef pCTFont = static_cast<CTFontRef>(CFDictionaryGetValue( mpStyleDict, kCTFontAttributeName ));
     CGPathRef xPath = CTFontCreatePathForGlyph( pCTFont, nCGGlyph, nullptr );
     if (!xPath)
diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx
index 0df8955..e38f5d2 100644
--- a/vcl/quartz/salgdi.cxx
+++ b/vcl/quartz/salgdi.cxx
@@ -442,7 +442,7 @@ void AquaSalGraphics::DrawTextLayout(const CommonSalLayout& rLayout)
             }
         }
 
-        aGlyphIds.push_back(pGlyph->maGlyphId & GF_IDXMASK);
+        aGlyphIds.push_back(pGlyph->maGlyphId);
         aGlyphPos.push_back(aGCPos);
         aGlyphOrientation.push_back(bUprightGlyph);
     }
diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx
index 57a930a..2222e06 100644
--- a/vcl/quartz/salgdicommon.cxx
+++ b/vcl/quartz/salgdicommon.cxx
@@ -274,7 +274,7 @@ bool AquaSalGraphics::CreateFontSubset( const OUString& rToFile,
     {
         aTempEncs[i] = pEncoding[i];
 
-        sal_GlyphId aGlyphId(pGlyphIds[i] & GF_IDXMASK);
+        sal_GlyphId aGlyphId(pGlyphIds[i]);
         aShortIDs[i] = static_cast<sal_uInt16>( aGlyphId );
         if( !aGlyphId && nNotDef < 0 )
         {
diff --git a/vcl/source/gdi/pdffontcache.cxx b/vcl/source/gdi/pdffontcache.cxx
index 8140db7..67a8614 100644
--- a/vcl/source/gdi/pdffontcache.cxx
+++ b/vcl/source/gdi/pdffontcache.cxx
@@ -58,10 +58,8 @@ sal_Int32 PDFFontCache::getGlyphWidth( const PhysicalFontFace* pFont, sal_GlyphI
     }
     if( ! rFontData.m_nWidths.empty() )
     {
-        sal_GlyphId nIndex = nGlyph;
-        nIndex &= GF_IDXMASK;
-        if( nIndex < rFontData.m_nWidths.size() )
-            nWidth = rFontData.m_nWidths[ nIndex ];
+        if (nGlyph < rFontData.m_nWidths.size())
+            nWidth = rFontData.m_nWidths[nGlyph];
     }
     return nWidth;
 }
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index ab05594..241324d 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -8144,7 +8144,7 @@ void PDFWriterImpl::registerGlyphs( int nGlyphs,
     sal_Ucs* pCurUnicode = pUnicodes;
     for( int i = 0; i < nGlyphs; pCurUnicode += pUnicodesPerGlyph[i] , i++ )
     {
-        const int nFontGlyphId = pGlyphs[i]->maGlyphId & GF_IDXMASK;
+        const int nFontGlyphId = pGlyphs[i]->maGlyphId;
         const PhysicalFontFace* pCurrentFont = pFallbackFonts[i] ? pFallbackFonts[i] : pDevFont;
 
         FontSubset& rSubset = m_aSubsets[ pCurrentFont ];
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index bdbb28d..1567d60 100644
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -728,7 +728,7 @@ bool SalLayout::GetBoundRect( SalGraphics& rSalGraphics, Rectangle& rRect ) cons
 bool SalLayout::IsSpacingGlyph( sal_GlyphId nGlyph )
 {
     bool bRet = false;
-    bRet = ((nGlyph & GF_IDXMASK) == 3);
+    bRet = (nGlyph == 3);
     return bRet;
 }
 
@@ -973,7 +973,6 @@ int GenericSalLayout::GetNextGlyphs(int nLen, const GlyphItem** pGlyphs,
     // find more glyphs which can be merged into one drawing instruction
     int nCount = 0;
     long nYPos = pGlyphIter->maLinearPos.Y();
-    long nOldFlags = pGlyphIter->maGlyphId;
     for(;;)
     {
         // update return data with glyph info
@@ -1003,12 +1002,6 @@ int GenericSalLayout::GetNextGlyphs(int nLen, const GlyphItem** pGlyphs,
         int n = pGlyphIter->mnCharPos;
         if( (n < mnMinCharPos) || (mnEndCharPos <= n) )
             break;
-
-        // stop when glyph flags change
-        if( (nOldFlags ^ pGlyphIter->maGlyphId) & GF_FLAGMASK )
-            break;
-
-        nOldFlags = pGlyphIter->maGlyphId; // &GF_FLAGMASK not needed for test above
     }
 
     aRelativePos.X() /= mnUnitsPerPixel;
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 2d66822..c94b21d 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -2394,7 +2394,7 @@ SystemTextLayoutData OutputDevice::GetSysTextLayoutData(const Point& rStartPt, c
     while (pLayout->GetNextGlyphs(1, &pGlyph, aPos, nStart))
     {
         SystemGlyphData aSystemGlyph;
-        aSystemGlyph.index = static_cast<unsigned long> (pGlyph->maGlyphId & GF_IDXMASK);
+        aSystemGlyph.index = static_cast<unsigned long> (pGlyph->maGlyphId);
         aSystemGlyph.x = aPos.X();
         aSystemGlyph.y = aPos.Y();
         int nLevel = pGlyph->mnFallbackLevel;
diff --git a/vcl/unx/generic/gdi/cairotextrender.cxx b/vcl/unx/generic/gdi/cairotextrender.cxx
index ec025b8..b3f6165 100644
--- a/vcl/unx/generic/gdi/cairotextrender.cxx
+++ b/vcl/unx/generic/gdi/cairotextrender.cxx
@@ -178,7 +178,7 @@ void CairoTextRender::DrawTextLayout(const CommonSalLayout& rLayout)
     while (rLayout.GetNextGlyphs(1, &pGlyph, aPos, nStart))
     {
         cairo_glyph_t aGlyph;
-        aGlyph.index = pGlyph->maGlyphId & GF_IDXMASK;
+        aGlyph.index = pGlyph->maGlyphId;
         aGlyph.x = aPos.X();
         aGlyph.y = aPos.Y();
         cairo_glyphs.push_back(aGlyph);
diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
index 039ffad..cc5683c 100644
--- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
@@ -685,7 +685,7 @@ void FreetypeFont::InitGlyphData(const GlyphItem& rGlyph, GlyphData& rGD ) const
 {
     FT_Activate_Size( maSizeFT );
 
-    FT_Error rc = FT_Load_Glyph(maFaceFT, rGlyph.maGlyphId & GF_IDXMASK, mnLoadFlags);
+    FT_Error rc = FT_Load_Glyph(maFaceFT, rGlyph.maGlyphId, mnLoadFlags);
 
     if( rc != FT_Err_Ok )
     {
@@ -998,7 +998,7 @@ bool FreetypeFont::GetGlyphOutline(const GlyphItem& rGlyph,
     nLoadFlags |= FT_LOAD_TARGET_LIGHT;
 #endif
 
-    FT_Error rc = FT_Load_Glyph(maFaceFT, rGlyph.maGlyphId & GF_IDXMASK, nLoadFlags);
+    FT_Error rc = FT_Load_Glyph(maFaceFT, rGlyph.maGlyphId, nLoadFlags);
     if( rc != FT_Err_Ok )
         return false;
 
diff --git a/vcl/unx/generic/glyphs/glyphcache.cxx b/vcl/unx/generic/glyphs/glyphcache.cxx
index b41f7c0..103fc54 100644
--- a/vcl/unx/generic/glyphs/glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/glyphcache.cxx
@@ -307,7 +307,7 @@ long FreetypeFont::Release() const
 const GlyphMetric& FreetypeFont::GetGlyphMetric(const GlyphItem& rGlyph)
 {
     // usually the GlyphData is cached
-    GlyphList::iterator it = maGlyphList.find(rGlyph.maGlyphId & GF_IDXMASK);
+    GlyphList::iterator it = maGlyphList.find(rGlyph.maGlyphId);
     if( it != maGlyphList.end() ) {
         GlyphData& rGlyphData = it->second;
         GlyphCache::GetInstance().UsingGlyph( *this, rGlyphData );
@@ -315,7 +315,7 @@ const GlyphMetric& FreetypeFont::GetGlyphMetric(const GlyphItem& rGlyph)
     }
 
     // sometimes not => we need to create and initialize it ourselves
-    GlyphData& rGlyphData = maGlyphList[rGlyph.maGlyphId & GF_IDXMASK];
+    GlyphData& rGlyphData = maGlyphList[rGlyph.maGlyphId];
     mnBytesUsed += sizeof( GlyphData );
     InitGlyphData(rGlyph, rGlyphData);
     GlyphCache::GetInstance().AddedGlyph( *this, rGlyphData );
diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index 5d2255a..65c909f 100644
--- a/vcl/win/gdi/salfont.cxx
+++ b/vcl/win/gdi/salfont.cxx
@@ -1368,7 +1368,7 @@ bool WinSalGraphics::GetGlyphBoundRect(const GlyphItem& rGlyph, Rectangle& rRect
     GLYPHMETRICS aGM;
     aGM.gmptGlyphOrigin.x = aGM.gmptGlyphOrigin.y = 0;
     aGM.gmBlackBoxX = aGM.gmBlackBoxY = 0;
-    DWORD nSize = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId & GF_IDXMASK, nGGOFlags, &aGM, 0, nullptr, &aMat);
+    DWORD nSize = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId, nGGOFlags, &aGM, 0, nullptr, &aMat);
     if( nSize == GDI_ERROR )
         return false;
 
@@ -1397,14 +1397,14 @@ bool WinSalGraphics::GetGlyphOutline(const GlyphItem& rGlyph,
     nGGOFlags |= GGO_GLYPH_INDEX;
 
     GLYPHMETRICS aGlyphMetrics;
-    const DWORD nSize1 = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId & GF_IDXMASK, nGGOFlags, &aGlyphMetrics, 0, nullptr, &aMat);
+    const DWORD nSize1 = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId, nGGOFlags, &aGlyphMetrics, 0, nullptr, &aMat);
     if( !nSize1 )       // blank glyphs are ok
         return true;
     else if( nSize1 == GDI_ERROR )
         return false;
 
     BYTE* pData = new BYTE[ nSize1 ];
-    const DWORD nSize2 = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId & GF_IDXMASK, nGGOFlags,
+    const DWORD nSize2 = ::GetGlyphOutlineW(hDC, rGlyph.maGlyphId, nGGOFlags,
               &aGlyphMetrics, nSize1, pData, &aMat );
 
     if( nSize1 != nSize2 )
@@ -1661,23 +1661,13 @@ bool WinSalGraphics::CreateFontSubset( const OUString& rToFile,
     {
         pWinFontData->UpdateFromHDC( getHDC() );
         FontCharMapRef xFontCharMap = pWinFontData->GetFontCharMap();
-
-        sal_GlyphId aRealGlyphIds[ 256 ];
-        for( int i = 0; i < nGlyphCount; ++i )
-        {
-            // TODO: remap notdef glyph if needed
-            // TODO: use GDI's GetGlyphIndices instead? Does it handle GSUB properly?
-            sal_GlyphId aGlyphId = pGlyphIds[i] & GF_IDXMASK;
-            aRealGlyphIds[i] = aGlyphId;
-        }
-
         xFontCharMap = nullptr;
 
         // provide a font subset from the CFF-table
         FILE* pOutFile = fopen( aToFile.getStr(), "wb" );
         rInfo.LoadFont( FontSubsetInfo::CFF_FONT, aRawCffData.get(), aRawCffData.size() );
         bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, nullptr,
-                aRealGlyphIds, pEncoding, nGlyphCount, pGlyphWidths );
+                pGlyphIds, pEncoding, nGlyphCount, pGlyphWidths );
         fclose( pOutFile );
         return bRC;
     }
@@ -1717,9 +1707,8 @@ bool WinSalGraphics::CreateFontSubset( const OUString& rToFile,
     for( i = 0; i < nGlyphCount; ++i )
     {
         aTempEncs[i] = pEncoding[i];
-        sal_GlyphId aGlyphId = pGlyphIds[i] & GF_IDXMASK;
-        aShortIDs[i] = static_cast<sal_uInt16>( aGlyphId );
-        if( !aGlyphId )
+        aShortIDs[i] = static_cast<sal_uInt16>(pGlyphIds[i]);
+        if (!aShortIDs[i])
             if( nNotDef < 0 )
                 nNotDef = i; // first NotDef glyph found
     }
diff --git a/vcl/win/gdi/winlayout.cxx b/vcl/win/gdi/winlayout.cxx
index 8b21863..708c931 100644
--- a/vcl/win/gdi/winlayout.cxx
+++ b/vcl/win/gdi/winlayout.cxx
@@ -294,7 +294,7 @@ bool ExTextOutRenderer::operator ()(SalLayout const &rLayout, HDC hDC,
     while (rLayout.GetNextGlyphs(1, &pGlyph, *pPos, *pGetNextGlypInfo))
     {
         bGlyphs = true;
-        WORD glyphWStr[] = { pGlyph->maGlyphId & GF_IDXMASK };
+        WORD glyphWStr[] = { pGlyph->maGlyphId };
         if (pGlyph->IsVertical())
             glyphWStr[0] |= GF_VERT;
         ExtTextOutW(hDC, pPos->X(), pPos->Y(), ETO_GLYPH_INDEX, nullptr, LPCWSTR(&glyphWStr), 1, nullptr);
@@ -386,7 +386,7 @@ bool D2DWriteTextOutRenderer::operator ()(SalLayout const &rLayout, HDC hDC,
         while (rLayout.GetNextGlyphs(1, &pGlyph, *pPos, *pGetNextGlypInfo))
         {
             bGlyphs = true;
-            UINT16 glyphIndices[] = { pGlyph->maGlyphId & GF_IDXMASK };
+            UINT16 glyphIndices[] = { pGlyph->maGlyphId };
             FLOAT glyphAdvances[] = { pGlyph->mnNewWidth };
             DWRITE_GLYPH_OFFSET glyphOffsets[] = { { 0.0f, 0.0f }, };
             D2D1_POINT_2F baseline = { pPos->X() - bounds.Left(), pPos->Y() - bounds.Top() };
@@ -545,7 +545,7 @@ bool D2DWriteTextOutRenderer::GetDWriteInkBox(SalLayout const &rLayout, Rectangl
     while (rLayout.GetNextGlyphs(1, &pGlyph, aPos, nStart))
     {
         positions.push_back(aPos);
-        indices.push_back(pGlyph->maGlyphId & GF_IDXMASK);
+        indices.push_back(pGlyph->maGlyphId);
         vertical.push_back(pGlyph->IsVertical());
     }
 


More information about the Libreoffice-commits mailing list