diff options
author | bsalomon <bsalomon@google.com> | 2016-08-26 10:48:19 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-26 10:48:19 -0700 |
commit | cb31e51d9355adb1d25ce3e121cde21b05ecf63e (patch) | |
tree | 7a99387e384262d2c33f68301a42dc7911d4b3cc /gm/rrectclipdrawpaint.cpp | |
parent | e3031b607c7816980d13a3805382afb403fdfa04 (diff) |
Converts a drawPaint through a rrect clip to a drawRRect in GrDrawContext.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2271053004
Review-Url: https://codereview.chromium.org/2271053004
Diffstat (limited to 'gm/rrectclipdrawpaint.cpp')
-rw-r--r-- | gm/rrectclipdrawpaint.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gm/rrectclipdrawpaint.cpp b/gm/rrectclipdrawpaint.cpp new file mode 100644 index 0000000000..3f5ded2be5 --- /dev/null +++ b/gm/rrectclipdrawpaint.cpp @@ -0,0 +1,53 @@ +/* + * 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 "SkPath.h" +#include "SkGradientShader.h" + +// Exercises code in GrDrawContext that attempts to replace a rrect clip/draw paint with draw rrect. +DEF_SIMPLE_GM(rrect_clip_draw_paint, canvas, 256, 256) { + SkRRect rrect = SkRRect::MakeRectXY(SkRect::MakeXYWH(10.f, 10.f, 236.f, 236.f), 30.f, 40.f); + + SkPaint p; + p.setColor(SK_ColorRED); + + SkMatrix zoomOut; + zoomOut.setScale(0.7f, 0.7f, 128.f, 128.f); + + const SkRect layerRect = SkRect::MakeWH(256.f, 256.f); + canvas->saveLayer(layerRect, nullptr); + canvas->clipRRect(rrect, SkRegion::kIntersect_Op, true); + canvas->drawPaint(p); + canvas->restore(); + + canvas->concat(zoomOut); + p.setColor(SK_ColorBLUE); + canvas->saveLayer(layerRect, nullptr); + canvas->clipRRect(rrect, SkRegion::kIntersect_Op, false); + canvas->drawPaint(p); + canvas->restore(); + + static constexpr SkPoint kPts[] = {{0.f, 0.f}, {256.f, 256.f}}; + static constexpr SkColor kColors1[] = {SK_ColorCYAN, SK_ColorGREEN}; + p.setShader(SkGradientShader::MakeLinear(kPts, kColors1, nullptr, 2, + SkShader::kClamp_TileMode)); + canvas->concat(zoomOut); + canvas->saveLayer(layerRect, nullptr); + canvas->clipRRect(rrect, SkRegion::kIntersect_Op, true); + canvas->drawPaint(p); + canvas->restore(); + + static constexpr SkColor kColors2[] = {SK_ColorMAGENTA, SK_ColorGRAY}; + p.setShader(SkGradientShader::MakeRadial({128.f, 128.f}, 128.f, kColors2, nullptr, 2, + SkShader::kClamp_TileMode)); + canvas->concat(zoomOut); + canvas->saveLayer(layerRect, nullptr); + canvas->clipRRect(rrect, SkRegion::kIntersect_Op, false); + canvas->drawPaint(p); + canvas->restore(); +} |