| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "gm.h" | 8 #include "gm.h" | 
| 9 #include "SkAlphaThresholdFilter.h" | 9 #include "SkAlphaThresholdFilter.h" | 
| 10 #include "SkRandom.h" | 10 #include "SkRandom.h" | 
|  | 11 #include "SkSurface.h" | 
| 11 | 12 | 
| 12 #define WIDTH 500 | 13 #define WIDTH 500 | 
| 13 #define HEIGHT 500 | 14 #define HEIGHT 500 | 
| 14 | 15 | 
|  | 16 namespace { | 
|  | 17 | 
|  | 18 void draw_rects(SkCanvas* canvas) { | 
|  | 19     SkPaint rectPaint; | 
|  | 20     rectPaint.setColor(0xFF0000FF); | 
|  | 21     canvas->drawRect(SkRect::MakeXYWH(0, 0, WIDTH / 2, HEIGHT / 2), rectPaint); | 
|  | 22     rectPaint.setColor(0xBFFF0000); | 
|  | 23     canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, 0, WIDTH / 2, HEIGHT / 2), rect
     Paint); | 
|  | 24     rectPaint.setColor(0x3F00FF00); | 
|  | 25     canvas->drawRect(SkRect::MakeXYWH(0, HEIGHT / 2, WIDTH / 2, HEIGHT / 2), rec
     tPaint); | 
|  | 26     rectPaint.setColor(0x00000000); | 
|  | 27     canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, HEIGHT / 2, WIDTH / 2, HEIGHT /
      2), rectPaint); | 
|  | 28 } | 
|  | 29 | 
|  | 30 SkPaint create_filter_paint() { | 
|  | 31     SkIRect rects[2]; | 
|  | 32     rects[0] = SkIRect::MakeXYWH(0, 150, WIDTH, HEIGHT - 300); | 
|  | 33     rects[1] = SkIRect::MakeXYWH(150, 0, WIDTH - 300, HEIGHT); | 
|  | 34     SkRegion region; | 
|  | 35     region.setRects(rects, 2); | 
|  | 36 | 
|  | 37     SkPaint paint; | 
|  | 38     paint.setImageFilter(SkAlphaThresholdFilter::Create(region, 0.2f, 0.7f))->un
     ref(); | 
|  | 39     return paint; | 
|  | 40 } | 
|  | 41 | 
|  | 42 }; | 
|  | 43 | 
| 15 namespace skiagm { | 44 namespace skiagm { | 
| 16 | 45 | 
| 17 class ImageAlphaThresholdGM : public GM { | 46 class ImageAlphaThresholdGM : public GM { | 
| 18 public: | 47 public: | 
| 19     ImageAlphaThresholdGM() { | 48     ImageAlphaThresholdGM() { | 
| 20         this->setBGColor(0xFFFFFFFF); | 49         this->setBGColor(0xFFFFFFFF); | 
| 21     } | 50     } | 
| 22 | 51 | 
| 23 protected: | 52 protected: | 
| 24 | 53 | 
| 25     SkString onShortName() override { | 54     SkString onShortName() override { | 
| 26         return SkString("imagealphathreshold"); | 55         return SkString("imagealphathreshold"); | 
| 27     } | 56     } | 
| 28 | 57 | 
| 29     SkISize onISize() override { | 58     SkISize onISize() override { | 
| 30         return SkISize::Make(WIDTH, HEIGHT); | 59         return SkISize::Make(WIDTH, HEIGHT); | 
| 31     } | 60     } | 
| 32 | 61 | 
| 33     void onDraw(SkCanvas* canvas) override { | 62     void onDraw(SkCanvas* canvas) override { | 
| 34         SkIRect rects[2]; |  | 
| 35         rects[0] = SkIRect::MakeXYWH(0, 150, WIDTH, HEIGHT - 300); |  | 
| 36         rects[1] = SkIRect::MakeXYWH(150, 0, WIDTH - 300, HEIGHT); |  | 
| 37         SkRegion region; |  | 
| 38         region.setRects(rects, 2); |  | 
| 39 |  | 
| 40         SkMatrix matrix; | 63         SkMatrix matrix; | 
| 41         matrix.reset(); | 64         matrix.reset(); | 
| 42         matrix.setTranslate(WIDTH * .1f, HEIGHT * .1f); | 65         matrix.setTranslate(WIDTH * .1f, HEIGHT * .1f); | 
| 43         matrix.postScale(.8f, .8f); | 66         matrix.postScale(.8f, .8f); | 
| 44 | 67 | 
| 45         canvas->concat(matrix); | 68         canvas->concat(matrix); | 
| 46 | 69 | 
| 47         SkPaint paint; | 70         SkPaint paint = create_filter_paint(); | 
| 48         paint.setImageFilter( |  | 
| 49             SkAlphaThresholdFilter::Create(region, 0.2f, 0.7f))->unref(); |  | 
| 50         canvas->saveLayer(nullptr, &paint); | 71         canvas->saveLayer(nullptr, &paint); | 
| 51         paint.setAntiAlias(true); | 72         draw_rects(canvas); | 
| 52 |  | 
| 53         SkPaint rect_paint; |  | 
| 54         rect_paint.setColor(0xFF0000FF); |  | 
| 55         canvas->drawRect(SkRect::MakeXYWH(0, 0, WIDTH / 2, HEIGHT / 2), |  | 
| 56                          rect_paint); |  | 
| 57         rect_paint.setColor(0xBFFF0000); |  | 
| 58         canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, 0, WIDTH / 2, HEIGHT / 2), |  | 
| 59                          rect_paint); |  | 
| 60         rect_paint.setColor(0x3F00FF00); |  | 
| 61         canvas->drawRect(SkRect::MakeXYWH(0, HEIGHT / 2, WIDTH / 2, HEIGHT / 2), |  | 
| 62                          rect_paint); |  | 
| 63         rect_paint.setColor(0x00000000); |  | 
| 64         canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, HEIGHT / 2, WIDTH / 2, HEIG
     HT / 2), |  | 
| 65                          rect_paint); |  | 
| 66 | 73 | 
| 67         canvas->restore(); | 74         canvas->restore(); | 
| 68     } | 75     } | 
| 69 | 76 | 
| 70 private: | 77 private: | 
| 71     typedef GM INHERITED; | 78     typedef GM INHERITED; | 
| 72 }; | 79 }; | 
| 73 | 80 | 
|  | 81 class ImageAlphaThresholdSurfaceGM : public GM { | 
|  | 82 public: | 
|  | 83     ImageAlphaThresholdSurfaceGM() { | 
|  | 84         this->setBGColor(0xFFFFFFFF); | 
|  | 85     } | 
|  | 86 | 
|  | 87 protected: | 
|  | 88     SkString onShortName() override { | 
|  | 89         return SkString("imagealphathreshold_surface"); | 
|  | 90     } | 
|  | 91 | 
|  | 92     SkISize onISize() override { | 
|  | 93         return SkISize::Make(WIDTH, HEIGHT); | 
|  | 94     } | 
|  | 95 | 
|  | 96     void onDraw(SkCanvas* canvas) override { | 
|  | 97         SkImageInfo info = SkImageInfo::MakeN32(WIDTH, HEIGHT, kOpaque_SkAlphaTy
     pe); | 
|  | 98         SkAutoTUnref<SkSurface> surface(canvas->newSurface(info)); | 
|  | 99         if (nullptr == surface) { | 
|  | 100             surface.reset(SkSurface::NewRaster(info)); | 
|  | 101         } | 
|  | 102         surface->getCanvas()->clear(SK_ColorWHITE); | 
|  | 103         draw_rects(surface->getCanvas()); | 
|  | 104 | 
|  | 105         SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); | 
|  | 106         SkPaint paint = create_filter_paint(); | 
|  | 107         canvas->clipRect(SkRect::MakeLTRB(100, 100, WIDTH - 100, HEIGHT - 100)); | 
|  | 108         canvas->drawImage(image, 0, 0, &paint); | 
|  | 109     } | 
|  | 110 | 
|  | 111 private: | 
|  | 112     typedef GM INHERITED; | 
|  | 113 }; | 
|  | 114 | 
| 74 ////////////////////////////////////////////////////////////////////////////// | 115 ////////////////////////////////////////////////////////////////////////////// | 
| 75 | 116 | 
| 76 static GM* MyFactory(void*) { return new ImageAlphaThresholdGM; } | 117 DEF_GM(return new ImageAlphaThresholdGM();) | 
| 77 static GMRegistry reg(MyFactory); | 118 DEF_GM(return new ImageAlphaThresholdSurfaceGM();) | 
| 78 | 119 | 
| 79 } | 120 } | 
| OLD | NEW | 
|---|