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 #include "SampleCode.h" | 7 #include "SampleCode.h" |
8 #include "Sk1DPathEffect.h" | 8 #include "Sk1DPathEffect.h" |
9 #include "Sk2DPathEffect.h" | 9 #include "Sk2DPathEffect.h" |
10 #include "SkAlphaThresholdFilter.h" | 10 #include "SkAlphaThresholdFilter.h" |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
480 light); | 480 light); |
481 } | 481 } |
482 case 2: | 482 case 2: |
483 default: | 483 default: |
484 maskFilter = nullptr; | 484 maskFilter = nullptr; |
485 break; | 485 break; |
486 } | 486 } |
487 return maskFilter; | 487 return maskFilter; |
488 } | 488 } |
489 | 489 |
490 static SkImageFilter* make_image_filter(bool canBeNull = true); | 490 static sk_sp<SkImageFilter> make_image_filter(bool canBeNull = true); |
491 | 491 |
492 static SkPaint make_paint() { | 492 static SkPaint make_paint() { |
493 SkPaint paint; | 493 SkPaint paint; |
494 paint.setHinting(make_paint_hinting()); | 494 paint.setHinting(make_paint_hinting()); |
495 paint.setAntiAlias(make_bool()); | 495 paint.setAntiAlias(make_bool()); |
496 paint.setDither(make_bool()); | 496 paint.setDither(make_bool()); |
497 paint.setLinearText(make_bool()); | 497 paint.setLinearText(make_bool()); |
498 paint.setSubpixelText(make_bool()); | 498 paint.setSubpixelText(make_bool()); |
499 paint.setLCDRenderText(make_bool()); | 499 paint.setLCDRenderText(make_bool()); |
500 paint.setEmbeddedBitmapText(make_bool()); | 500 paint.setEmbeddedBitmapText(make_bool()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
533 paint.setImageFilter(make_image_filter()); | 533 paint.setImageFilter(make_image_filter()); |
534 sk_sp<SkData> data(make_3Dlut(nullptr, make_bool(), make_bool(), make_bool() )); | 534 sk_sp<SkData> data(make_3Dlut(nullptr, make_bool(), make_bool(), make_bool() )); |
535 paint.setTextAlign(make_paint_align()); | 535 paint.setTextAlign(make_paint_align()); |
536 paint.setTextSize(make_scalar()); | 536 paint.setTextSize(make_scalar()); |
537 paint.setTextScaleX(make_scalar()); | 537 paint.setTextScaleX(make_scalar()); |
538 paint.setTextSkewX(make_scalar()); | 538 paint.setTextSkewX(make_scalar()); |
539 paint.setTextEncoding(make_paint_text_encoding()); | 539 paint.setTextEncoding(make_paint_text_encoding()); |
540 return paint; | 540 return paint; |
541 } | 541 } |
542 | 542 |
543 static SkImageFilter* make_image_filter(bool canBeNull) { | 543 static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) { |
544 SkImageFilter* filter = 0; | 544 sk_sp<SkImageFilter> filter; |
545 | 545 |
546 // Add a 1 in 3 chance to get a nullptr input | 546 // Add a 1 in 3 chance to get a nullptr input |
547 if (canBeNull && (R(3) == 1)) { return filter; } | 547 if (canBeNull && (R(3) == 1)) { |
548 return filter; | |
549 } | |
548 | 550 |
549 enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER, | 551 enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER, |
550 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, | 552 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, |
551 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, | 553 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, |
552 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, PAINT, NUM_FILTERS }; | 554 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, PAINT, NUM_FILTERS }; |
553 | 555 |
554 switch (R(NUM_FILTERS)) { | 556 switch (R(NUM_FILTERS)) { |
555 case ALPHA_THRESHOLD: | 557 case ALPHA_THRESHOLD: |
556 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma ke_scalar()); | 558 filter = sk_sp<SkImageFilter>(SkAlphaThresholdFilter::Create(make_region (), |
559 make_scalar (), | |
560 make_scalar ())); | |
557 break; | 561 break; |
558 case MERGE: | 562 case MERGE: |
559 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt er(), make_xfermode()); | 563 filter = sk_sp<SkImageFilter>(SkMergeImageFilter::Create(make_image_filt er().release(), |
f(malita)
2016/03/29 18:10:06
Hmm...
Mixing old-style Create methods with sk_sp
robertphillips
2016/03/29 19:31:40
Done.
| |
564 make_image_filt er().release(), | |
565 make_xfermode() )); | |
560 break; | 566 break; |
561 case COLOR: | 567 case COLOR: { |
562 { | |
563 sk_sp<SkColorFilter> cf(make_color_filter()); | 568 sk_sp<SkColorFilter> cf(make_color_filter()); |
564 filter = cf ? SkColorFilterImageFilter::Create(cf.get(), make_image_filt er()) : 0; | 569 filter = cf ? sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.g et(), |
570 make _image_filter().release())) | |
571 : nullptr; | |
572 break; | |
565 } | 573 } |
566 break; | 574 case LUT3D: { |
567 case LUT3D: | |
568 { | |
569 int cubeDimension; | 575 int cubeDimension; |
570 sk_sp<SkData> lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1), (R(2) == 1))); | 576 sk_sp<SkData> lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1), (R(2) == 1))); |
571 sk_sp<SkColorFilter> cf(SkColorCubeFilter::Make(lut3D, cubeDimension)); | 577 sk_sp<SkColorFilter> cf(SkColorCubeFilter::Make(lut3D, cubeDimension)); |
572 filter = cf ? SkColorFilterImageFilter::Create(cf.get(), make_image_filt er()) : 0; | 578 filter = cf ? sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.g et(), |
579 make _image_filter().release())) | |
580 : nullptr; | |
581 break; | |
573 } | 582 } |
574 break; | |
575 case BLUR: | 583 case BLUR: |
576 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter()); | 584 filter = sk_sp<SkImageFilter>(SkBlurImageFilter::Create(make_scalar(true ), |
585 make_scalar(true ), | |
586 make_image_filte r().release())); | |
577 break; | 587 break; |
578 case MAGNIFIER: | 588 case MAGNIFIER: |
579 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); | 589 filter = sk_sp<SkImageFilter>(SkMagnifierImageFilter::Create(make_rect() , |
590 make_scalar (true))); | |
580 break; | 591 break; |
581 case DOWN_SAMPLE: | 592 case DOWN_SAMPLE: |
582 filter = SkDownSampleImageFilter::Create(make_scalar()); | 593 filter = sk_sp<SkImageFilter>(SkDownSampleImageFilter::Create(make_scala r())); |
583 break; | 594 break; |
584 case XFERMODE: | 595 case XFERMODE: { |
585 { | |
586 SkAutoTUnref<SkXfermode> mode(SkXfermode::Create(make_xfermode())); | 596 SkAutoTUnref<SkXfermode> mode(SkXfermode::Create(make_xfermode())); |
587 filter = SkXfermodeImageFilter::Create(mode, make_image_filter(), make_i mage_filter()); | 597 filter = sk_sp<SkImageFilter>(SkXfermodeImageFilter::Create(mode, |
598 make_image_f ilter().release(), | |
599 make_image_f ilter().release())); | |
600 break; | |
588 } | 601 } |
589 break; | |
590 case OFFSET: | 602 case OFFSET: |
591 filter = SkOffsetImageFilter::Create(make_scalar(), make_scalar(), make_ image_filter()); | 603 filter = sk_sp<SkImageFilter>(SkOffsetImageFilter::Create(make_scalar(), make_scalar(), |
604 make_image_fil ter().release())); | |
592 break; | 605 break; |
593 case MATRIX: | 606 case MATRIX: |
594 filter = SkImageFilter::CreateMatrixFilter(make_matrix(), | 607 filter = sk_sp<SkImageFilter>(SkImageFilter::CreateMatrixFilter(make_mat rix(), |
595 (SkFilterQuality)R(4), | 608 (SkFilte rQuality)R(4), |
596 make_image_filter()); | 609 make_ima ge_filter().release())); |
597 break; | 610 break; |
598 case MATRIX_CONVOLUTION: | 611 case MATRIX_CONVOLUTION: { |
599 { | |
600 SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), | 612 SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), |
601 SkIntToScalar(kBitmapSize)) ); | 613 SkIntToScalar(kBitmapSize)) ); |
602 SkISize size = SkISize::Make(R(10)+1, R(10)+1); | 614 SkISize size = SkISize::Make(R(10)+1, R(10)+1); |
603 int arraySize = size.width() * size.height(); | 615 int arraySize = size.width() * size.height(); |
604 SkTArray<SkScalar> kernel(arraySize); | 616 SkTArray<SkScalar> kernel(arraySize); |
605 for (int i = 0; i < arraySize; ++i) { | 617 for (int i = 0; i < arraySize; ++i) { |
606 kernel.push_back() = make_scalar(); | 618 kernel.push_back() = make_scalar(); |
607 } | 619 } |
608 SkIPoint kernelOffset = SkIPoint::Make(R(SkIntToScalar(size.width())), | 620 SkIPoint kernelOffset = SkIPoint::Make(R(SkIntToScalar(size.width())), |
609 R(SkIntToScalar(size.height()))); | 621 R(SkIntToScalar(size.height()))); |
610 filter = SkMatrixConvolutionImageFilter::Create(size, | 622 filter = sk_sp<SkImageFilter>(SkMatrixConvolutionImageFilter::Create( |
623 size, | |
611 kernel.begin(), | 624 kernel.begin(), |
612 make_scalar(), | 625 make_scalar(), |
613 make_scalar(), | 626 make_scalar(), |
614 kernelOffset, | 627 kernelOffset, |
615 (SkMatrixConvolutionImag eFilter::TileMode)R(3), | 628 (SkMatrixConvolutionImag eFilter::TileMode)R(3), |
616 R(2) == 1, | 629 R(2) == 1, |
617 make_image_filter(), | 630 make_image_filter().rele ase(), |
618 &cropR); | 631 &cropR)); |
632 break; | |
619 } | 633 } |
620 break; | |
621 case COMPOSE: | 634 case COMPOSE: |
622 filter = SkComposeImageFilter::Create(make_image_filter(), make_image_fi lter()); | 635 filter = sk_sp<SkImageFilter>(SkComposeImageFilter::Create(make_image_fi lter().release(), |
636 make_image_fi lter().release())); | |
623 break; | 637 break; |
624 case DISTANT_LIGHT: | 638 case DISTANT_LIGHT: |
625 filter = (R(2) == 1) ? | 639 filter = (R(2) == 1) |
626 SkLightingImageFilter::CreateDistantLitDiffuse(make_point(), | 640 ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreateDistantLitD iffuse(make_point(), |
627 make_color(), make_scalar(), make_scalar(), make_image_filter() ) : | 641 make_color(), make_scalar(), mak e_scalar(), |
628 SkLightingImageFilter::CreateDistantLitSpecular(make_point(), | 642 make_image_filter().release())) |
629 make_color(), make_scalar(), make_scalar(), SkIntToScalar(R(10) ), | 643 : sk_sp<SkImageFilter>(SkLightingImageFilter::CreateDistantLitS pecular(make_point(), |
630 make_image_filter()); | 644 make_color(), make_scalar(), |
645 make_scalar(), SkIntToScalar(R(1 0)), | |
646 make_image_filter().release())); | |
631 break; | 647 break; |
632 case POINT_LIGHT: | 648 case POINT_LIGHT: |
633 filter = (R(2) == 1) ? | 649 filter = (R(2) == 1) |
634 SkLightingImageFilter::CreatePointLitDiffuse(make_point(), | 650 ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreatePointLitDif fuse(make_point(), |
635 make_color(), make_scalar(), make_scalar(), make_image_filter() ) : | 651 make_color(), make_scalar(), mak e_scalar(), |
636 SkLightingImageFilter::CreatePointLitSpecular(make_point(), | 652 make_image_filter().release())) |
637 make_color(), make_scalar(), make_scalar(), SkIntToScalar(R(10) ), | 653 : sk_sp<SkImageFilter>(SkLightingImageFilter::CreatePointLitSpe cular(make_point(), |
638 make_image_filter()); | 654 make_color(), make_scalar(), mak e_scalar(), |
655 SkIntToScalar(R(10)), | |
656 make_image_filter().release())); | |
639 break; | 657 break; |
640 case SPOT_LIGHT: | 658 case SPOT_LIGHT: |
641 filter = (R(2) == 1) ? | 659 filter = (R(2) == 1) |
642 SkLightingImageFilter::CreateSpotLitDiffuse(SkPoint3::Make(0, 0 , 0), | 660 ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreateSpotLitDiff use(SkPoint3::Make(0, 0, 0), |
643 make_point(), make_scalar(), make_scalar(), make_color(), | 661 make_point(), make_scalar(), ma ke_scalar(), |
644 make_scalar(), make_scalar(), make_image_filter()) : | 662 make_color(), make_scalar(), ma ke_scalar(), |
645 SkLightingImageFilter::CreateSpotLitSpecular(SkPoint3::Make(0, 0, 0), | 663 make_image_filter().release())) |
646 make_point(), make_scalar(), make_scalar(), make_color(), | 664 : sk_sp<SkImageFilter>(SkLightingImageFilter::CreateSpotLitSpec ular(SkPoint3::Make(0, 0, 0), |
647 make_scalar(), make_scalar(), SkIntToScalar(R(10)), make_image_ filter()); | 665 make_point(), make_scalar(), ma ke_scalar(), |
666 make_color(), make_scalar(), ma ke_scalar(), | |
667 SkIntToScalar(R(10)), make_imag e_filter().release())); | |
648 break; | 668 break; |
649 case NOISE: | 669 case NOISE: { |
650 { | |
651 sk_sp<SkShader> shader((R(2) == 1) ? | 670 sk_sp<SkShader> shader((R(2) == 1) ? |
652 SkPerlinNoiseShader::MakeFractalNoise( | 671 SkPerlinNoiseShader::MakeFractalNoise( |
653 make_scalar(true), make_scalar(true), R(10.0f), make_scalar()) : | 672 make_scalar(true), make_scalar(true), R(10.0f), make_scalar()) : |
654 SkPerlinNoiseShader::MakeTurbulence( | 673 SkPerlinNoiseShader::MakeTurbulence( |
655 make_scalar(true), make_scalar(true), R(10.0f), make_scalar())); | 674 make_scalar(true), make_scalar(true), R(10.0f), make_scalar())); |
656 SkPaint paint; | 675 SkPaint paint; |
657 paint.setShader(shader); | 676 paint.setShader(shader); |
658 SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), | 677 SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), |
659 SkIntToScalar(kBitmapSize)) ); | 678 SkIntToScalar(kBitmapSize)) ); |
660 filter = SkPaintImageFilter::Create(paint, &cropR); | 679 filter = SkPaintImageFilter::Make(paint, &cropR); |
680 break; | |
661 } | 681 } |
662 break; | |
663 case DROP_SHADOW: | 682 case DROP_SHADOW: |
664 filter = SkDropShadowImageFilter::Create(make_scalar(), make_scalar(), m ake_scalar(true), | 683 filter = sk_sp<SkImageFilter>(SkDropShadowImageFilter::Create(make_scala r(), |
665 make_scalar(true), make_color(), make_shadow_mode(), make_im age_filter(), | 684 make_scala r(), |
666 nullptr); | 685 make_scala r(true), |
686 make_scala r(true), | |
687 make_color (), | |
688 make_shado w_mode(), | |
689 make_image _filter().release(), | |
690 nullptr)); | |
667 break; | 691 break; |
668 case MORPHOLOGY: | 692 case MORPHOLOGY: |
669 if (R(2) == 1) { | 693 if (R(2) == 1) { |
670 filter = SkDilateImageFilter::Create(R(static_cast<float>(kBitmapSiz e)), | 694 filter = sk_sp<SkImageFilter>(SkDilateImageFilter::Create(R(static_c ast<float>(kBitmapSize)), |
671 R(static_cast<float>(kBitmapSize)), make_image_filter()); | 695 R(static_cast<float>(kBitmapSize )), |
696 make_image_filter().release())); | |
672 } else { | 697 } else { |
673 filter = SkErodeImageFilter::Create(R(static_cast<float>(kBitmapSize )), | 698 filter = sk_sp<SkImageFilter>(SkErodeImageFilter::Create(R(static_ca st<float>(kBitmapSize)), |
674 R(static_cast<float>(kBitmapSize)), make_image_filter()); | 699 R(static_cast<float>(kBitmapSize )), |
700 make_image_filter().release())); | |
675 } | 701 } |
676 break; | 702 break; |
677 case BITMAP: | 703 case BITMAP: { |
678 { | |
679 sk_sp<SkImage> image(SkImage::MakeFromBitmap(make_bitmap())); | 704 sk_sp<SkImage> image(SkImage::MakeFromBitmap(make_bitmap())); |
680 if (R(2) == 1) { | 705 if (R(2) == 1) { |
681 filter = SkImageSource::Create(image.get(), make_rect(), make_rect() , kHigh_SkFilterQuality); | 706 filter = sk_sp<SkImageFilter>(SkImageSource::Create(image.get(), |
707 make_rect(), | |
708 make_rect(), | |
709 kHigh_SkFilterQu ality)); | |
682 } else { | 710 } else { |
683 filter = SkImageSource::Create(image.get()); | 711 filter = sk_sp<SkImageFilter>(SkImageSource::Create(image.get())); |
684 } | 712 } |
713 break; | |
685 } | 714 } |
686 break; | |
687 case DISPLACE: | 715 case DISPLACE: |
688 filter = SkDisplacementMapEffect::Create(make_channel_selector_type(), | 716 filter = sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(make_chann el_selector_type(), |
689 make_channel_selector_type(), m ake_scalar(), | 717 make_chann el_selector_type(), |
690 make_image_filter(false), make_ image_filter()); | 718 make_scala r(), |
719 make_image _filter(false).release(), | |
720 make_image _filter().release())); | |
691 break; | 721 break; |
692 case TILE: | 722 case TILE: |
693 filter = SkTileImageFilter::Create(make_rect(), make_rect(), make_image_ filter(false)); | 723 filter = sk_sp<SkImageFilter>(SkTileImageFilter::Create(make_rect(), |
724 make_rect(), | |
725 make_image_filte r(false).release())); | |
694 break; | 726 break; |
695 case PICTURE: | 727 case PICTURE: { |
696 { | |
697 SkRTreeFactory factory; | 728 SkRTreeFactory factory; |
698 SkPictureRecorder recorder; | 729 SkPictureRecorder recorder; |
699 SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(kBitma pSize), | 730 SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(kBitma pSize), |
700 SkIntToScalar(kBitma pSize), | 731 SkIntToScalar(kBitma pSize), |
701 &factory, 0); | 732 &factory, 0); |
702 drawSomething(recordingCanvas); | 733 drawSomething(recordingCanvas); |
703 sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture()); | 734 sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture()); |
704 filter = SkPictureImageFilter::Make(pict, make_rect()).release(); | 735 filter = SkPictureImageFilter::Make(pict, make_rect()); |
736 break; | |
705 } | 737 } |
738 case PAINT: { | |
739 SkImageFilter::CropRect cropR(make_rect()); | |
740 filter = SkPaintImageFilter::Make(make_paint(), &cropR); | |
706 break; | 741 break; |
707 case PAINT: | |
708 { | |
709 SkImageFilter::CropRect cropR(make_rect()); | |
710 filter = SkPaintImageFilter::Create(make_paint(), &cropR); | |
711 } | 742 } |
712 default: | 743 default: |
713 break; | 744 break; |
714 } | 745 } |
715 return (filter || canBeNull) ? filter : make_image_filter(canBeNull); | 746 return (filter || canBeNull) ? filter : make_image_filter(canBeNull); |
716 } | 747 } |
717 | 748 |
718 static SkImageFilter* make_serialized_image_filter() { | 749 static SkImageFilter* make_serialized_image_filter() { |
719 SkAutoTUnref<SkImageFilter> filter(make_image_filter(false)); | 750 sk_sp<SkImageFilter> filter(make_image_filter(false)); |
720 SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(filter)); | 751 SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(filter.get())); |
721 const unsigned char* ptr = static_cast<const unsigned char*>(data->data()); | 752 const unsigned char* ptr = static_cast<const unsigned char*>(data->data()); |
722 size_t len = data->size(); | 753 size_t len = data->size(); |
723 #ifdef SK_ADD_RANDOM_BIT_FLIPS | 754 #ifdef SK_ADD_RANDOM_BIT_FLIPS |
724 unsigned char* p = const_cast<unsigned char*>(ptr); | 755 unsigned char* p = const_cast<unsigned char*>(ptr); |
725 for (size_t i = 0; i < len; ++i, ++p) { | 756 for (size_t i = 0; i < len; ++i, ++p) { |
726 if (R(250) == 1) { // 0.4% of the time, flip a bit or byte | 757 if (R(250) == 1) { // 0.4% of the time, flip a bit or byte |
727 if (R(10) == 1) { // Then 10% of the time, change a whole byte | 758 if (R(10) == 1) { // Then 10% of the time, change a whole byte |
728 switch(R(3)) { | 759 switch(R(3)) { |
729 case 0: | 760 case 0: |
730 *p ^= 0xFF; // Flip entire byte | 761 *p ^= 0xFF; // Flip entire byte |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
805 } | 836 } |
806 | 837 |
807 private: | 838 private: |
808 typedef SkView INHERITED; | 839 typedef SkView INHERITED; |
809 }; | 840 }; |
810 | 841 |
811 ////////////////////////////////////////////////////////////////////////////// | 842 ////////////////////////////////////////////////////////////////////////////// |
812 | 843 |
813 static SkView* MyFactory() { return new ImageFilterFuzzView; } | 844 static SkView* MyFactory() { return new ImageFilterFuzzView; } |
814 static SkViewRegister reg(MyFactory); | 845 static SkViewRegister reg(MyFactory); |
OLD | NEW |