OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "GrTextContext.h" | 8 #include "GrTextContext.h" |
9 #include "GrContext.h" | 9 #include "GrContext.h" |
10 | 10 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 return true; | 69 return true; |
70 } | 70 } |
71 textContext = textContext->fFallbackTextContext; | 71 textContext = textContext->fFallbackTextContext; |
72 } while (textContext); | 72 } while (textContext); |
73 | 73 |
74 return false; | 74 return false; |
75 } | 75 } |
76 | 76 |
77 | 77 |
78 //*** change to output positions? | 78 //*** change to output positions? |
79 void GrTextContext::MeasureText(SkGlyphCache* cache, SkDrawCacheProc glyphCacheP
roc, | 79 int GrTextContext::MeasureText(SkGlyphCache* cache, SkDrawCacheProc glyphCachePr
oc, |
80 const char text[], size_t byteLength, SkVector*
stopVector) { | 80 const char text[], size_t byteLength, SkVector*
stopVector) { |
81 SkFixed x = 0, y = 0; | 81 SkFixed x = 0, y = 0; |
82 const char* stop = text + byteLength; | 82 const char* stop = text + byteLength; |
83 | 83 |
84 SkAutoKern autokern; | 84 SkAutoKern autokern; |
85 | 85 |
| 86 int numGlyphs = 0; |
86 while (text < stop) { | 87 while (text < stop) { |
87 // don't need x, y here, since all subpixel variants will have the | 88 // don't need x, y here, since all subpixel variants will have the |
88 // same advance | 89 // same advance |
89 const SkGlyph& glyph = glyphCacheProc(cache, &text, 0, 0); | 90 const SkGlyph& glyph = glyphCacheProc(cache, &text, 0, 0); |
90 | 91 |
91 x += autokern.adjust(glyph) + glyph.fAdvanceX; | 92 x += autokern.adjust(glyph) + glyph.fAdvanceX; |
92 y += glyph.fAdvanceY; | 93 y += glyph.fAdvanceY; |
| 94 ++numGlyphs; |
93 } | 95 } |
94 stopVector->set(SkFixedToScalar(x), SkFixedToScalar(y)); | 96 stopVector->set(SkFixedToScalar(x), SkFixedToScalar(y)); |
95 | 97 |
96 SkASSERT(text == stop); | 98 SkASSERT(text == stop); |
| 99 |
| 100 return numGlyphs; |
97 } | 101 } |
98 | 102 |
99 static void GlyphCacheAuxProc(void* data) { | 103 static void GlyphCacheAuxProc(void* data) { |
100 GrFontScaler* scaler = (GrFontScaler*)data; | 104 GrFontScaler* scaler = (GrFontScaler*)data; |
101 SkSafeUnref(scaler); | 105 SkSafeUnref(scaler); |
102 } | 106 } |
103 | 107 |
104 GrFontScaler* GrTextContext::GetGrFontScaler(SkGlyphCache* cache) { | 108 GrFontScaler* GrTextContext::GetGrFontScaler(SkGlyphCache* cache) { |
105 void* auxData; | 109 void* auxData; |
106 GrFontScaler* scaler = NULL; | 110 GrFontScaler* scaler = NULL; |
107 | 111 |
108 if (cache->getAuxProcData(GlyphCacheAuxProc, &auxData)) { | 112 if (cache->getAuxProcData(GlyphCacheAuxProc, &auxData)) { |
109 scaler = (GrFontScaler*)auxData; | 113 scaler = (GrFontScaler*)auxData; |
110 } | 114 } |
111 if (NULL == scaler) { | 115 if (NULL == scaler) { |
112 scaler = SkNEW_ARGS(GrFontScaler, (cache)); | 116 scaler = SkNEW_ARGS(GrFontScaler, (cache)); |
113 cache->setAuxProc(GlyphCacheAuxProc, scaler); | 117 cache->setAuxProc(GlyphCacheAuxProc, scaler); |
114 } | 118 } |
115 | 119 |
116 return scaler; | 120 return scaler; |
117 } | 121 } |
OLD | NEW |