diff options
author | robertphillips <robertphillips@google.com> | 2016-02-03 09:42:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-03 09:42:49 -0800 |
commit | afb188de27d047c8327ccc7b099203e8fc2a4129 (patch) | |
tree | 8133cb09373da0fe58629f4bcdcf99fd26e48fe4 /gm | |
parent | c5560bef14149f4c945a4536988aeba1a16adedc (diff) |
Add gpu implementation of SkAvoidXfermode
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1658623002
TBR=bsalomon@google.com
Committed: https://skia.googlesource.com/skia/+/15691a055db9b68c9b48f589e48d8a85888cf83f
Review URL: https://codereview.chromium.org/1658623002
Diffstat (limited to 'gm')
-rw-r--r-- | gm/avoidxfermode.cpp | 4 | ||||
-rw-r--r-- | gm/avoidxfermode2.cpp | 84 |
2 files changed, 86 insertions, 2 deletions
diff --git a/gm/avoidxfermode.cpp b/gm/avoidxfermode.cpp index 0d681cb143..a015b6bbe7 100644 --- a/gm/avoidxfermode.cpp +++ b/gm/avoidxfermode.cpp @@ -67,9 +67,9 @@ protected: r.offsetTo(0.0f, 64); - // LL corner: replace red with blue with a loose tolerance + // LL corner: replace red with transparent blue with a loose tolerance SkPaint p3; - p3.setColor(SK_ColorBLUE); + p3.setColor(0x7F0000FF); p3.setXfermode(SkAvoidXfermode::Create(SK_ColorRED, 250, SkAvoidXfermode::kTargetColor_Mode))->unref(); diff --git a/gm/avoidxfermode2.cpp b/gm/avoidxfermode2.cpp new file mode 100644 index 0000000000..039ed4017b --- /dev/null +++ b/gm/avoidxfermode2.cpp @@ -0,0 +1,84 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm.h" +#include "SkAvoidXfermode.h" + +class AvoidXfermode2GM : public skiagm::GM { +public: + AvoidXfermode2GM() { } + +protected: + SkString onShortName() override { + return SkString("avoidxfermode2"); + } + + SkISize onISize() override { return SkISize::Make(128, 128); } + + void onDraw(SkCanvas* canvas) override { + canvas->drawARGB(255, 0, 0, 0); + + SkRect r = SkRect::MakeXYWH(32, 32, 64, 64); + + SkPaint p0; + p0.setColor(SK_ColorGREEN); + p0.setAntiAlias(false); + + canvas->drawRect(r, p0); + + r = SkRect::MakeIWH(64, 64); + + // UL corner: replace the green with a tight tolerance + SkPaint p1; + p1.setColor(SK_ColorRED); + p1.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN, + 55, + SkAvoidXfermode::kTargetColor_Mode))->unref(); + + canvas->drawRect(r, p1); + + r.offsetTo(64, 0.0f); + + // UR corner: avoid the green with a tight tolerance + SkPaint p2; + p2.setColor(SK_ColorRED); + p2.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN, + 200, + SkAvoidXfermode::kAvoidColor_Mode))->unref(); + + canvas->drawRect(r, p2); + + r.offsetTo(0.0f, 64); + + // LL corner: replace the green with a loose tolerance + SkPaint p3; + p3.setColor(SK_ColorRED); + p3.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN, + 200, + SkAvoidXfermode::kTargetColor_Mode))->unref(); + + canvas->drawRect(r, p3); + + r.offsetTo(64, 64); + + // LR corner: avoid the green with a loose tolerance + SkPaint p4; + p4.setColor(SK_ColorRED); + p4.setXfermode(SkAvoidXfermode::Create(SK_ColorGREEN, + 55, + SkAvoidXfermode::kAvoidColor_Mode))->unref(); + + canvas->drawRect(r, p4); + } + +private: + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM(return new AvoidXfermode2GM;) |