OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrTextUtils.h" | 8 #include "GrTextUtils.h" |
9 | 9 |
10 #include "GrAtlasTextBlob.h" | 10 #include "GrAtlasTextBlob.h" |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 | 260 |
261 SkPaint::GlyphCacheProc glyphCacheProc = skPaint.getGlyphCacheProc(true); | 261 SkPaint::GlyphCacheProc glyphCacheProc = skPaint.getGlyphCacheProc(true); |
262 SkAutoDescriptor desc; | 262 SkAutoDescriptor desc; |
263 skPaint.getScalerContextDescriptor(&desc, props, SkPaint::FakeGamma::Off, nu
llptr); | 263 skPaint.getScalerContextDescriptor(&desc, props, SkPaint::FakeGamma::Off, nu
llptr); |
264 SkGlyphCache* origPaintCache = SkGlyphCache::DetachCache(skPaint.getTypeface
(), | 264 SkGlyphCache* origPaintCache = SkGlyphCache::DetachCache(skPaint.getTypeface
(), |
265 desc.getDesc()); | 265 desc.getDesc()); |
266 | 266 |
267 SkTArray<SkScalar> positions; | 267 SkTArray<SkScalar> positions; |
268 | 268 |
269 const char* textPtr = text; | 269 const char* textPtr = text; |
270 SkFixed stopX = 0; | 270 SkScalar stopX = 0; |
271 SkFixed stopY = 0; | 271 SkScalar stopY = 0; |
272 SkFixed origin = 0; | 272 SkScalar origin = 0; |
273 switch (skPaint.getTextAlign()) { | 273 switch (skPaint.getTextAlign()) { |
274 case SkPaint::kRight_Align: origin = SK_Fixed1; break; | 274 case SkPaint::kRight_Align: origin = SK_Scalar1; break; |
275 case SkPaint::kCenter_Align: origin = SK_FixedHalf; break; | 275 case SkPaint::kCenter_Align: origin = SK_ScalarHalf; break; |
276 case SkPaint::kLeft_Align: origin = 0; break; | 276 case SkPaint::kLeft_Align: origin = 0; break; |
277 } | 277 } |
278 | 278 |
279 SkAutoKern autokern; | 279 SkAutoKern autokern; |
280 const char* stop = text + byteLength; | 280 const char* stop = text + byteLength; |
281 while (textPtr < stop) { | 281 while (textPtr < stop) { |
282 // don't need x, y here, since all subpixel variants will have the | 282 // don't need x, y here, since all subpixel variants will have the |
283 // same advance | 283 // same advance |
284 const SkGlyph& glyph = glyphCacheProc(origPaintCache, &textPtr); | 284 const SkGlyph& glyph = glyphCacheProc(origPaintCache, &textPtr); |
285 | 285 |
286 SkFixed width = glyph.fAdvanceX + autokern.adjust(glyph); | 286 SkScalar width = SkFloatToScalar(glyph.fAdvanceX) + autokern.adjust(glyp
h); |
287 positions.push_back(SkFixedToScalar(stopX + SkFixedMul(origin, width))); | 287 positions.push_back(stopX + origin * width); |
288 | 288 |
289 SkFixed height = glyph.fAdvanceY; | 289 SkScalar height = SkFloatToScalar(glyph.fAdvanceY); |
290 positions.push_back(SkFixedToScalar(stopY + SkFixedMul(origin, height)))
; | 290 positions.push_back(stopY + origin * height); |
291 | 291 |
292 stopX += width; | 292 stopX += width; |
293 stopY += height; | 293 stopY += height; |
294 } | 294 } |
295 SkASSERT(textPtr == stop); | 295 SkASSERT(textPtr == stop); |
296 | 296 |
297 SkGlyphCache::AttachCache(origPaintCache); | 297 SkGlyphCache::AttachCache(origPaintCache); |
298 | 298 |
299 // now adjust starting point depending on alignment | 299 // now adjust starting point depending on alignment |
300 SkScalar alignX = SkFixedToScalar(stopX); | 300 SkScalar alignX = stopX; |
301 SkScalar alignY = SkFixedToScalar(stopY); | 301 SkScalar alignY = stopY; |
302 if (skPaint.getTextAlign() == SkPaint::kCenter_Align) { | 302 if (skPaint.getTextAlign() == SkPaint::kCenter_Align) { |
303 alignX = SkScalarHalf(alignX); | 303 alignX = SkScalarHalf(alignX); |
304 alignY = SkScalarHalf(alignY); | 304 alignY = SkScalarHalf(alignY); |
305 } else if (skPaint.getTextAlign() == SkPaint::kLeft_Align) { | 305 } else if (skPaint.getTextAlign() == SkPaint::kLeft_Align) { |
306 alignX = 0; | 306 alignX = 0; |
307 alignY = 0; | 307 alignY = 0; |
308 } | 308 } |
309 x -= alignX; | 309 x -= alignX; |
310 y -= alignY; | 310 y -= alignY; |
311 SkPoint offset = SkPoint::Make(x, y); | 311 SkPoint offset = SkPoint::Make(x, y); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 : S
K_Scalar1; | 380 : S
K_Scalar1; |
381 while (text < stop) { | 381 while (text < stop) { |
382 const char* lastText = text; | 382 const char* lastText = text; |
383 // the last 2 parameters are ignored | 383 // the last 2 parameters are ignored |
384 const SkGlyph& glyph = glyphCacheProc(cache, &text); | 384 const SkGlyph& glyph = glyphCacheProc(cache, &text); |
385 | 385 |
386 if (glyph.fWidth) { | 386 if (glyph.fWidth) { |
387 SkScalar x = offset.x() + pos[0]; | 387 SkScalar x = offset.x() + pos[0]; |
388 SkScalar y = offset.y() + (2 == scalarsPerPosition ? pos[1] : 0)
; | 388 SkScalar y = offset.y() + (2 == scalarsPerPosition ? pos[1] : 0)
; |
389 | 389 |
390 SkScalar advanceX = SkFixedToScalar(glyph.fAdvanceX) * alignMul
* textRatio; | 390 SkScalar advanceX = SkFloatToScalar(glyph.fAdvanceX) * alignMul
* textRatio; |
391 SkScalar advanceY = SkFixedToScalar(glyph.fAdvanceY) * alignMul
* textRatio; | 391 SkScalar advanceY = SkFloatToScalar(glyph.fAdvanceY) * alignMul
* textRatio; |
392 | 392 |
393 if (!DfAppendGlyph(blob, | 393 if (!DfAppendGlyph(blob, |
394 runIndex, | 394 runIndex, |
395 fontCache, | 395 fontCache, |
396 &currStrike, | 396 &currStrike, |
397 glyph, | 397 glyph, |
398 x - advanceX, y - advanceY, color, | 398 x - advanceX, y - advanceY, color, |
399 fontScaler, | 399 fontScaler, |
400 textRatio, | 400 textRatio, |
401 viewMatrix)) { | 401 viewMatrix)) { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 if (cache->getAuxProcData(glyph_cache_aux_proc, &auxData)) { | 575 if (cache->getAuxProcData(glyph_cache_aux_proc, &auxData)) { |
576 scaler = (GrFontScaler*)auxData; | 576 scaler = (GrFontScaler*)auxData; |
577 } | 577 } |
578 if (nullptr == scaler) { | 578 if (nullptr == scaler) { |
579 scaler = new GrFontScaler(cache); | 579 scaler = new GrFontScaler(cache); |
580 cache->setAuxProc(glyph_cache_aux_proc, scaler); | 580 cache->setAuxProc(glyph_cache_aux_proc, scaler); |
581 } | 581 } |
582 | 582 |
583 return scaler; | 583 return scaler; |
584 } | 584 } |
OLD | NEW |