OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrDistanceFieldTextContext.h" | 8 #include "GrDistanceFieldTextContext.h" |
9 #include "GrAtlas.h" | 9 #include "GrAtlas.h" |
10 #include "GrBitmapTextContext.h" | 10 #include "GrBitmapTextContext.h" |
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 SkScalarTruncToInt(dstRect.top()), | 528 SkScalarTruncToInt(dstRect.top()), |
529 SkScalarTruncToInt(dstRect.right()), | 529 SkScalarTruncToInt(dstRect.right()), |
530 SkScalarTruncToInt(dstRect.bottom()))) { | 530 SkScalarTruncToInt(dstRect.bottom()))) { |
531 // SkCLZ(3); // so we can set a break-point in the debugger | 531 // SkCLZ(3); // so we can set a break-point in the debugger |
532 return true; | 532 return true; |
533 } | 533 } |
534 | 534 |
535 if (NULL == glyph->fPlot) { | 535 if (NULL == glyph->fPlot) { |
536 // needs to be a separate conditional to avoid over-optimization | 536 // needs to be a separate conditional to avoid over-optimization |
537 // on Nexus 7 and Nexus 10 | 537 // on Nexus 7 and Nexus 10 |
| 538 // If the font is too large, we fall back to paths in SkGpuDevice. Howe
ver, its possible |
| 539 // for a corrupted font to have a super large glyph. We test for this b
elow and fall back |
| 540 // to paths. |
538 if (!uploadGlyph(glyph, scaler)) { | 541 if (!uploadGlyph(glyph, scaler)) { |
539 if (NULL == glyph->fPath) { | 542 if (NULL == glyph->fPath) { |
540 SkPath* path = SkNEW(SkPath); | 543 SkPath* path = SkNEW(SkPath); |
541 if (!scaler->getGlyphPath(glyph->glyphID(), path)) { | 544 if (!scaler->getGlyphPath(glyph->glyphID(), path)) { |
542 // flag the glyph as being dead? | 545 // flag the glyph as being dead? |
543 delete path; | 546 delete path; |
544 return true; | 547 return true; |
545 } | 548 } |
546 glyph->fPath = path; | 549 glyph->fPath = path; |
547 } | 550 } |
548 | 551 |
549 // flush any accumulated draws before drawing this glyph as a path. | 552 // flush any accumulated draws before drawing this glyph as a path. |
550 this->flush(); | 553 this->flush(); |
551 | 554 |
552 SkMatrix ctm; | 555 SkMatrix ctm; |
553 ctm.setScale(fTextRatio, fTextRatio); | 556 ctm.setScale(fTextRatio, fTextRatio); |
554 ctm.postTranslate(sx - dx, sy - dy); | 557 ctm.postTranslate(sx - dx, sy - dy); |
555 GrPaint tmpPaint(fPaint); | |
556 tmpPaint.localCoordChange(ctm); | |
557 | 558 |
558 SkMatrix viewM = fViewMatrix; | 559 SkPath tmpPath(*glyph->fPath); |
559 viewM.preConcat(ctm); | 560 tmpPath.transform(ctm); |
| 561 |
560 GrStrokeInfo strokeInfo(SkStrokeRec::kFill_InitStyle); | 562 GrStrokeInfo strokeInfo(SkStrokeRec::kFill_InitStyle); |
561 fContext->drawPath(tmpPaint, viewM, *glyph->fPath, strokeInfo); | 563 fContext->drawPath(fPaint, fViewMatrix, tmpPath, strokeInfo); |
562 | 564 |
563 // remove this glyph from the vertices we need to allocate | 565 // remove this glyph from the vertices we need to allocate |
564 fTotalVertexCount -= kVerticesPerGlyph; | 566 fTotalVertexCount -= kVerticesPerGlyph; |
565 return true; | 567 return true; |
566 } | 568 } |
567 } | 569 } |
568 | 570 |
569 SkASSERT(glyph->fPlot); | 571 SkASSERT(glyph->fPlot); |
570 GrDrawTarget::DrawToken drawToken = fDrawTarget->getCurrentDrawToken(); | 572 GrDrawTarget::DrawToken drawToken = fDrawTarget->getCurrentDrawToken(); |
571 glyph->fPlot->setDrawToken(drawToken); | 573 glyph->fPlot->setDrawToken(drawToken); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
678 } | 680 } |
679 } | 681 } |
680 | 682 |
681 inline void GrDistanceFieldTextContext::finish() { | 683 inline void GrDistanceFieldTextContext::finish() { |
682 this->flush(); | 684 this->flush(); |
683 fTotalVertexCount = 0; | 685 fTotalVertexCount = 0; |
684 | 686 |
685 GrTextContext::finish(); | 687 GrTextContext::finish(); |
686 } | 688 } |
687 | 689 |
OLD | NEW |