1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 10 #include "SkAvoidXfermode.h" 11 12 // This GM exercises how the avoid xfer mode interacts with partial coverage 13 class AvoidXfermode3GM : public skiagm::GM { 14 public: AvoidXfermode3GM()15 AvoidXfermode3GM() { } 16 17 protected: onShortName()18 SkString onShortName() override { 19 return SkString("avoidxfermode3"); 20 } 21 onISize()22 SkISize onISize() override { return SkISize::Make(128, 128); } 23 onDraw(SkCanvas * canvas)24 void onDraw(SkCanvas* canvas) override { 25 canvas->drawARGB(255, 0, 0, 0); 26 27 SkRect r = SkRect::MakeXYWH(16.5f, 16.5f, 96.0f, 96.0f); 28 29 SkPaint p0; 30 p0.setColor(SK_ColorWHITE); 31 p0.setAntiAlias(true); 32 33 canvas->drawRect(r, p0); 34 35 r = SkRect::MakeXYWH(3.5f, 3.5f, 59.0f, 59.0f); 36 37 // UL corner: replace white with green with a tight tolerance 38 SkPaint p1; 39 p1.setColor(SK_ColorGREEN); 40 p1.setAntiAlias(true); 41 p1.setXfermode(SkAvoidXfermode::Create(SK_ColorWHITE, 42 5, 43 SkAvoidXfermode::kTargetColor_Mode))->unref(); 44 45 canvas->drawRect(r, p1); 46 47 r.offsetTo(65.5f, 3.5f); 48 49 // UR corner: draw red everywhere except white with a tight tolerance 50 SkPaint p2; 51 p2.setColor(SK_ColorRED); 52 p2.setAntiAlias(true); 53 p2.setXfermode(SkAvoidXfermode::Create(SK_ColorWHITE, 54 250, 55 SkAvoidXfermode::kAvoidColor_Mode))->unref(); 56 57 canvas->drawRect(r, p2); 58 59 r.offsetTo(3.5f, 65.5f); 60 61 // LL corner: replace white with blue with a loose tolerance 62 SkPaint p3; 63 p3.setColor(SK_ColorBLUE); 64 p3.setAntiAlias(true); 65 p3.setXfermode(SkAvoidXfermode::Create(SK_ColorWHITE, 66 250, 67 SkAvoidXfermode::kTargetColor_Mode))->unref(); 68 69 canvas->drawRect(r, p3); 70 71 r.offsetTo(65.5f, 65.5f); 72 73 // LR corner: draw yellow everywhere except white with a loose tolerance 74 SkPaint p4; 75 p4.setColor(SK_ColorYELLOW); 76 p4.setAntiAlias(true); 77 p4.setXfermode(SkAvoidXfermode::Create(SK_ColorWHITE, 78 5, 79 SkAvoidXfermode::kAvoidColor_Mode))->unref(); 80 81 canvas->drawRect(r, p4); 82 } 83 84 private: 85 typedef GM INHERITED; 86 }; 87 88 ////////////////////////////////////////////////////////////////////////////// 89 90 DEF_GM(return new AvoidXfermode3GM;) 91