OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkPaint.h" | 9 #include "SkPaint.h" |
10 #include "SkAnnotation.h" | 10 #include "SkAnnotation.h" |
(...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1196 } | 1196 } |
1197 | 1197 |
1198 // return the number of bytes measured | 1198 // return the number of bytes measured |
1199 return (kForward_TextBufferDirection == tbd) ? | 1199 return (kForward_TextBufferDirection == tbd) ? |
1200 text - stop + length : stop - text + length; | 1200 text - stop + length : stop - text + length; |
1201 } | 1201 } |
1202 | 1202 |
1203 /////////////////////////////////////////////////////////////////////////////// | 1203 /////////////////////////////////////////////////////////////////////////////// |
1204 | 1204 |
1205 static bool FontMetricsCacheProc(const SkGlyphCache* cache, void* context) { | 1205 static bool FontMetricsCacheProc(const SkGlyphCache* cache, void* context) { |
1206 *(SkPaint::FontMetrics*)context = cache->getFontMetricsY(); | 1206 *(SkPaint::FontMetrics*)context = cache->getFontMetrics(); |
1207 return false; // don't detach the cache | 1207 return false; // don't detach the cache |
1208 } | 1208 } |
1209 | 1209 |
1210 static void FontMetricsDescProc(SkTypeface* typeface, const SkDescriptor* desc, | 1210 static void FontMetricsDescProc(SkTypeface* typeface, const SkDescriptor* desc, |
1211 void* context) { | 1211 void* context) { |
1212 SkGlyphCache::VisitCache(typeface, desc, FontMetricsCacheProc, context); | 1212 SkGlyphCache::VisitCache(typeface, desc, FontMetricsCacheProc, context); |
1213 } | 1213 } |
1214 | 1214 |
1215 SkScalar SkPaint::getFontMetrics(FontMetrics* metrics, SkScalar zoom) const { | 1215 SkScalar SkPaint::getFontMetrics(FontMetrics* metrics, SkScalar zoom) const { |
1216 SkScalar scale = 0; | 1216 SkScalar scale = 0; |
1217 SkAutoRestorePaintTextSizeAndFrame restore(this); | 1217 SkAutoRestorePaintTextSizeAndFrame restore(this); |
1218 | 1218 |
1219 if (this->isLinearText()) { | 1219 if (this->isLinearText()) { |
1220 scale = fTextSize / kCanonicalTextSizeForPaths; | 1220 scale = fTextSize / kCanonicalTextSizeForPaths; |
1221 // this gets restored by restore | 1221 // this gets restored by restore |
1222 ((SkPaint*)this)->setTextSize(SkIntToScalar(kCanonicalTextSizeForPaths))
; | 1222 ((SkPaint*)this)->setTextSize(SkIntToScalar(kCanonicalTextSizeForPaths))
; |
1223 } | 1223 } |
1224 | 1224 |
1225 SkMatrix zoomMatrix, *zoomPtr = NULL; | 1225 SkMatrix zoomMatrix, *zoomPtr = NULL; |
1226 if (zoom) { | 1226 if (zoom) { |
1227 zoomMatrix.setScale(zoom, zoom); | 1227 zoomMatrix.setScale(zoom, zoom); |
1228 zoomPtr = &zoomMatrix; | 1228 zoomPtr = &zoomMatrix; |
1229 } | 1229 } |
1230 | 1230 |
1231 #if 0 | |
1232 SkAutoGlyphCache autoCache(*this, zoomPtr); | |
1233 SkGlyphCache* cache = autoCache.getCache(); | |
1234 const FontMetrics& my = cache->getFontMetricsY(); | |
1235 #endif | |
1236 FontMetrics storage; | 1231 FontMetrics storage; |
1237 if (NULL == metrics) { | 1232 if (NULL == metrics) { |
1238 metrics = &storage; | 1233 metrics = &storage; |
1239 } | 1234 } |
1240 | 1235 |
1241 this->descriptorProc(NULL, zoomPtr, FontMetricsDescProc, metrics, true); | 1236 this->descriptorProc(NULL, zoomPtr, FontMetricsDescProc, metrics, true); |
1242 | 1237 |
1243 if (scale) { | 1238 if (scale) { |
1244 metrics->fTop = SkScalarMul(metrics->fTop, scale); | 1239 metrics->fTop = SkScalarMul(metrics->fTop, scale); |
1245 metrics->fAscent = SkScalarMul(metrics->fAscent, scale); | 1240 metrics->fAscent = SkScalarMul(metrics->fAscent, scale); |
1246 metrics->fDescent = SkScalarMul(metrics->fDescent, scale); | 1241 metrics->fDescent = SkScalarMul(metrics->fDescent, scale); |
1247 metrics->fBottom = SkScalarMul(metrics->fBottom, scale); | 1242 metrics->fBottom = SkScalarMul(metrics->fBottom, scale); |
1248 metrics->fLeading = SkScalarMul(metrics->fLeading, scale); | 1243 metrics->fLeading = SkScalarMul(metrics->fLeading, scale); |
| 1244 metrics->fAvgCharWidth = SkScalarMul(metrics->fAvgCharWidth, scale); |
| 1245 metrics->fXMin = SkScalarMul(metrics->fXMin, scale); |
| 1246 metrics->fXMax = SkScalarMul(metrics->fXMax, scale); |
| 1247 metrics->fXHeight = SkScalarMul(metrics->fXHeight, scale); |
1249 } | 1248 } |
1250 return metrics->fDescent - metrics->fAscent + metrics->fLeading; | 1249 return metrics->fDescent - metrics->fAscent + metrics->fLeading; |
1251 } | 1250 } |
1252 | 1251 |
1253 /////////////////////////////////////////////////////////////////////////////// | 1252 /////////////////////////////////////////////////////////////////////////////// |
1254 | 1253 |
1255 static void set_bounds(const SkGlyph& g, SkRect* bounds, SkScalar scale) { | 1254 static void set_bounds(const SkGlyph& g, SkRect* bounds, SkScalar scale) { |
1256 bounds->set(g.fLeft * scale, | 1255 bounds->set(g.fLeft * scale, |
1257 g.fTop * scale, | 1256 g.fTop * scale, |
1258 (g.fLeft + g.fWidth) * scale, | 1257 (g.fLeft + g.fWidth) * scale, |
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2567 if (firstTime) { | 2566 if (firstTime) { |
2568 *dst = r; | 2567 *dst = r; |
2569 } else { | 2568 } else { |
2570 dst->join(r); | 2569 dst->join(r); |
2571 } | 2570 } |
2572 } else { | 2571 } else { |
2573 break; | 2572 break; |
2574 } | 2573 } |
2575 } | 2574 } |
2576 } | 2575 } |
OLD | NEW |