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

Side by Side Diff: src/core/SkPaint.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/SkMultiPictureDraw.cpp ('k') | src/core/SkPaintPriv.h » ('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 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 "SkPaint.h" 8 #include "SkPaint.h"
9 #include "SkAnnotation.h" 9 #include "SkAnnotation.h"
10 #include "SkAutoKern.h" 10 #include "SkAutoKern.h"
(...skipping 22 matching lines...) Expand all
33 #include "SkTLazy.h" 33 #include "SkTLazy.h"
34 #include "SkTypeface.h" 34 #include "SkTypeface.h"
35 #include "SkSurfacePriv.h" 35 #include "SkSurfacePriv.h"
36 #include "SkXfermode.h" 36 #include "SkXfermode.h"
37 37
38 // define this to get a printf for out-of-range parameter in setters 38 // define this to get a printf for out-of-range parameter in setters
39 // e.g. setTextSize(-1) 39 // e.g. setTextSize(-1)
40 //#define SK_REPORT_API_RANGE_CHECK 40 //#define SK_REPORT_API_RANGE_CHECK
41 41
42 SkPaint::SkPaint() { 42 SkPaint::SkPaint() {
43 fTypeface = NULL; 43 fTypeface = nullptr;
44 fPathEffect = NULL; 44 fPathEffect = nullptr;
45 fShader = NULL; 45 fShader = nullptr;
46 fXfermode = NULL; 46 fXfermode = nullptr;
47 fMaskFilter = NULL; 47 fMaskFilter = nullptr;
48 fColorFilter = NULL; 48 fColorFilter = nullptr;
49 fRasterizer = NULL; 49 fRasterizer = nullptr;
50 fLooper = NULL; 50 fLooper = nullptr;
51 fImageFilter = NULL; 51 fImageFilter = nullptr;
52 fAnnotation = NULL; 52 fAnnotation = nullptr;
53 53
54 fTextSize = SkPaintDefaults_TextSize; 54 fTextSize = SkPaintDefaults_TextSize;
55 fTextScaleX = SK_Scalar1; 55 fTextScaleX = SK_Scalar1;
56 fTextSkewX = 0; 56 fTextSkewX = 0;
57 fColor = SK_ColorBLACK; 57 fColor = SK_ColorBLACK;
58 fWidth = 0; 58 fWidth = 0;
59 fMiterLimit = SkPaintDefaults_MiterLimit; 59 fMiterLimit = SkPaintDefaults_MiterLimit;
60 60
61 // Zero all bitfields, then set some non-zero defaults. 61 // Zero all bitfields, then set some non-zero defaults.
62 fBitfieldsUInt = 0; 62 fBitfieldsUInt = 0;
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 void* context) { 391 void* context) {
392 *((SkGlyphCache**)context) = SkGlyphCache::DetachCache(typeface, desc); 392 *((SkGlyphCache**)context) = SkGlyphCache::DetachCache(typeface, desc);
393 } 393 }
394 394
395 int SkPaint::textToGlyphs(const void* textData, size_t byteLength, 395 int SkPaint::textToGlyphs(const void* textData, size_t byteLength,
396 uint16_t glyphs[]) const { 396 uint16_t glyphs[]) const {
397 if (byteLength == 0) { 397 if (byteLength == 0) {
398 return 0; 398 return 0;
399 } 399 }
400 400
401 SkASSERT(textData != NULL); 401 SkASSERT(textData != nullptr);
402 402
403 if (NULL == glyphs) { 403 if (nullptr == glyphs) {
404 switch (this->getTextEncoding()) { 404 switch (this->getTextEncoding()) {
405 case kUTF8_TextEncoding: 405 case kUTF8_TextEncoding:
406 return SkUTF8_CountUnichars((const char*)textData, byteLength); 406 return SkUTF8_CountUnichars((const char*)textData, byteLength);
407 case kUTF16_TextEncoding: 407 case kUTF16_TextEncoding:
408 return SkUTF16_CountUnichars((const uint16_t*)textData, SkToInt(byte Length >> 1)); 408 return SkUTF16_CountUnichars((const uint16_t*)textData, SkToInt(byte Length >> 1));
409 case kUTF32_TextEncoding: 409 case kUTF32_TextEncoding:
410 return SkToInt(byteLength >> 2); 410 return SkToInt(byteLength >> 2);
411 case kGlyphID_TextEncoding: 411 case kGlyphID_TextEncoding:
412 return SkToInt(byteLength >> 1); 412 return SkToInt(byteLength >> 1);
413 default: 413 default:
414 SkDEBUGFAIL("unknown text encoding"); 414 SkDEBUGFAIL("unknown text encoding");
415 } 415 }
416 return 0; 416 return 0;
417 } 417 }
418 418
419 // if we get here, we have a valid glyphs[] array, so time to fill it in 419 // if we get here, we have a valid glyphs[] array, so time to fill it in
420 420
421 // handle this encoding before the setup for the glyphcache 421 // handle this encoding before the setup for the glyphcache
422 if (this->getTextEncoding() == kGlyphID_TextEncoding) { 422 if (this->getTextEncoding() == kGlyphID_TextEncoding) {
423 // we want to ignore the low bit of byteLength 423 // we want to ignore the low bit of byteLength
424 memcpy(glyphs, textData, byteLength >> 1 << 1); 424 memcpy(glyphs, textData, byteLength >> 1 << 1);
425 return SkToInt(byteLength >> 1); 425 return SkToInt(byteLength >> 1);
426 } 426 }
427 427
428 SkAutoGlyphCache autoCache(*this, NULL, NULL); 428 SkAutoGlyphCache autoCache(*this, nullptr, nullptr);
429 SkGlyphCache* cache = autoCache.getCache(); 429 SkGlyphCache* cache = autoCache.getCache();
430 430
431 const char* text = (const char*)textData; 431 const char* text = (const char*)textData;
432 const char* stop = text + byteLength; 432 const char* stop = text + byteLength;
433 uint16_t* gptr = glyphs; 433 uint16_t* gptr = glyphs;
434 434
435 switch (this->getTextEncoding()) { 435 switch (this->getTextEncoding()) {
436 case SkPaint::kUTF8_TextEncoding: 436 case SkPaint::kUTF8_TextEncoding:
437 while (text < stop) { 437 while (text < stop) {
438 *gptr++ = cache->unicharToGlyph(SkUTF8_NextUnichar(&text)); 438 *gptr++ = cache->unicharToGlyph(SkUTF8_NextUnichar(&text));
(...skipping 19 matching lines...) Expand all
458 SkDEBUGFAIL("unknown text encoding"); 458 SkDEBUGFAIL("unknown text encoding");
459 } 459 }
460 return SkToInt(gptr - glyphs); 460 return SkToInt(gptr - glyphs);
461 } 461 }
462 462
463 bool SkPaint::containsText(const void* textData, size_t byteLength) const { 463 bool SkPaint::containsText(const void* textData, size_t byteLength) const {
464 if (0 == byteLength) { 464 if (0 == byteLength) {
465 return true; 465 return true;
466 } 466 }
467 467
468 SkASSERT(textData != NULL); 468 SkASSERT(textData != nullptr);
469 469
470 // handle this encoding before the setup for the glyphcache 470 // handle this encoding before the setup for the glyphcache
471 if (this->getTextEncoding() == kGlyphID_TextEncoding) { 471 if (this->getTextEncoding() == kGlyphID_TextEncoding) {
472 const uint16_t* glyphID = static_cast<const uint16_t*>(textData); 472 const uint16_t* glyphID = static_cast<const uint16_t*>(textData);
473 size_t count = byteLength >> 1; 473 size_t count = byteLength >> 1;
474 for (size_t i = 0; i < count; i++) { 474 for (size_t i = 0; i < count; i++) {
475 if (0 == glyphID[i]) { 475 if (0 == glyphID[i]) {
476 return false; 476 return false;
477 } 477 }
478 } 478 }
479 return true; 479 return true;
480 } 480 }
481 481
482 SkAutoGlyphCache autoCache(*this, NULL, NULL); 482 SkAutoGlyphCache autoCache(*this, nullptr, nullptr);
483 SkGlyphCache* cache = autoCache.getCache(); 483 SkGlyphCache* cache = autoCache.getCache();
484 484
485 switch (this->getTextEncoding()) { 485 switch (this->getTextEncoding()) {
486 case SkPaint::kUTF8_TextEncoding: { 486 case SkPaint::kUTF8_TextEncoding: {
487 const char* text = static_cast<const char*>(textData); 487 const char* text = static_cast<const char*>(textData);
488 const char* stop = text + byteLength; 488 const char* stop = text + byteLength;
489 while (text < stop) { 489 while (text < stop) {
490 if (0 == cache->unicharToGlyph(SkUTF8_NextUnichar(&text))) { 490 if (0 == cache->unicharToGlyph(SkUTF8_NextUnichar(&text))) {
491 return false; 491 return false;
492 } 492 }
(...skipping 25 matching lines...) Expand all
518 return false; 518 return false;
519 } 519 }
520 return true; 520 return true;
521 } 521 }
522 522
523 void SkPaint::glyphsToUnichars(const uint16_t glyphs[], int count, SkUnichar tex tData[]) const { 523 void SkPaint::glyphsToUnichars(const uint16_t glyphs[], int count, SkUnichar tex tData[]) const {
524 if (count <= 0) { 524 if (count <= 0) {
525 return; 525 return;
526 } 526 }
527 527
528 SkASSERT(glyphs != NULL); 528 SkASSERT(glyphs != nullptr);
529 SkASSERT(textData != NULL); 529 SkASSERT(textData != nullptr);
530 530
531 SkSurfaceProps props(0, kUnknown_SkPixelGeometry); 531 SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
532 SkAutoGlyphCache autoCache(*this, &props, NULL); 532 SkAutoGlyphCache autoCache(*this, &props, nullptr);
533 SkGlyphCache* cache = autoCache.getCache(); 533 SkGlyphCache* cache = autoCache.getCache();
534 534
535 for (int index = 0; index < count; index++) { 535 for (int index = 0; index < count; index++) {
536 textData[index] = cache->glyphToUnichar(glyphs[index]); 536 textData[index] = cache->glyphToUnichar(glyphs[index]);
537 } 537 }
538 } 538 }
539 539
540 /////////////////////////////////////////////////////////////////////////////// 540 ///////////////////////////////////////////////////////////////////////////////
541 541
542 static const SkGlyph& sk_getMetrics_utf8_next(SkGlyphCache* cache, 542 static const SkGlyph& sk_getMetrics_utf8_next(SkGlyphCache* cache,
543 const char** text) { 543 const char** text) {
544 SkASSERT(cache != NULL); 544 SkASSERT(cache != nullptr);
545 SkASSERT(text != NULL); 545 SkASSERT(text != nullptr);
546 546
547 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text)); 547 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text));
548 } 548 }
549 549
550 static const SkGlyph& sk_getMetrics_utf16_next(SkGlyphCache* cache, 550 static const SkGlyph& sk_getMetrics_utf16_next(SkGlyphCache* cache,
551 const char** text) { 551 const char** text) {
552 SkASSERT(cache != NULL); 552 SkASSERT(cache != nullptr);
553 SkASSERT(text != NULL); 553 SkASSERT(text != nullptr);
554 554
555 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text)) ; 555 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text)) ;
556 } 556 }
557 557
558 static const SkGlyph& sk_getMetrics_utf32_next(SkGlyphCache* cache, 558 static const SkGlyph& sk_getMetrics_utf32_next(SkGlyphCache* cache,
559 const char** text) { 559 const char** text) {
560 SkASSERT(cache != NULL); 560 SkASSERT(cache != nullptr);
561 SkASSERT(text != NULL); 561 SkASSERT(text != nullptr);
562 562
563 const int32_t* ptr = *(const int32_t**)text; 563 const int32_t* ptr = *(const int32_t**)text;
564 SkUnichar uni = *ptr++; 564 SkUnichar uni = *ptr++;
565 *text = (const char*)ptr; 565 *text = (const char*)ptr;
566 return cache->getUnicharMetrics(uni); 566 return cache->getUnicharMetrics(uni);
567 } 567 }
568 568
569 static const SkGlyph& sk_getMetrics_glyph_next(SkGlyphCache* cache, 569 static const SkGlyph& sk_getMetrics_glyph_next(SkGlyphCache* cache,
570 const char** text) { 570 const char** text) {
571 SkASSERT(cache != NULL); 571 SkASSERT(cache != nullptr);
572 SkASSERT(text != NULL); 572 SkASSERT(text != nullptr);
573 573
574 const uint16_t* ptr = *(const uint16_t**)text; 574 const uint16_t* ptr = *(const uint16_t**)text;
575 unsigned glyphID = *ptr; 575 unsigned glyphID = *ptr;
576 ptr += 1; 576 ptr += 1;
577 *text = (const char*)ptr; 577 *text = (const char*)ptr;
578 return cache->getGlyphIDMetrics(glyphID); 578 return cache->getGlyphIDMetrics(glyphID);
579 } 579 }
580 580
581 static const SkGlyph& sk_getAdvance_utf8_next(SkGlyphCache* cache, 581 static const SkGlyph& sk_getAdvance_utf8_next(SkGlyphCache* cache,
582 const char** text) { 582 const char** text) {
583 SkASSERT(cache != NULL); 583 SkASSERT(cache != nullptr);
584 SkASSERT(text != NULL); 584 SkASSERT(text != nullptr);
585 585
586 return cache->getUnicharAdvance(SkUTF8_NextUnichar(text)); 586 return cache->getUnicharAdvance(SkUTF8_NextUnichar(text));
587 } 587 }
588 588
589 static const SkGlyph& sk_getAdvance_utf16_next(SkGlyphCache* cache, 589 static const SkGlyph& sk_getAdvance_utf16_next(SkGlyphCache* cache,
590 const char** text) { 590 const char** text) {
591 SkASSERT(cache != NULL); 591 SkASSERT(cache != nullptr);
592 SkASSERT(text != NULL); 592 SkASSERT(text != nullptr);
593 593
594 return cache->getUnicharAdvance(SkUTF16_NextUnichar((const uint16_t**)text)) ; 594 return cache->getUnicharAdvance(SkUTF16_NextUnichar((const uint16_t**)text)) ;
595 } 595 }
596 596
597 static const SkGlyph& sk_getAdvance_utf32_next(SkGlyphCache* cache, 597 static const SkGlyph& sk_getAdvance_utf32_next(SkGlyphCache* cache,
598 const char** text) { 598 const char** text) {
599 SkASSERT(cache != NULL); 599 SkASSERT(cache != nullptr);
600 SkASSERT(text != NULL); 600 SkASSERT(text != nullptr);
601 601
602 const int32_t* ptr = *(const int32_t**)text; 602 const int32_t* ptr = *(const int32_t**)text;
603 SkUnichar uni = *ptr++; 603 SkUnichar uni = *ptr++;
604 *text = (const char*)ptr; 604 *text = (const char*)ptr;
605 return cache->getUnicharAdvance(uni); 605 return cache->getUnicharAdvance(uni);
606 } 606 }
607 607
608 static const SkGlyph& sk_getAdvance_glyph_next(SkGlyphCache* cache, 608 static const SkGlyph& sk_getAdvance_glyph_next(SkGlyphCache* cache,
609 const char** text) { 609 const char** text) {
610 SkASSERT(cache != NULL); 610 SkASSERT(cache != nullptr);
611 SkASSERT(text != NULL); 611 SkASSERT(text != nullptr);
612 612
613 const uint16_t* ptr = *(const uint16_t**)text; 613 const uint16_t* ptr = *(const uint16_t**)text;
614 unsigned glyphID = *ptr; 614 unsigned glyphID = *ptr;
615 ptr += 1; 615 ptr += 1;
616 *text = (const char*)ptr; 616 *text = (const char*)ptr;
617 return cache->getGlyphIDAdvance(glyphID); 617 return cache->getGlyphIDAdvance(glyphID);
618 } 618 }
619 619
620 SkMeasureCacheProc SkPaint::getMeasureCacheProc(bool needFullMetrics) const { 620 SkMeasureCacheProc SkPaint::getMeasureCacheProc(bool needFullMetrics) const {
621 static const SkMeasureCacheProc gMeasureCacheProcs[] = { 621 static const SkMeasureCacheProc gMeasureCacheProcs[] = {
(...skipping 15 matching lines...) Expand all
637 } 637 }
638 638
639 SkASSERT(index < SK_ARRAY_COUNT(gMeasureCacheProcs)); 639 SkASSERT(index < SK_ARRAY_COUNT(gMeasureCacheProcs));
640 return gMeasureCacheProcs[index]; 640 return gMeasureCacheProcs[index];
641 } 641 }
642 642
643 /////////////////////////////////////////////////////////////////////////////// 643 ///////////////////////////////////////////////////////////////////////////////
644 644
645 static const SkGlyph& sk_getMetrics_utf8_00(SkGlyphCache* cache, 645 static const SkGlyph& sk_getMetrics_utf8_00(SkGlyphCache* cache,
646 const char** text, SkFixed, SkFixed) { 646 const char** text, SkFixed, SkFixed) {
647 SkASSERT(cache != NULL); 647 SkASSERT(cache != nullptr);
648 SkASSERT(text != NULL); 648 SkASSERT(text != nullptr);
649 649
650 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text)); 650 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text));
651 } 651 }
652 652
653 static const SkGlyph& sk_getMetrics_utf8_xy(SkGlyphCache* cache, 653 static const SkGlyph& sk_getMetrics_utf8_xy(SkGlyphCache* cache,
654 const char** text, SkFixed x, SkFixed y) { 654 const char** text, SkFixed x, SkFixed y) {
655 SkASSERT(cache != NULL); 655 SkASSERT(cache != nullptr);
656 SkASSERT(text != NULL); 656 SkASSERT(text != nullptr);
657 657
658 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text), x, y); 658 return cache->getUnicharMetrics(SkUTF8_NextUnichar(text), x, y);
659 } 659 }
660 660
661 static const SkGlyph& sk_getMetrics_utf16_00(SkGlyphCache* cache, 661 static const SkGlyph& sk_getMetrics_utf16_00(SkGlyphCache* cache,
662 const char** text, SkFixed, SkFixed) { 662 const char** text, SkFixed, SkFixed) {
663 SkASSERT(cache != NULL); 663 SkASSERT(cache != nullptr);
664 SkASSERT(text != NULL); 664 SkASSERT(text != nullptr);
665 665
666 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text)) ; 666 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text)) ;
667 } 667 }
668 668
669 static const SkGlyph& sk_getMetrics_utf16_xy(SkGlyphCache* cache, 669 static const SkGlyph& sk_getMetrics_utf16_xy(SkGlyphCache* cache,
670 const char** text, SkFixed x, SkFixed y) { 670 const char** text, SkFixed x, SkFixed y) {
671 SkASSERT(cache != NULL); 671 SkASSERT(cache != nullptr);
672 SkASSERT(text != NULL); 672 SkASSERT(text != nullptr);
673 673
674 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text), 674 return cache->getUnicharMetrics(SkUTF16_NextUnichar((const uint16_t**)text),
675 x, y); 675 x, y);
676 } 676 }
677 677
678 static const SkGlyph& sk_getMetrics_utf32_00(SkGlyphCache* cache, 678 static const SkGlyph& sk_getMetrics_utf32_00(SkGlyphCache* cache,
679 const char** text, SkFixed, SkFixed) { 679 const char** text, SkFixed, SkFixed) {
680 SkASSERT(cache != NULL); 680 SkASSERT(cache != nullptr);
681 SkASSERT(text != NULL); 681 SkASSERT(text != nullptr);
682 682
683 const int32_t* ptr = *(const int32_t**)text; 683 const int32_t* ptr = *(const int32_t**)text;
684 SkUnichar uni = *ptr++; 684 SkUnichar uni = *ptr++;
685 *text = (const char*)ptr; 685 *text = (const char*)ptr;
686 return cache->getUnicharMetrics(uni); 686 return cache->getUnicharMetrics(uni);
687 } 687 }
688 688
689 static const SkGlyph& sk_getMetrics_utf32_xy(SkGlyphCache* cache, 689 static const SkGlyph& sk_getMetrics_utf32_xy(SkGlyphCache* cache,
690 const char** text, SkFixed x, SkFixed y) { 690 const char** text, SkFixed x, SkFixed y) {
691 SkASSERT(cache != NULL); 691 SkASSERT(cache != nullptr);
692 SkASSERT(text != NULL); 692 SkASSERT(text != nullptr);
693 693
694 const int32_t* ptr = *(const int32_t**)text; 694 const int32_t* ptr = *(const int32_t**)text;
695 SkUnichar uni = *ptr++; 695 SkUnichar uni = *ptr++;
696 *text = (const char*)ptr; 696 *text = (const char*)ptr;
697 return cache->getUnicharMetrics(uni, x, y); 697 return cache->getUnicharMetrics(uni, x, y);
698 } 698 }
699 699
700 static const SkGlyph& sk_getMetrics_glyph_00(SkGlyphCache* cache, 700 static const SkGlyph& sk_getMetrics_glyph_00(SkGlyphCache* cache,
701 const char** text, SkFixed, SkFixed) { 701 const char** text, SkFixed, SkFixed) {
702 SkASSERT(cache != NULL); 702 SkASSERT(cache != nullptr);
703 SkASSERT(text != NULL); 703 SkASSERT(text != nullptr);
704 704
705 const uint16_t* ptr = *(const uint16_t**)text; 705 const uint16_t* ptr = *(const uint16_t**)text;
706 unsigned glyphID = *ptr; 706 unsigned glyphID = *ptr;
707 ptr += 1; 707 ptr += 1;
708 *text = (const char*)ptr; 708 *text = (const char*)ptr;
709 return cache->getGlyphIDMetrics(glyphID); 709 return cache->getGlyphIDMetrics(glyphID);
710 } 710 }
711 711
712 static const SkGlyph& sk_getMetrics_glyph_xy(SkGlyphCache* cache, 712 static const SkGlyph& sk_getMetrics_glyph_xy(SkGlyphCache* cache,
713 const char** text, SkFixed x, SkFixed y) { 713 const char** text, SkFixed x, SkFixed y) {
714 SkASSERT(cache != NULL); 714 SkASSERT(cache != nullptr);
715 SkASSERT(text != NULL); 715 SkASSERT(text != nullptr);
716 716
717 const uint16_t* ptr = *(const uint16_t**)text; 717 const uint16_t* ptr = *(const uint16_t**)text;
718 unsigned glyphID = *ptr; 718 unsigned glyphID = *ptr;
719 ptr += 1; 719 ptr += 1;
720 *text = (const char*)ptr; 720 *text = (const char*)ptr;
721 return cache->getGlyphIDMetrics(glyphID, x, y); 721 return cache->getGlyphIDMetrics(glyphID, x, y);
722 } 722 }
723 723
724 SkDrawCacheProc SkPaint::getDrawCacheProc() const { 724 SkDrawCacheProc SkPaint::getDrawCacheProc() const {
725 static const SkDrawCacheProc gDrawCacheProcs[] = { 725 static const SkDrawCacheProc gDrawCacheProcs[] = {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 int* count, SkRect* bounds) const { 828 int* count, SkRect* bounds) const {
829 SkASSERT(count); 829 SkASSERT(count);
830 if (byteLength == 0) { 830 if (byteLength == 0) {
831 *count = 0; 831 *count = 0;
832 if (bounds) { 832 if (bounds) {
833 bounds->setEmpty(); 833 bounds->setEmpty();
834 } 834 }
835 return 0; 835 return 0;
836 } 836 }
837 837
838 SkMeasureCacheProc glyphCacheProc = this->getMeasureCacheProc(NULL != bounds ); 838 SkMeasureCacheProc glyphCacheProc = this->getMeasureCacheProc(nullptr != bou nds);
839 839
840 int xyIndex; 840 int xyIndex;
841 JoinBoundsProc joinBoundsProc; 841 JoinBoundsProc joinBoundsProc;
842 if (this->isVerticalText()) { 842 if (this->isVerticalText()) {
843 xyIndex = 1; 843 xyIndex = 1;
844 joinBoundsProc = join_bounds_y; 844 joinBoundsProc = join_bounds_y;
845 } else { 845 } else {
846 xyIndex = 0; 846 xyIndex = 0;
847 joinBoundsProc = join_bounds_x; 847 joinBoundsProc = join_bounds_x;
848 } 848 }
849 849
850 int n = 1; 850 int n = 1;
851 const char* stop = (const char*)text + byteLength; 851 const char* stop = (const char*)text + byteLength;
852 const SkGlyph* g = &glyphCacheProc(cache, &text); 852 const SkGlyph* g = &glyphCacheProc(cache, &text);
853 // our accumulated fixed-point advances might overflow 16.16, so we use 853 // our accumulated fixed-point advances might overflow 16.16, so we use
854 // a 48.16 (64bit) accumulator, and then convert that to scalar at the 854 // a 48.16 (64bit) accumulator, and then convert that to scalar at the
855 // very end. 855 // very end.
856 Sk48Dot16 x = advance(*g, xyIndex); 856 Sk48Dot16 x = advance(*g, xyIndex);
857 857
858 SkAutoKern autokern; 858 SkAutoKern autokern;
859 859
860 if (NULL == bounds) { 860 if (nullptr == bounds) {
861 if (this->isDevKernText()) { 861 if (this->isDevKernText()) {
862 int rsb; 862 int rsb;
863 for (; text < stop; n++) { 863 for (; text < stop; n++) {
864 rsb = g->fRsbDelta; 864 rsb = g->fRsbDelta;
865 g = &glyphCacheProc(cache, &text); 865 g = &glyphCacheProc(cache, &text);
866 x += SkAutoKern_AdjustF(rsb, g->fLsbDelta) + advance(*g, xyIndex ); 866 x += SkAutoKern_AdjustF(rsb, g->fLsbDelta) + advance(*g, xyIndex );
867 } 867 }
868 } else { 868 } else {
869 for (; text < stop; n++) { 869 for (; text < stop; n++) {
870 x += advance(glyphCacheProc(cache, &text), xyIndex); 870 x += advance(glyphCacheProc(cache, &text), xyIndex);
(...skipping 19 matching lines...) Expand all
890 } 890 }
891 } 891 }
892 SkASSERT(text == stop); 892 SkASSERT(text == stop);
893 893
894 *count = n; 894 *count = n;
895 return Sk48Dot16ToScalar(x); 895 return Sk48Dot16ToScalar(x);
896 } 896 }
897 897
898 SkScalar SkPaint::measureText(const void* textData, size_t length, SkRect* bound s) const { 898 SkScalar SkPaint::measureText(const void* textData, size_t length, SkRect* bound s) const {
899 const char* text = (const char*)textData; 899 const char* text = (const char*)textData;
900 SkASSERT(text != NULL || length == 0); 900 SkASSERT(text != nullptr || length == 0);
901 901
902 SkCanonicalizePaint canon(*this); 902 SkCanonicalizePaint canon(*this);
903 const SkPaint& paint = canon.getPaint(); 903 const SkPaint& paint = canon.getPaint();
904 SkScalar scale = canon.getScale(); 904 SkScalar scale = canon.getScale();
905 905
906 SkAutoGlyphCache autoCache(paint, NULL, NULL); 906 SkAutoGlyphCache autoCache(paint, nullptr, nullptr);
907 SkGlyphCache* cache = autoCache.getCache(); 907 SkGlyphCache* cache = autoCache.getCache();
908 908
909 SkScalar width = 0; 909 SkScalar width = 0;
910 910
911 if (length > 0) { 911 if (length > 0) {
912 int tempCount; 912 int tempCount;
913 913
914 width = paint.measure_text(cache, text, length, &tempCount, bounds); 914 width = paint.measure_text(cache, text, length, &tempCount, bounds);
915 if (scale) { 915 if (scale) {
916 width = SkScalarMul(width, scale); 916 width = SkScalarMul(width, scale);
(...skipping 20 matching lines...) Expand all
937 return 0; 937 return 0;
938 } 938 }
939 939
940 if (0 == fTextSize) { 940 if (0 == fTextSize) {
941 if (measuredWidth) { 941 if (measuredWidth) {
942 *measuredWidth = 0; 942 *measuredWidth = 0;
943 } 943 }
944 return length; 944 return length;
945 } 945 }
946 946
947 SkASSERT(textD != NULL); 947 SkASSERT(textD != nullptr);
948 const char* text = (const char*)textD; 948 const char* text = (const char*)textD;
949 const char* stop = text + length; 949 const char* stop = text + length;
950 950
951 SkCanonicalizePaint canon(*this); 951 SkCanonicalizePaint canon(*this);
952 const SkPaint& paint = canon.getPaint(); 952 const SkPaint& paint = canon.getPaint();
953 SkScalar scale = canon.getScale(); 953 SkScalar scale = canon.getScale();
954 954
955 // adjust max in case we changed the textSize in paint 955 // adjust max in case we changed the textSize in paint
956 if (scale) { 956 if (scale) {
957 maxWidth /= scale; 957 maxWidth /= scale;
958 } 958 }
959 959
960 SkAutoGlyphCache autoCache(paint, NULL, NULL); 960 SkAutoGlyphCache autoCache(paint, nullptr, nullptr);
961 SkGlyphCache* cache = autoCache.getCache(); 961 SkGlyphCache* cache = autoCache.getCache();
962 962
963 SkMeasureCacheProc glyphCacheProc = paint.getMeasureCacheProc(false); 963 SkMeasureCacheProc glyphCacheProc = paint.getMeasureCacheProc(false);
964 const int xyIndex = paint.isVerticalText() ? 1 : 0; 964 const int xyIndex = paint.isVerticalText() ? 1 : 0;
965 // use 64bits for our accumulator, to avoid overflowing 16.16 965 // use 64bits for our accumulator, to avoid overflowing 16.16
966 Sk48Dot16 max = SkScalarToFixed(maxWidth); 966 Sk48Dot16 max = SkScalarToFixed(maxWidth);
967 Sk48Dot16 width = 0; 967 Sk48Dot16 width = 0;
968 968
969 SkAutoKern autokern; 969 SkAutoKern autokern;
970 970
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 static void FontMetricsDescProc(SkTypeface* typeface, const SkDescriptor* desc, 1015 static void FontMetricsDescProc(SkTypeface* typeface, const SkDescriptor* desc,
1016 void* context) { 1016 void* context) {
1017 SkGlyphCache::VisitCache(typeface, desc, FontMetricsCacheProc, context); 1017 SkGlyphCache::VisitCache(typeface, desc, FontMetricsCacheProc, context);
1018 } 1018 }
1019 1019
1020 SkScalar SkPaint::getFontMetrics(FontMetrics* metrics, SkScalar zoom) const { 1020 SkScalar SkPaint::getFontMetrics(FontMetrics* metrics, SkScalar zoom) const {
1021 SkCanonicalizePaint canon(*this); 1021 SkCanonicalizePaint canon(*this);
1022 const SkPaint& paint = canon.getPaint(); 1022 const SkPaint& paint = canon.getPaint();
1023 SkScalar scale = canon.getScale(); 1023 SkScalar scale = canon.getScale();
1024 1024
1025 SkMatrix zoomMatrix, *zoomPtr = NULL; 1025 SkMatrix zoomMatrix, *zoomPtr = nullptr;
1026 if (zoom) { 1026 if (zoom) {
1027 zoomMatrix.setScale(zoom, zoom); 1027 zoomMatrix.setScale(zoom, zoom);
1028 zoomPtr = &zoomMatrix; 1028 zoomPtr = &zoomMatrix;
1029 } 1029 }
1030 1030
1031 FontMetrics storage; 1031 FontMetrics storage;
1032 if (NULL == metrics) { 1032 if (nullptr == metrics) {
1033 metrics = &storage; 1033 metrics = &storage;
1034 } 1034 }
1035 1035
1036 paint.descriptorProc(NULL, zoomPtr, FontMetricsDescProc, metrics, true); 1036 paint.descriptorProc(nullptr, zoomPtr, FontMetricsDescProc, metrics, true);
1037 1037
1038 if (scale) { 1038 if (scale) {
1039 metrics->fTop = SkScalarMul(metrics->fTop, scale); 1039 metrics->fTop = SkScalarMul(metrics->fTop, scale);
1040 metrics->fAscent = SkScalarMul(metrics->fAscent, scale); 1040 metrics->fAscent = SkScalarMul(metrics->fAscent, scale);
1041 metrics->fDescent = SkScalarMul(metrics->fDescent, scale); 1041 metrics->fDescent = SkScalarMul(metrics->fDescent, scale);
1042 metrics->fBottom = SkScalarMul(metrics->fBottom, scale); 1042 metrics->fBottom = SkScalarMul(metrics->fBottom, scale);
1043 metrics->fLeading = SkScalarMul(metrics->fLeading, scale); 1043 metrics->fLeading = SkScalarMul(metrics->fLeading, scale);
1044 metrics->fAvgCharWidth = SkScalarMul(metrics->fAvgCharWidth, scale); 1044 metrics->fAvgCharWidth = SkScalarMul(metrics->fAvgCharWidth, scale);
1045 metrics->fXMin = SkScalarMul(metrics->fXMin, scale); 1045 metrics->fXMin = SkScalarMul(metrics->fXMin, scale);
1046 metrics->fXMax = SkScalarMul(metrics->fXMax, scale); 1046 metrics->fXMax = SkScalarMul(metrics->fXMax, scale);
(...skipping 14 matching lines...) Expand all
1061 } 1061 }
1062 1062
1063 int SkPaint::getTextWidths(const void* textData, size_t byteLength, 1063 int SkPaint::getTextWidths(const void* textData, size_t byteLength,
1064 SkScalar widths[], SkRect bounds[]) const { 1064 SkScalar widths[], SkRect bounds[]) const {
1065 if (0 == byteLength) { 1065 if (0 == byteLength) {
1066 return 0; 1066 return 0;
1067 } 1067 }
1068 1068
1069 SkASSERT(textData); 1069 SkASSERT(textData);
1070 1070
1071 if (NULL == widths && NULL == bounds) { 1071 if (nullptr == widths && nullptr == bounds) {
1072 return this->countText(textData, byteLength); 1072 return this->countText(textData, byteLength);
1073 } 1073 }
1074 1074
1075 SkCanonicalizePaint canon(*this); 1075 SkCanonicalizePaint canon(*this);
1076 const SkPaint& paint = canon.getPaint(); 1076 const SkPaint& paint = canon.getPaint();
1077 SkScalar scale = canon.getScale(); 1077 SkScalar scale = canon.getScale();
1078 1078
1079 SkAutoGlyphCache autoCache(paint, NULL, NULL); 1079 SkAutoGlyphCache autoCache(paint, nullptr, nullptr);
1080 SkGlyphCache* cache = autoCache.getCache(); 1080 SkGlyphCache* cache = autoCache.getCache();
1081 SkMeasureCacheProc glyphCacheProc; 1081 SkMeasureCacheProc glyphCacheProc;
1082 glyphCacheProc = paint.getMeasureCacheProc(NULL != bounds); 1082 glyphCacheProc = paint.getMeasureCacheProc(nullptr != bounds);
1083 1083
1084 const char* text = (const char*)textData; 1084 const char* text = (const char*)textData;
1085 const char* stop = text + byteLength; 1085 const char* stop = text + byteLength;
1086 int count = 0; 1086 int count = 0;
1087 const int xyIndex = paint.isVerticalText() ? 1 : 0; 1087 const int xyIndex = paint.isVerticalText() ? 1 : 0;
1088 1088
1089 if (this->isDevKernText()) { 1089 if (this->isDevKernText()) {
1090 // we adjust the widths returned here through auto-kerning 1090 // we adjust the widths returned here through auto-kerning
1091 SkAutoKern autokern; 1091 SkAutoKern autokern;
1092 SkFixed prevWidth = 0; 1092 SkFixed prevWidth = 0;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 SkASSERT(text == stop); 1161 SkASSERT(text == stop);
1162 return count; 1162 return count;
1163 } 1163 }
1164 1164
1165 /////////////////////////////////////////////////////////////////////////////// 1165 ///////////////////////////////////////////////////////////////////////////////
1166 1166
1167 #include "SkDraw.h" 1167 #include "SkDraw.h"
1168 1168
1169 void SkPaint::getTextPath(const void* textData, size_t length, 1169 void SkPaint::getTextPath(const void* textData, size_t length,
1170 SkScalar x, SkScalar y, SkPath* path) const { 1170 SkScalar x, SkScalar y, SkPath* path) const {
1171 SkASSERT(length == 0 || textData != NULL); 1171 SkASSERT(length == 0 || textData != nullptr);
1172 1172
1173 const char* text = (const char*)textData; 1173 const char* text = (const char*)textData;
1174 if (text == NULL || length == 0 || path == NULL) { 1174 if (text == nullptr || length == 0 || path == nullptr) {
1175 return; 1175 return;
1176 } 1176 }
1177 1177
1178 SkTextToPathIter iter(text, length, *this, false); 1178 SkTextToPathIter iter(text, length, *this, false);
1179 SkMatrix matrix; 1179 SkMatrix matrix;
1180 SkScalar prevXPos = 0; 1180 SkScalar prevXPos = 0;
1181 1181
1182 matrix.setScale(iter.getPathScale(), iter.getPathScale()); 1182 matrix.setScale(iter.getPathScale(), iter.getPathScale());
1183 matrix.postTranslate(x, y); 1183 matrix.postTranslate(x, y);
1184 path->reset(); 1184 path->reset();
1185 1185
1186 SkScalar xpos; 1186 SkScalar xpos;
1187 const SkPath* iterPath; 1187 const SkPath* iterPath;
1188 while (iter.next(&iterPath, &xpos)) { 1188 while (iter.next(&iterPath, &xpos)) {
1189 matrix.postTranslate(xpos - prevXPos, 0); 1189 matrix.postTranslate(xpos - prevXPos, 0);
1190 if (iterPath) { 1190 if (iterPath) {
1191 path->addPath(*iterPath, matrix); 1191 path->addPath(*iterPath, matrix);
1192 } 1192 }
1193 prevXPos = xpos; 1193 prevXPos = xpos;
1194 } 1194 }
1195 } 1195 }
1196 1196
1197 void SkPaint::getPosTextPath(const void* textData, size_t length, 1197 void SkPaint::getPosTextPath(const void* textData, size_t length,
1198 const SkPoint pos[], SkPath* path) const { 1198 const SkPoint pos[], SkPath* path) const {
1199 SkASSERT(length == 0 || textData != NULL); 1199 SkASSERT(length == 0 || textData != nullptr);
1200 1200
1201 const char* text = (const char*)textData; 1201 const char* text = (const char*)textData;
1202 if (text == NULL || length == 0 || path == NULL) { 1202 if (text == nullptr || length == 0 || path == nullptr) {
1203 return; 1203 return;
1204 } 1204 }
1205 1205
1206 SkTextToPathIter iter(text, length, *this, false); 1206 SkTextToPathIter iter(text, length, *this, false);
1207 SkMatrix matrix; 1207 SkMatrix matrix;
1208 SkPoint prevPos; 1208 SkPoint prevPos;
1209 prevPos.set(0, 0); 1209 prevPos.set(0, 0);
1210 1210
1211 matrix.setScale(iter.getPathScale(), iter.getPathScale()); 1211 matrix.setScale(iter.getPathScale(), iter.getPathScale());
1212 path->reset(); 1212 path->reset();
1213 1213
1214 unsigned int i = 0; 1214 unsigned int i = 0;
1215 const SkPath* iterPath; 1215 const SkPath* iterPath;
1216 while (iter.next(&iterPath, NULL)) { 1216 while (iter.next(&iterPath, nullptr)) {
1217 matrix.postTranslate(pos[i].fX - prevPos.fX, pos[i].fY - prevPos.fY); 1217 matrix.postTranslate(pos[i].fX - prevPos.fX, pos[i].fY - prevPos.fY);
1218 if (iterPath) { 1218 if (iterPath) {
1219 path->addPath(*iterPath, matrix); 1219 path->addPath(*iterPath, matrix);
1220 } 1220 }
1221 prevPos = pos[i]; 1221 prevPos = pos[i];
1222 i++; 1222 i++;
1223 } 1223 }
1224 } 1224 }
1225 1225
1226 SkRect SkPaint::getFontBounds() const { 1226 SkRect SkPaint::getFontBounds() const {
1227 SkMatrix m; 1227 SkMatrix m;
1228 m.setScale(fTextSize * fTextScaleX, fTextSize); 1228 m.setScale(fTextSize * fTextScaleX, fTextSize);
1229 m.postSkew(fTextSkewX, 0); 1229 m.postSkew(fTextSkewX, 0);
1230 1230
1231 SkTypeface* typeface = this->getTypeface(); 1231 SkTypeface* typeface = this->getTypeface();
1232 if (NULL == typeface) { 1232 if (nullptr == typeface) {
1233 typeface = SkTypeface::GetDefaultTypeface(); 1233 typeface = SkTypeface::GetDefaultTypeface();
1234 } 1234 }
1235 1235
1236 SkRect bounds; 1236 SkRect bounds;
1237 m.mapRect(&bounds, typeface->getBounds()); 1237 m.mapRect(&bounds, typeface->getBounds());
1238 return bounds; 1238 return bounds;
1239 } 1239 }
1240 1240
1241 static void add_flattenable(SkDescriptor* desc, uint32_t tag, 1241 static void add_flattenable(SkDescriptor* desc, uint32_t tag,
1242 SkWriteBuffer* buffer) { 1242 SkWriteBuffer* buffer) {
1243 buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), NULL)); 1243 buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), nullptr));
1244 } 1244 }
1245 1245
1246 static SkMask::Format compute_mask_format(const SkPaint& paint) { 1246 static SkMask::Format compute_mask_format(const SkPaint& paint) {
1247 uint32_t flags = paint.getFlags(); 1247 uint32_t flags = paint.getFlags();
1248 1248
1249 // Antialiasing being disabled trumps all other settings. 1249 // Antialiasing being disabled trumps all other settings.
1250 if (!(flags & SkPaint::kAntiAlias_Flag)) { 1250 if (!(flags & SkPaint::kAntiAlias_Flag)) {
1251 return SkMask::kBW_Format; 1251 return SkMask::kBW_Format;
1252 } 1252 }
1253 1253
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 */ 1322 */
1323 static SkScalar sk_relax(SkScalar x) { 1323 static SkScalar sk_relax(SkScalar x) {
1324 int n = sk_float_round2int(x * 1024); 1324 int n = sk_float_round2int(x * 1024);
1325 return n / 1024.0f; 1325 return n / 1024.0f;
1326 } 1326 }
1327 1327
1328 void SkScalerContext::MakeRec(const SkPaint& paint, 1328 void SkScalerContext::MakeRec(const SkPaint& paint,
1329 const SkSurfaceProps* surfaceProps, 1329 const SkSurfaceProps* surfaceProps,
1330 const SkMatrix* deviceMatrix, 1330 const SkMatrix* deviceMatrix,
1331 Rec* rec) { 1331 Rec* rec) {
1332 SkASSERT(deviceMatrix == NULL || !deviceMatrix->hasPerspective()); 1332 SkASSERT(deviceMatrix == nullptr || !deviceMatrix->hasPerspective());
1333 1333
1334 SkTypeface* typeface = paint.getTypeface(); 1334 SkTypeface* typeface = paint.getTypeface();
1335 if (NULL == typeface) { 1335 if (nullptr == typeface) {
1336 typeface = SkTypeface::GetDefaultTypeface(); 1336 typeface = SkTypeface::GetDefaultTypeface();
1337 } 1337 }
1338 rec->fFontID = typeface->uniqueID(); 1338 rec->fFontID = typeface->uniqueID();
1339 rec->fTextSize = paint.getTextSize(); 1339 rec->fTextSize = paint.getTextSize();
1340 rec->fPreScaleX = paint.getTextScaleX(); 1340 rec->fPreScaleX = paint.getTextScaleX();
1341 rec->fPreSkewX = paint.getTextSkewX(); 1341 rec->fPreSkewX = paint.getTextSkewX();
1342 1342
1343 bool checkPost2x2 = false; 1343 bool checkPost2x2 = false;
1344 1344
1345 if (deviceMatrix) { 1345 if (deviceMatrix) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 // be sure to call PostMakeRec(rec) before you actually use it! 1491 // be sure to call PostMakeRec(rec) before you actually use it!
1492 } 1492 }
1493 1493
1494 /** 1494 /**
1495 * In order to call cachedDeviceLuminance, cachedPaintLuminance, or 1495 * In order to call cachedDeviceLuminance, cachedPaintLuminance, or
1496 * cachedMaskGamma the caller must hold the gMaskGammaCacheMutex and continue 1496 * cachedMaskGamma the caller must hold the gMaskGammaCacheMutex and continue
1497 * to hold it until the returned pointer is refed or forgotten. 1497 * to hold it until the returned pointer is refed or forgotten.
1498 */ 1498 */
1499 SK_DECLARE_STATIC_MUTEX(gMaskGammaCacheMutex); 1499 SK_DECLARE_STATIC_MUTEX(gMaskGammaCacheMutex);
1500 1500
1501 static SkMaskGamma* gLinearMaskGamma = NULL; 1501 static SkMaskGamma* gLinearMaskGamma = nullptr;
1502 static SkMaskGamma* gMaskGamma = NULL; 1502 static SkMaskGamma* gMaskGamma = nullptr;
1503 static SkScalar gContrast = SK_ScalarMin; 1503 static SkScalar gContrast = SK_ScalarMin;
1504 static SkScalar gPaintGamma = SK_ScalarMin; 1504 static SkScalar gPaintGamma = SK_ScalarMin;
1505 static SkScalar gDeviceGamma = SK_ScalarMin; 1505 static SkScalar gDeviceGamma = SK_ScalarMin;
1506 /** 1506 /**
1507 * The caller must hold the gMaskGammaCacheMutex and continue to hold it until 1507 * The caller must hold the gMaskGammaCacheMutex and continue to hold it until
1508 * the returned SkMaskGamma pointer is refed or forgotten. 1508 * the returned SkMaskGamma pointer is refed or forgotten.
1509 */ 1509 */
1510 static const SkMaskGamma& cachedMaskGamma(SkScalar contrast, SkScalar paintGamma , SkScalar deviceGamma) { 1510 static const SkMaskGamma& cachedMaskGamma(SkScalar contrast, SkScalar paintGamma , SkScalar deviceGamma) {
1511 gMaskGammaCacheMutex.assertHeld(); 1511 gMaskGammaCacheMutex.assertHeld();
1512 if (0 == contrast && SK_Scalar1 == paintGamma && SK_Scalar1 == deviceGamma) { 1512 if (0 == contrast && SK_Scalar1 == paintGamma && SK_Scalar1 == deviceGamma) {
1513 if (NULL == gLinearMaskGamma) { 1513 if (nullptr == gLinearMaskGamma) {
1514 gLinearMaskGamma = new SkMaskGamma; 1514 gLinearMaskGamma = new SkMaskGamma;
1515 } 1515 }
1516 return *gLinearMaskGamma; 1516 return *gLinearMaskGamma;
1517 } 1517 }
1518 if (gContrast != contrast || gPaintGamma != paintGamma || gDeviceGamma != de viceGamma) { 1518 if (gContrast != contrast || gPaintGamma != paintGamma || gDeviceGamma != de viceGamma) {
1519 SkSafeUnref(gMaskGamma); 1519 SkSafeUnref(gMaskGamma);
1520 gMaskGamma = new SkMaskGamma(contrast, paintGamma, deviceGamma); 1520 gMaskGamma = new SkMaskGamma(contrast, paintGamma, deviceGamma);
1521 gContrast = contrast; 1521 gContrast = contrast;
1522 gPaintGamma = paintGamma; 1522 gPaintGamma = paintGamma;
1523 gDeviceGamma = deviceGamma; 1523 gDeviceGamma = deviceGamma;
1524 } 1524 }
1525 return *gMaskGamma; 1525 return *gMaskGamma;
1526 } 1526 }
1527 1527
1528 /*static*/ void SkPaint::Term() { 1528 /*static*/ void SkPaint::Term() {
1529 SkAutoMutexAcquire ama(gMaskGammaCacheMutex); 1529 SkAutoMutexAcquire ama(gMaskGammaCacheMutex);
1530 1530
1531 SkSafeUnref(gLinearMaskGamma); 1531 SkSafeUnref(gLinearMaskGamma);
1532 gLinearMaskGamma = NULL; 1532 gLinearMaskGamma = nullptr;
1533 SkSafeUnref(gMaskGamma); 1533 SkSafeUnref(gMaskGamma);
1534 gMaskGamma = NULL; 1534 gMaskGamma = nullptr;
1535 SkDEBUGCODE(gContrast = SK_ScalarMin;) 1535 SkDEBUGCODE(gContrast = SK_ScalarMin;)
1536 SkDEBUGCODE(gPaintGamma = SK_ScalarMin;) 1536 SkDEBUGCODE(gPaintGamma = SK_ScalarMin;)
1537 SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;) 1537 SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;)
1538 } 1538 }
1539 1539
1540 /** 1540 /**
1541 * We ensure that the rec is self-consistent and efficient (where possible) 1541 * We ensure that the rec is self-consistent and efficient (where possible)
1542 */ 1542 */
1543 void SkScalerContext::PostMakeRec(const SkPaint&, SkScalerContext::Rec* rec) { 1543 void SkScalerContext::PostMakeRec(const SkPaint&, SkScalerContext::Rec* rec) {
1544 /** 1544 /**
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
1968 1968
1969 uint32_t tmp = *pod++; 1969 uint32_t tmp = *pod++;
1970 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); 1970 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF));
1971 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); 1971 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF));
1972 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); 1972 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF));
1973 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); 1973 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF));
1974 1974
1975 if (flatFlags & kHasTypeface_FlatFlag) { 1975 if (flatFlags & kHasTypeface_FlatFlag) {
1976 this->setTypeface(buffer.readTypeface()); 1976 this->setTypeface(buffer.readTypeface());
1977 } else { 1977 } else {
1978 this->setTypeface(NULL); 1978 this->setTypeface(nullptr);
1979 } 1979 }
1980 1980
1981 if (flatFlags & kHasEffects_FlatFlag) { 1981 if (flatFlags & kHasEffects_FlatFlag) {
1982 SkSafeUnref(this->setPathEffect(buffer.readPathEffect())); 1982 SkSafeUnref(this->setPathEffect(buffer.readPathEffect()));
1983 SkSafeUnref(this->setShader(buffer.readShader())); 1983 SkSafeUnref(this->setShader(buffer.readShader()));
1984 SkSafeUnref(this->setXfermode(buffer.readXfermode())); 1984 SkSafeUnref(this->setXfermode(buffer.readXfermode()));
1985 SkSafeUnref(this->setMaskFilter(buffer.readMaskFilter())); 1985 SkSafeUnref(this->setMaskFilter(buffer.readMaskFilter()));
1986 SkSafeUnref(this->setColorFilter(buffer.readColorFilter())); 1986 SkSafeUnref(this->setColorFilter(buffer.readColorFilter()));
1987 SkSafeUnref(this->setRasterizer(buffer.readRasterizer())); 1987 SkSafeUnref(this->setRasterizer(buffer.readRasterizer()));
1988 SkSafeUnref(this->setLooper(buffer.readDrawLooper())); 1988 SkSafeUnref(this->setLooper(buffer.readDrawLooper()));
1989 SkSafeUnref(this->setImageFilter(buffer.readImageFilter())); 1989 SkSafeUnref(this->setImageFilter(buffer.readImageFilter()));
1990 1990
1991 if (buffer.readBool()) { 1991 if (buffer.readBool()) {
1992 this->setAnnotation(SkAnnotation::Create(buffer))->unref(); 1992 this->setAnnotation(SkAnnotation::Create(buffer))->unref();
1993 } 1993 }
1994 } else { 1994 } else {
1995 this->setPathEffect(NULL); 1995 this->setPathEffect(nullptr);
1996 this->setShader(NULL); 1996 this->setShader(nullptr);
1997 this->setXfermode(NULL); 1997 this->setXfermode(nullptr);
1998 this->setMaskFilter(NULL); 1998 this->setMaskFilter(nullptr);
1999 this->setColorFilter(NULL); 1999 this->setColorFilter(nullptr);
2000 this->setRasterizer(NULL); 2000 this->setRasterizer(nullptr);
2001 this->setLooper(NULL); 2001 this->setLooper(nullptr);
2002 this->setImageFilter(NULL); 2002 this->setImageFilter(nullptr);
2003 } 2003 }
2004 } 2004 }
2005 2005
2006 /////////////////////////////////////////////////////////////////////////////// 2006 ///////////////////////////////////////////////////////////////////////////////
2007 2007
2008 SkShader* SkPaint::setShader(SkShader* shader) { 2008 SkShader* SkPaint::setShader(SkShader* shader) {
2009 SkRefCnt_SafeAssign(fShader, shader); 2009 SkRefCnt_SafeAssign(fShader, shader);
2010 return shader; 2010 return shader;
2011 } 2011 }
2012 2012
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2296 paint.getStyle() != SkPaint::kFill_Style; 2296 paint.getStyle() != SkPaint::kFill_Style;
2297 } 2297 }
2298 2298
2299 SkTextToPathIter::SkTextToPathIter(const char text[], size_t length, 2299 SkTextToPathIter::SkTextToPathIter(const char text[], size_t length,
2300 const SkPaint& paint, 2300 const SkPaint& paint,
2301 bool applyStrokeAndPathEffects) 2301 bool applyStrokeAndPathEffects)
2302 : fPaint(paint) { 2302 : fPaint(paint) {
2303 fGlyphCacheProc = paint.getMeasureCacheProc(true); 2303 fGlyphCacheProc = paint.getMeasureCacheProc(true);
2304 2304
2305 fPaint.setLinearText(true); 2305 fPaint.setLinearText(true);
2306 fPaint.setMaskFilter(NULL); // don't want this affecting our path-cache lo okup 2306 fPaint.setMaskFilter(nullptr); // don't want this affecting our path-cache lookup
2307 2307
2308 if (fPaint.getPathEffect() == NULL && !has_thick_frame(fPaint)) { 2308 if (fPaint.getPathEffect() == nullptr && !has_thick_frame(fPaint)) {
2309 applyStrokeAndPathEffects = false; 2309 applyStrokeAndPathEffects = false;
2310 } 2310 }
2311 2311
2312 // can't use our canonical size if we need to apply patheffects 2312 // can't use our canonical size if we need to apply patheffects
2313 if (fPaint.getPathEffect() == NULL) { 2313 if (fPaint.getPathEffect() == nullptr) {
2314 fPaint.setTextSize(SkIntToScalar(SkPaint::kCanonicalTextSizeForPaths)); 2314 fPaint.setTextSize(SkIntToScalar(SkPaint::kCanonicalTextSizeForPaths));
2315 fScale = paint.getTextSize() / SkPaint::kCanonicalTextSizeForPaths; 2315 fScale = paint.getTextSize() / SkPaint::kCanonicalTextSizeForPaths;
2316 if (has_thick_frame(fPaint)) { 2316 if (has_thick_frame(fPaint)) {
2317 fPaint.setStrokeWidth(fPaint.getStrokeWidth() / fScale); 2317 fPaint.setStrokeWidth(fPaint.getStrokeWidth() / fScale);
2318 } 2318 }
2319 } else { 2319 } else {
2320 fScale = SK_Scalar1; 2320 fScale = SK_Scalar1;
2321 } 2321 }
2322 2322
2323 if (!applyStrokeAndPathEffects) { 2323 if (!applyStrokeAndPathEffects) {
2324 fPaint.setStyle(SkPaint::kFill_Style); 2324 fPaint.setStyle(SkPaint::kFill_Style);
2325 fPaint.setPathEffect(NULL); 2325 fPaint.setPathEffect(nullptr);
2326 } 2326 }
2327 2327
2328 fCache = fPaint.detachCache(NULL, NULL, false); 2328 fCache = fPaint.detachCache(nullptr, nullptr, false);
2329 2329
2330 SkPaint::Style style = SkPaint::kFill_Style; 2330 SkPaint::Style style = SkPaint::kFill_Style;
2331 SkPathEffect* pe = NULL; 2331 SkPathEffect* pe = nullptr;
2332 2332
2333 if (!applyStrokeAndPathEffects) { 2333 if (!applyStrokeAndPathEffects) {
2334 style = paint.getStyle(); // restore 2334 style = paint.getStyle(); // restore
2335 pe = paint.getPathEffect(); // restore 2335 pe = paint.getPathEffect(); // restore
2336 } 2336 }
2337 fPaint.setStyle(style); 2337 fPaint.setStyle(style);
2338 fPaint.setPathEffect(pe); 2338 fPaint.setPathEffect(pe);
2339 fPaint.setMaskFilter(paint.getMaskFilter()); // restore 2339 fPaint.setMaskFilter(paint.getMaskFilter()); // restore
2340 2340
2341 // now compute fXOffset if needed 2341 // now compute fXOffset if needed
2342 2342
2343 SkScalar xOffset = 0; 2343 SkScalar xOffset = 0;
2344 if (paint.getTextAlign() != SkPaint::kLeft_Align) { // need to measure first 2344 if (paint.getTextAlign() != SkPaint::kLeft_Align) { // need to measure first
2345 int count; 2345 int count;
2346 SkScalar width = SkScalarMul(fPaint.measure_text(fCache, text, length, 2346 SkScalar width = SkScalarMul(fPaint.measure_text(fCache, text, length,
2347 &count, NULL), fScale); 2347 &count, nullptr), fScal e);
2348 if (paint.getTextAlign() == SkPaint::kCenter_Align) { 2348 if (paint.getTextAlign() == SkPaint::kCenter_Align) {
2349 width = SkScalarHalf(width); 2349 width = SkScalarHalf(width);
2350 } 2350 }
2351 xOffset = -width; 2351 xOffset = -width;
2352 } 2352 }
2353 fXPos = xOffset; 2353 fXPos = xOffset;
2354 fPrevAdvance = 0; 2354 fPrevAdvance = 0;
2355 2355
2356 fText = text; 2356 fText = text;
2357 fStop = text + length; 2357 fStop = text + length;
(...skipping 11 matching lines...) Expand all
2369 2369
2370 fXPos += SkScalarMul(SkFixedToScalar(fPrevAdvance + fAutoKern.adjust(gly ph)), fScale); 2370 fXPos += SkScalarMul(SkFixedToScalar(fPrevAdvance + fAutoKern.adjust(gly ph)), fScale);
2371 fPrevAdvance = advance(glyph, fXYIndex); // + fPaint.getTextTracking() ; 2371 fPrevAdvance = advance(glyph, fXYIndex); // + fPaint.getTextTracking() ;
2372 2372
2373 if (glyph.fWidth) { 2373 if (glyph.fWidth) {
2374 if (path) { 2374 if (path) {
2375 *path = fCache->findPath(glyph); 2375 *path = fCache->findPath(glyph);
2376 } 2376 }
2377 } else { 2377 } else {
2378 if (path) { 2378 if (path) {
2379 *path = NULL; 2379 *path = nullptr;
2380 } 2380 }
2381 } 2381 }
2382 if (xpos) { 2382 if (xpos) {
2383 *xpos = fXPos; 2383 *xpos = fXPos;
2384 } 2384 }
2385 return true; 2385 return true;
2386 } 2386 }
2387 return false; 2387 return false;
2388 } 2388 }
2389 2389
2390 /////////////////////////////////////////////////////////////////////////////// 2390 ///////////////////////////////////////////////////////////////////////////////
2391 2391
2392 // return true if the filter exists, and may affect alpha 2392 // return true if the filter exists, and may affect alpha
2393 static bool affects_alpha(const SkColorFilter* cf) { 2393 static bool affects_alpha(const SkColorFilter* cf) {
2394 return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag); 2394 return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag);
2395 } 2395 }
2396 2396
2397 // return true if the filter exists, and may affect alpha 2397 // return true if the filter exists, and may affect alpha
2398 static bool affects_alpha(const SkImageFilter* imf) { 2398 static bool affects_alpha(const SkImageFilter* imf) {
2399 // TODO: check if we should allow imagefilters to broadcast that they don't affect alpha 2399 // TODO: check if we should allow imagefilters to broadcast that they don't affect alpha
2400 // ala colorfilters 2400 // ala colorfilters
2401 return imf != NULL; 2401 return imf != nullptr;
2402 } 2402 }
2403 2403
2404 bool SkPaint::nothingToDraw() const { 2404 bool SkPaint::nothingToDraw() const {
2405 if (fLooper) { 2405 if (fLooper) {
2406 return false; 2406 return false;
2407 } 2407 }
2408 SkXfermode::Mode mode; 2408 SkXfermode::Mode mode;
2409 if (SkXfermode::AsMode(fXfermode, &mode)) { 2409 if (SkXfermode::AsMode(fXfermode, &mode)) {
2410 switch (mode) { 2410 switch (mode) {
2411 case SkXfermode::kSrcOver_Mode: 2411 case SkXfermode::kSrcOver_Mode:
(...skipping 15 matching lines...) Expand all
2427 } 2427 }
2428 2428
2429 uint32_t SkPaint::getHash() const { 2429 uint32_t SkPaint::getHash() const {
2430 // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB itfields, 2430 // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB itfields,
2431 // so fBitfields should be 10 pointers and 6 32-bit values from the start. 2431 // so fBitfields should be 10 pointers and 6 32-bit values from the start.
2432 static_assert(offsetof(SkPaint, fBitfields) == 10 * sizeof(void*) + 6 * size of(uint32_t), 2432 static_assert(offsetof(SkPaint, fBitfields) == 10 * sizeof(void*) + 6 * size of(uint32_t),
2433 "SkPaint_notPackedTightly"); 2433 "SkPaint_notPackedTightly");
2434 return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this), 2434 return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this),
2435 offsetof(SkPaint, fBitfields) + sizeof(fBitfields )); 2435 offsetof(SkPaint, fBitfields) + sizeof(fBitfields ));
2436 } 2436 }
OLDNEW
« no previous file with comments | « src/core/SkMultiPictureDraw.cpp ('k') | src/core/SkPaintPriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698