diff options
author | senorblanco <senorblanco@google.com> | 2015-08-31 10:28:49 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-31 10:28:49 -0700 |
commit | 2aec4e946610e14788d471e4a08d5b5593779ec1 (patch) | |
tree | 200ca6c9c94def19dccd2f9b7660a2f95fc3c952 | |
parent | ae576b733dc427761bd254dcce5ae5a1c5d552df (diff) |
Add a GM for image filters applied to stroked primitives.
BUG=skia:3194
Review URL: https://codereview.chromium.org/1323573004
-rw-r--r-- | gm/imagefiltersstroked.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/gm/imagefiltersstroked.cpp b/gm/imagefiltersstroked.cpp new file mode 100644 index 0000000000..1b68a7e066 --- /dev/null +++ b/gm/imagefiltersstroked.cpp @@ -0,0 +1,112 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "sk_tool_utils.h" +#include "SkBlurImageFilter.h" +#include "SkColor.h" +#include "SkDropShadowImageFilter.h" +#include "SkOffsetImageFilter.h" +#include "SkScalar.h" +#include "gm.h" + +#define RESIZE_FACTOR_X SkIntToScalar(2) +#define RESIZE_FACTOR_Y SkIntToScalar(5) + +namespace skiagm { + +class ImageFiltersStrokedGM : public GM { +public: + ImageFiltersStrokedGM() { + this->setBGColor(0x00000000); + } + +protected: + + SkString onShortName() override { + return SkString("imagefiltersstroked"); + } + + SkISize onISize() override { + return SkISize::Make(860, 500); + } + + static void draw_circle(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { + canvas->drawCircle(r.centerX(), r.centerY(), + r.width() * 2 / 5, paint); + } + + static void draw_line(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { + canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, paint); + } + + static void draw_rect(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { + canvas->drawRect(r, paint); + } + + void onDraw(SkCanvas* canvas) override { + void (*drawProc[])(SkCanvas*, const SkRect&, const SkPaint&) = { + draw_line, draw_rect, draw_circle, + }; + + canvas->clear(SK_ColorBLACK); + + SkMatrix resizeMatrix; + resizeMatrix.setScale(RESIZE_FACTOR_X, RESIZE_FACTOR_Y); + + SkImageFilter* filters[] = { + SkBlurImageFilter::Create(5, 5), + SkDropShadowImageFilter::Create(10, 10, 3, 3, SK_ColorGREEN, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode), + SkOffsetImageFilter::Create(-16, 32), + SkImageFilter::CreateMatrixFilter(resizeMatrix, kNone_SkFilterQuality), + }; + + SkRect r = SkRect::MakeWH(64, 64); + SkScalar margin = 32; + SkPaint paint; + paint.setColor(SK_ColorWHITE); + paint.setAntiAlias(true); + paint.setStrokeWidth(10); + paint.setStyle(SkPaint::kStroke_Style); + paint.setTextSize(48); + paint.setTextAlign(SkPaint::kCenter_Align); + + for (size_t i = 0; i < SK_ARRAY_COUNT(drawProc); ++i) { + canvas->translate(0, margin); + canvas->save(); + for (size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { + canvas->translate(margin, 0); + canvas->save(); + if (2 == j) { + canvas->translate(16, -32); + } else if (3 == j) { + canvas->scale(SkScalarInvert(RESIZE_FACTOR_X), + SkScalarInvert(RESIZE_FACTOR_Y)); + } + paint.setImageFilter(filters[j]); + drawProc[i](canvas, r, paint); + canvas->restore(); + canvas->translate(r.width() + margin, 0); + } + canvas->restore(); + canvas->translate(0, r.height()); + } + + for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { + SkSafeUnref(filters[i]); + } + } + +private: + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM(return new ImageFiltersStrokedGM;) + +} |