Use real glyph IDs in the win fonthost to better support pdf.
authorvandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 10 Feb 2011 21:04:34 +0000 (21:04 +0000)
committervandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 10 Feb 2011 21:04:34 +0000 (21:04 +0000)
Review URL: http://codereview.appspot.com/4142044

git-svn-id: http://skia.googlecode.com/svn/trunk@782 2bbb7eff-a529-9590-31e7-b0007b416f81

src/ports/SkFontHost_win.cpp

index 60e25ae..dacabac 100644 (file)
@@ -220,13 +220,11 @@ unsigned SkScalerContext_Windows::generateGlyphCount() const {
 }\r
 \r
 uint16_t SkScalerContext_Windows::generateCharToGlyph(SkUnichar uni) {\r
-\r
-    //uint16_t index = 0;\r
-    //GetGlyphIndicesW(ddc, &(uint16_t&)uni, 1, &index, 0);\r
-    //return index;\r
-\r
-    // let's just use the uni as index on Windows\r
-    return SkToU16(uni);\r
+    uint16_t index = 0;\r
+    // TODO(ctguil): Support values larger than 16bits.\r
+    WCHAR c = SkToU16(uni);\r
+    GetGlyphIndicesW(ddc, &c, 1, &index, 0);\r
+    return index;\r
 }\r
 \r
 void SkScalerContext_Windows::generateAdvance(SkGlyph* glyph) {\r
@@ -243,11 +241,9 @@ void SkScalerContext_Windows::generateMetrics(SkGlyph* glyph) {
     glyph->fRsbDelta = 0;\r
     glyph->fLsbDelta = 0;\r
 \r
-    UINT glyphIndexFlag = 0; //glyph->fIsCodePoint ? 0 : GGO_GLYPH_INDEX;\r
-    //    UINT glyphIndexFlag = GGO_GLYPH_INDEX;\r
     // Note: need to use GGO_GRAY8_BITMAP instead of GGO_METRICS because GGO_METRICS returns a smaller\r
     // BlackBlox; we need the bigger one in case we need the image.  fAdvance is the same.\r
-    uint32_t ret = GetGlyphOutlineW(ddc, glyph->getGlyphID(0), GGO_GRAY8_BITMAP | glyphIndexFlag, &gm, 0, NULL, &mat22);\r
+    uint32_t ret = GetGlyphOutlineW(ddc, glyph->getGlyphID(0), GGO_GRAY8_BITMAP | GGO_GLYPH_INDEX, &gm, 0, NULL, &mat22);\r
 \r
     if (GDI_ERROR != ret) {\r
         if (ret == 0) {\r
@@ -321,13 +317,11 @@ void SkScalerContext_Windows::generateImage(const SkGlyph& glyph) {
 #endif\r
 \r
     uint32_t bytecount = 0;\r
-    UINT glyphIndexFlag = 0; //glyph.fIsCodePoint ? 0 : GGO_GLYPH_INDEX;\r
-    //    UINT glyphIndexFlag = GGO_GLYPH_INDEX;\r
-    uint32_t total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_GRAY8_BITMAP | glyphIndexFlag, &gm, 0, NULL, &mat22);\r
+    uint32_t total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_GRAY8_BITMAP | GGO_GLYPH_INDEX, &gm, 0, NULL, &mat22);\r
     if (GDI_ERROR != total_size && total_size > 0) {\r
         uint8_t *pBuff = new uint8_t[total_size];\r
         if (NULL != pBuff) {\r
-            total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_GRAY8_BITMAP | glyphIndexFlag, &gm, total_size, pBuff, &mat22);\r
+            total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_GRAY8_BITMAP | GGO_GLYPH_INDEX, &gm, total_size, pBuff, &mat22);\r
 \r
             SkASSERT(total_size != GDI_ERROR);\r
 \r
@@ -382,8 +376,7 @@ void SkScalerContext_Windows::generatePath(const SkGlyph& glyph, SkPath* path) {
 #endif\r
 \r
     GLYPHMETRICS gm;\r
-    UINT glyphIndexFlag = 0; //glyph.fIsCodePoint ? 0 : GGO_GLYPH_INDEX;\r
-    uint32_t total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_NATIVE | glyphIndexFlag, &gm, BUFFERSIZE, glyphbuf, &mat22);\r
+    uint32_t total_size = GetGlyphOutlineW(ddc, glyph.fID, GGO_NATIVE | GGO_GLYPH_INDEX, &gm, BUFFERSIZE, glyphbuf, &mat22);\r
 \r
     if (GDI_ERROR != total_size) {\r
 \r