| Index: gm/rrectclipdrawpaint.cpp
|
| diff --git a/gm/rrectclipdrawpaint.cpp b/gm/rrectclipdrawpaint.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3f5ded2be51f0ec728c12d1e2595a6835b617f0c
|
| --- /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();
|
| +}
|
|
|