• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "SkAvoidXfermode.h"
10 
11 class AvoidXfermode2GM : public skiagm::GM {
12 public:
AvoidXfermode2GM()13     AvoidXfermode2GM() { }
14 
15 protected:
onShortName()16     SkString onShortName() override {
17         return SkString("avoidxfermode2");
18     }
19 
onISize()20     SkISize onISize() override { return SkISize::Make(128, 128); }
21 
onDraw(SkCanvas * canvas)22     void onDraw(SkCanvas* canvas) override {
23         canvas->drawARGB(255, 0, 0, 0);
24 
25         SkRect r = SkRect::MakeXYWH(32, 32, 64, 64);
26 
27         SkPaint p0;
28         p0.setColor(SK_ColorGREEN);
29         p0.setAntiAlias(false);
30 
31         canvas->drawRect(r, p0);
32 
33         r = SkRect::MakeIWH(64, 64);
34 
35         // UL corner: replace the green with a tight tolerance
36         SkPaint p1;
37         p1.setColor(SK_ColorRED);
38         p1.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN,
39                                                55,
40                                                SkAvoidXfermode::kTargetColor_Mode))->unref();
41 
42         canvas->drawRect(r, p1);
43 
44         r.offsetTo(64, 0.0f);
45 
46         // UR corner: avoid the green with a tight tolerance
47         SkPaint p2;
48         p2.setColor(SK_ColorRED);
49         p2.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN,
50                                                200,
51                                                SkAvoidXfermode::kAvoidColor_Mode))->unref();
52 
53         canvas->drawRect(r, p2);
54 
55         r.offsetTo(0.0f, 64);
56 
57         // LL corner: replace the green with a loose tolerance
58         SkPaint p3;
59         p3.setColor(SK_ColorRED);
60         p3.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN,
61                                                200,
62                                                SkAvoidXfermode::kTargetColor_Mode))->unref();
63 
64         canvas->drawRect(r, p3);
65 
66         r.offsetTo(64, 64);
67 
68         // LR corner: avoid the green with a loose tolerance
69         SkPaint p4;
70         p4.setColor(SK_ColorRED);
71         p4.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN,
72                                                55,
73                                                SkAvoidXfermode::kAvoidColor_Mode))->unref();
74 
75         canvas->drawRect(r, p4);
76     }
77 
78 private:
79     typedef GM INHERITED;
80 };
81 
82 //////////////////////////////////////////////////////////////////////////////
83 
84 DEF_GM(return new AvoidXfermode2GM;)
85