Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: src/core/SkScalerContext.cpp

Issue 1316233002: Style Change: NULL->nullptr (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-08-27 (Thursday) 10:25:06 EDT Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkScalerContext.h ('k') | src/core/SkScan_AntiPath.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 9
10 #include "SkScalerContext.h" 10 #include "SkScalerContext.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 } 56 }
57 57
58 /////////////////////////////////////////////////////////////////////////////// 58 ///////////////////////////////////////////////////////////////////////////////
59 59
60 #ifdef SK_DEBUG 60 #ifdef SK_DEBUG
61 #define DUMP_RECx 61 #define DUMP_RECx
62 #endif 62 #endif
63 63
64 static SkFlattenable* load_flattenable(const SkDescriptor* desc, uint32_t tag, 64 static SkFlattenable* load_flattenable(const SkDescriptor* desc, uint32_t tag,
65 SkFlattenable::Type ft) { 65 SkFlattenable::Type ft) {
66 SkFlattenable* obj = NULL; 66 SkFlattenable* obj = nullptr;
67 uint32_t len; 67 uint32_t len;
68 const void* data = desc->findEntry(tag, &len); 68 const void* data = desc->findEntry(tag, &len);
69 69
70 if (data) { 70 if (data) {
71 SkReadBuffer buffer(data, len); 71 SkReadBuffer buffer(data, len);
72 obj = buffer.readFlattenable(ft); 72 obj = buffer.readFlattenable(ft);
73 SkASSERT(buffer.offset() == buffer.size()); 73 SkASSERT(buffer.offset() == buffer.size());
74 } 74 }
75 return obj; 75 return obj;
76 } 76 }
77 77
78 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc) 78 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc)
79 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL)) ) 79 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, nullpt r)))
80 80
81 , fTypeface(SkRef(typeface)) 81 , fTypeface(SkRef(typeface))
82 , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_ SkDescriptorTag, 82 , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_ SkDescriptorTag,
83 SkFlattenable::kSkPathEffect_Type)) ) 83 SkFlattenable::kSkPathEffect_Type)) )
84 , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_ SkDescriptorTag, 84 , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_ SkDescriptorTag,
85 SkFlattenable::kSkMaskFilter_Type)) ) 85 SkFlattenable::kSkMaskFilter_Type)) )
86 , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_ SkDescriptorTag, 86 , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_ SkDescriptorTag,
87 SkFlattenable::kSkRasterizer_Type)) ) 87 SkFlattenable::kSkRasterizer_Type)) )
88 // Initialize based on our settings. Subclasses can also force this. 88 // Initialize based on our settings. Subclasses can also force this.
89 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRas terizer != NULL) 89 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != nullptr || f Rasterizer != nullptr)
90 90
91 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec)) 91 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec))
92 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec) 92 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec)
93 : SkMaskGamma::PreBlend()) 93 : SkMaskGamma::PreBlend())
94 { 94 {
95 #ifdef DUMP_REC 95 #ifdef DUMP_REC
96 desc->assertChecksum(); 96 desc->assertChecksum();
97 SkDebugf("SkScalerContext checksum %x count %d length %d\n", 97 SkDebugf("SkScalerContext checksum %x count %d length %d\n",
98 desc->getChecksum(), desc->getCount(), desc->getLength()); 98 desc->getChecksum(), desc->getCount(), desc->getLength());
99 SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n", 99 SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n",
100 rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0], 100 rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0],
101 rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]); 101 rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]);
102 SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d\n", 102 SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d\n",
103 rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill, 103 rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill,
104 rec->fMaskFormat, rec->fStrokeJoin); 104 rec->fMaskFormat, rec->fStrokeJoin);
105 SkDebugf(" pathEffect %x maskFilter %x\n", 105 SkDebugf(" pathEffect %x maskFilter %x\n",
106 desc->findEntry(kPathEffect_SkDescriptorTag, NULL), 106 desc->findEntry(kPathEffect_SkDescriptorTag, nullptr),
107 desc->findEntry(kMaskFilter_SkDescriptorTag, NULL)); 107 desc->findEntry(kMaskFilter_SkDescriptorTag, nullptr));
108 #endif 108 #endif
109 } 109 }
110 110
111 SkScalerContext::~SkScalerContext() { 111 SkScalerContext::~SkScalerContext() {
112 SkSafeUnref(fPathEffect); 112 SkSafeUnref(fPathEffect);
113 SkSafeUnref(fMaskFilter); 113 SkSafeUnref(fMaskFilter);
114 SkSafeUnref(fRasterizer); 114 SkSafeUnref(fRasterizer);
115 } 115 }
116 116
117 void SkScalerContext::getAdvance(SkGlyph* glyph) { 117 void SkScalerContext::getAdvance(SkGlyph* glyph) {
(...skipping 29 matching lines...) Expand all
147 147
148 if (fGenerateImageFromPath) { 148 if (fGenerateImageFromPath) {
149 SkPath devPath, fillPath; 149 SkPath devPath, fillPath;
150 SkMatrix fillToDevMatrix; 150 SkMatrix fillToDevMatrix;
151 151
152 this->internalGetPath(*glyph, &fillPath, &devPath, &fillToDevMatrix); 152 this->internalGetPath(*glyph, &fillPath, &devPath, &fillToDevMatrix);
153 153
154 if (fRasterizer) { 154 if (fRasterizer) {
155 SkMask mask; 155 SkMask mask;
156 156
157 if (fRasterizer->rasterize(fillPath, fillToDevMatrix, NULL, 157 if (fRasterizer->rasterize(fillPath, fillToDevMatrix, nullptr,
158 fMaskFilter, &mask, 158 fMaskFilter, &mask,
159 SkMask::kJustComputeBounds_CreateMode)) { 159 SkMask::kJustComputeBounds_CreateMode)) {
160 glyph->fLeft = mask.fBounds.fLeft; 160 glyph->fLeft = mask.fBounds.fLeft;
161 glyph->fTop = mask.fBounds.fTop; 161 glyph->fTop = mask.fBounds.fTop;
162 glyph->fWidth = SkToU16(mask.fBounds.width()); 162 glyph->fWidth = SkToU16(mask.fBounds.width());
163 glyph->fHeight = SkToU16(mask.fBounds.height()); 163 glyph->fHeight = SkToU16(mask.fBounds.height());
164 } else { 164 } else {
165 goto SK_ERROR; 165 goto SK_ERROR;
166 } 166 }
167 } else { 167 } else {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 glyph->fMaskFormat = SkMask::kA8_Format; 199 glyph->fMaskFormat = SkMask::kA8_Format;
200 } 200 }
201 201
202 if (fMaskFilter) { 202 if (fMaskFilter) {
203 SkMask src, dst; 203 SkMask src, dst;
204 SkMatrix matrix; 204 SkMatrix matrix;
205 205
206 glyph->toMask(&src); 206 glyph->toMask(&src);
207 fRec.getMatrixFrom2x2(&matrix); 207 fRec.getMatrixFrom2x2(&matrix);
208 208
209 src.fImage = NULL; // only want the bounds from the filter 209 src.fImage = nullptr; // only want the bounds from the filter
210 if (fMaskFilter->filterMask(&dst, src, matrix, NULL)) { 210 if (fMaskFilter->filterMask(&dst, src, matrix, nullptr)) {
211 if (dst.fBounds.isEmpty() || !dst.fBounds.is16Bit()) { 211 if (dst.fBounds.isEmpty() || !dst.fBounds.is16Bit()) {
212 goto SK_ERROR; 212 goto SK_ERROR;
213 } 213 }
214 SkASSERT(dst.fImage == NULL); 214 SkASSERT(dst.fImage == nullptr);
215 glyph->fLeft = dst.fBounds.fLeft; 215 glyph->fLeft = dst.fBounds.fLeft;
216 glyph->fTop = dst.fBounds.fTop; 216 glyph->fTop = dst.fBounds.fTop;
217 glyph->fWidth = SkToU16(dst.fBounds.width()); 217 glyph->fWidth = SkToU16(dst.fBounds.width());
218 glyph->fHeight = SkToU16(dst.fBounds.height()); 218 glyph->fHeight = SkToU16(dst.fBounds.height());
219 glyph->fMaskFormat = dst.fFormat; 219 glyph->fMaskFormat = dst.fFormat;
220 } 220 }
221 } 221 }
222 return; 222 return;
223 223
224 SK_ERROR: 224 SK_ERROR:
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 // the path only makes a mask. This case should have been caught up in 478 // the path only makes a mask. This case should have been caught up in
479 // generateMetrics(). 479 // generateMetrics().
480 SkASSERT(!fGenerateImageFromPath || 480 SkASSERT(!fGenerateImageFromPath ||
481 SkMask::kARGB32_Format != origGlyph.fMaskFormat); 481 SkMask::kARGB32_Format != origGlyph.fMaskFormat);
482 482
483 if (fMaskFilter) { // restore the prefilter bounds 483 if (fMaskFilter) { // restore the prefilter bounds
484 tmpGlyph.initGlyphIdFrom(origGlyph); 484 tmpGlyph.initGlyphIdFrom(origGlyph);
485 485
486 // need the original bounds, sans our maskfilter 486 // need the original bounds, sans our maskfilter
487 SkMaskFilter* mf = fMaskFilter; 487 SkMaskFilter* mf = fMaskFilter;
488 fMaskFilter = NULL; // temp disable 488 fMaskFilter = nullptr; // temp disable
489 this->getMetrics(&tmpGlyph); 489 this->getMetrics(&tmpGlyph);
490 fMaskFilter = mf; // restore 490 fMaskFilter = mf; // restore
491 491
492 // we need the prefilter bounds to be <= filter bounds 492 // we need the prefilter bounds to be <= filter bounds
493 SkASSERT(tmpGlyph.fWidth <= origGlyph.fWidth); 493 SkASSERT(tmpGlyph.fWidth <= origGlyph.fWidth);
494 SkASSERT(tmpGlyph.fHeight <= origGlyph.fHeight); 494 SkASSERT(tmpGlyph.fHeight <= origGlyph.fHeight);
495 495
496 if (tmpGlyph.fMaskFormat == origGlyph.fMaskFormat) { 496 if (tmpGlyph.fMaskFormat == origGlyph.fMaskFormat) {
497 tmpGlyph.fImage = origGlyph.fImage; 497 tmpGlyph.fImage = origGlyph.fImage;
498 } else { 498 } else {
499 tmpGlyphImageStorage.reset(tmpGlyph.computeImageSize()); 499 tmpGlyphImageStorage.reset(tmpGlyph.computeImageSize());
500 tmpGlyph.fImage = tmpGlyphImageStorage.get(); 500 tmpGlyph.fImage = tmpGlyphImageStorage.get();
501 } 501 }
502 glyph = &tmpGlyph; 502 glyph = &tmpGlyph;
503 } 503 }
504 504
505 if (fGenerateImageFromPath) { 505 if (fGenerateImageFromPath) {
506 SkPath devPath, fillPath; 506 SkPath devPath, fillPath;
507 SkMatrix fillToDevMatrix; 507 SkMatrix fillToDevMatrix;
508 SkMask mask; 508 SkMask mask;
509 509
510 this->internalGetPath(*glyph, &fillPath, &devPath, &fillToDevMatrix); 510 this->internalGetPath(*glyph, &fillPath, &devPath, &fillToDevMatrix);
511 glyph->toMask(&mask); 511 glyph->toMask(&mask);
512 512
513 if (fRasterizer) { 513 if (fRasterizer) {
514 mask.fFormat = SkMask::kA8_Format; 514 mask.fFormat = SkMask::kA8_Format;
515 sk_bzero(glyph->fImage, mask.computeImageSize()); 515 sk_bzero(glyph->fImage, mask.computeImageSize());
516 516
517 if (!fRasterizer->rasterize(fillPath, fillToDevMatrix, NULL, 517 if (!fRasterizer->rasterize(fillPath, fillToDevMatrix, nullptr,
518 fMaskFilter, &mask, 518 fMaskFilter, &mask,
519 SkMask::kJustRenderImage_CreateMode)) { 519 SkMask::kJustRenderImage_CreateMode)) {
520 return; 520 return;
521 } 521 }
522 if (fPreBlend.isApplicable()) { 522 if (fPreBlend.isApplicable()) {
523 applyLUTToA8Mask(mask, fPreBlend.fG); 523 applyLUTToA8Mask(mask, fPreBlend.fG);
524 } 524 }
525 } else { 525 } else {
526 SkASSERT(SkMask::kARGB32_Format != mask.fFormat); 526 SkASSERT(SkMask::kARGB32_Format != mask.fFormat);
527 generateMask(mask, devPath, fPreBlend); 527 generateMask(mask, devPath, fPreBlend);
(...skipping 18 matching lines...) Expand all
546 srcM.fRowBytes = SkAlign4(srcM.fBounds.width()); 546 srcM.fRowBytes = SkAlign4(srcM.fBounds.width());
547 size_t size = srcM.computeImageSize(); 547 size_t size = srcM.computeImageSize();
548 a8storage.reset(size); 548 a8storage.reset(size);
549 srcM.fImage = (uint8_t*)a8storage.get(); 549 srcM.fImage = (uint8_t*)a8storage.get();
550 extract_alpha(srcM, 550 extract_alpha(srcM,
551 (const SkPMColor*)glyph->fImage, glyph->rowBytes()); 551 (const SkPMColor*)glyph->fImage, glyph->rowBytes());
552 } 552 }
553 553
554 fRec.getMatrixFrom2x2(&matrix); 554 fRec.getMatrixFrom2x2(&matrix);
555 555
556 if (fMaskFilter->filterMask(&dstM, srcM, matrix, NULL)) { 556 if (fMaskFilter->filterMask(&dstM, srcM, matrix, nullptr)) {
557 int width = SkFastMin32(origGlyph.fWidth, dstM.fBounds.width()); 557 int width = SkFastMin32(origGlyph.fWidth, dstM.fBounds.width());
558 int height = SkFastMin32(origGlyph.fHeight, dstM.fBounds.height()); 558 int height = SkFastMin32(origGlyph.fHeight, dstM.fBounds.height());
559 int dstRB = origGlyph.rowBytes(); 559 int dstRB = origGlyph.rowBytes();
560 int srcRB = dstM.fRowBytes; 560 int srcRB = dstM.fRowBytes;
561 561
562 const uint8_t* src = (const uint8_t*)dstM.fImage; 562 const uint8_t* src = (const uint8_t*)dstM.fImage;
563 uint8_t* dst = (uint8_t*)origGlyph.fImage; 563 uint8_t* dst = (uint8_t*)origGlyph.fImage;
564 564
565 if (SkMask::k3D_Format == dstM.fFormat) { 565 if (SkMask::k3D_Format == dstM.fFormat) {
566 // we have to copy 3 times as much 566 // we have to copy 3 times as much
(...skipping 11 matching lines...) Expand all
578 SkMask::FreeImage(dstM.fImage); 578 SkMask::FreeImage(dstM.fImage);
579 579
580 if (fPreBlendForFilter.isApplicable()) { 580 if (fPreBlendForFilter.isApplicable()) {
581 applyLUTToA8Mask(srcM, fPreBlendForFilter.fG); 581 applyLUTToA8Mask(srcM, fPreBlendForFilter.fG);
582 } 582 }
583 } 583 }
584 } 584 }
585 } 585 }
586 586
587 void SkScalerContext::getPath(const SkGlyph& glyph, SkPath* path) { 587 void SkScalerContext::getPath(const SkGlyph& glyph, SkPath* path) {
588 this->internalGetPath(glyph, NULL, path, NULL); 588 this->internalGetPath(glyph, nullptr, path, nullptr);
589 } 589 }
590 590
591 void SkScalerContext::getFontMetrics(SkPaint::FontMetrics* fm) { 591 void SkScalerContext::getFontMetrics(SkPaint::FontMetrics* fm) {
592 this->generateFontMetrics(fm); 592 this->generateFontMetrics(fm);
593 } 593 }
594 594
595 SkUnichar SkScalerContext::generateGlyphToChar(uint16_t glyph) { 595 SkUnichar SkScalerContext::generateGlyphToChar(uint16_t glyph) {
596 return 0; 596 return 0;
597 } 597 }
598 598
599 /////////////////////////////////////////////////////////////////////////////// 599 ///////////////////////////////////////////////////////////////////////////////
600 600
601 void SkScalerContext::internalGetPath(const SkGlyph& glyph, SkPath* fillPath, 601 void SkScalerContext::internalGetPath(const SkGlyph& glyph, SkPath* fillPath,
602 SkPath* devPath, SkMatrix* fillToDevMatrix) { 602 SkPath* devPath, SkMatrix* fillToDevMatrix) {
603 SkPath path; 603 SkPath path;
604 generatePath(glyph, &path); 604 generatePath(glyph, &path);
605 605
606 if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) { 606 if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {
607 SkFixed dx = glyph.getSubXFixed(); 607 SkFixed dx = glyph.getSubXFixed();
608 SkFixed dy = glyph.getSubYFixed(); 608 SkFixed dy = glyph.getSubYFixed();
609 if (dx | dy) { 609 if (dx | dy) {
610 path.offset(SkFixedToScalar(dx), SkFixedToScalar(dy)); 610 path.offset(SkFixedToScalar(dx), SkFixedToScalar(dy));
611 } 611 }
612 } 612 }
613 613
614 if (fRec.fFrameWidth > 0 || fPathEffect != NULL) { 614 if (fRec.fFrameWidth > 0 || fPathEffect != nullptr) {
615 // need the path in user-space, with only the point-size applied 615 // need the path in user-space, with only the point-size applied
616 // so that our stroking and effects will operate the same way they 616 // so that our stroking and effects will operate the same way they
617 // would if the user had extracted the path themself, and then 617 // would if the user had extracted the path themself, and then
618 // called drawPath 618 // called drawPath
619 SkPath localPath; 619 SkPath localPath;
620 SkMatrix matrix, inverse; 620 SkMatrix matrix, inverse;
621 621
622 fRec.getMatrixFrom2x2(&matrix); 622 fRec.getMatrixFrom2x2(&matrix);
623 if (!matrix.invert(&inverse)) { 623 if (!matrix.invert(&inverse)) {
624 // assume fillPath and devPath are already empty. 624 // assume fillPath and devPath are already empty.
625 return; 625 return;
626 } 626 }
627 path.transform(inverse, &localPath); 627 path.transform(inverse, &localPath);
628 // now localPath is only affected by the paint settings, and not the can vas matrix 628 // now localPath is only affected by the paint settings, and not the can vas matrix
629 629
630 SkStrokeRec rec(SkStrokeRec::kFill_InitStyle); 630 SkStrokeRec rec(SkStrokeRec::kFill_InitStyle);
631 631
632 if (fRec.fFrameWidth > 0) { 632 if (fRec.fFrameWidth > 0) {
633 rec.setStrokeStyle(fRec.fFrameWidth, 633 rec.setStrokeStyle(fRec.fFrameWidth,
634 SkToBool(fRec.fFlags & kFrameAndFill_Flag)); 634 SkToBool(fRec.fFlags & kFrameAndFill_Flag));
635 // glyphs are always closed contours, so cap type is ignored, 635 // glyphs are always closed contours, so cap type is ignored,
636 // so we just pass something. 636 // so we just pass something.
637 rec.setStrokeParams(SkPaint::kButt_Cap, 637 rec.setStrokeParams(SkPaint::kButt_Cap,
638 (SkPaint::Join)fRec.fStrokeJoin, 638 (SkPaint::Join)fRec.fStrokeJoin,
639 fRec.fMiterLimit); 639 fRec.fMiterLimit);
640 } 640 }
641 641
642 if (fPathEffect) { 642 if (fPathEffect) {
643 SkPath effectPath; 643 SkPath effectPath;
644 if (fPathEffect->filterPath(&effectPath, localPath, &rec, NULL)) { 644 if (fPathEffect->filterPath(&effectPath, localPath, &rec, nullptr)) {
645 localPath.swap(effectPath); 645 localPath.swap(effectPath);
646 } 646 }
647 } 647 }
648 648
649 if (rec.needToApply()) { 649 if (rec.needToApply()) {
650 SkPath strokePath; 650 SkPath strokePath;
651 if (rec.applyToPath(&strokePath, localPath)) { 651 if (rec.applyToPath(&strokePath, localPath)) {
652 localPath.swap(strokePath); 652 localPath.swap(strokePath);
653 } 653 }
654 } 654 }
655 655
656 // now return stuff to the caller 656 // now return stuff to the caller
657 if (fillToDevMatrix) { 657 if (fillToDevMatrix) {
658 *fillToDevMatrix = matrix; 658 *fillToDevMatrix = matrix;
659 } 659 }
660 if (devPath) { 660 if (devPath) {
661 localPath.transform(matrix, devPath); 661 localPath.transform(matrix, devPath);
662 } 662 }
663 if (fillPath) { 663 if (fillPath) {
664 fillPath->swap(localPath); 664 fillPath->swap(localPath);
665 } 665 }
666 } else { // nothing tricky to do 666 } else { // nothing tricky to do
667 if (fillToDevMatrix) { 667 if (fillToDevMatrix) {
668 fillToDevMatrix->reset(); 668 fillToDevMatrix->reset();
669 } 669 }
670 if (devPath) { 670 if (devPath) {
671 if (fillPath == NULL) { 671 if (fillPath == nullptr) {
672 devPath->swap(path); 672 devPath->swap(path);
673 } else { 673 } else {
674 *devPath = path; 674 *devPath = path;
675 } 675 }
676 } 676 }
677 677
678 if (fillPath) { 678 if (fillPath) {
679 fillPath->swap(path); 679 fillPath->swap(path);
680 } 680 }
681 } 681 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 867
868 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc, 868 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc,
869 bool allowFailure) const { 869 bool allowFailure) const {
870 SkScalerContext* c = this->onCreateScalerContext(desc); 870 SkScalerContext* c = this->onCreateScalerContext(desc);
871 871
872 if (!c && !allowFailure) { 872 if (!c && !allowFailure) {
873 c = new SkScalerContext_Empty(const_cast<SkTypeface*>(this), desc); 873 c = new SkScalerContext_Empty(const_cast<SkTypeface*>(this), desc);
874 } 874 }
875 return c; 875 return c;
876 } 876 }
OLDNEW
« no previous file with comments | « src/core/SkScalerContext.h ('k') | src/core/SkScan_AntiPath.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698