12aec4e946610e14788d471e4a08d5b5593779ec1senorblanco/* 22aec4e946610e14788d471e4a08d5b5593779ec1senorblanco * Copyright 2015 Google Inc. 32aec4e946610e14788d471e4a08d5b5593779ec1senorblanco * 42aec4e946610e14788d471e4a08d5b5593779ec1senorblanco * Use of this source code is governed by a BSD-style license that can be 52aec4e946610e14788d471e4a08d5b5593779ec1senorblanco * found in the LICENSE file. 62aec4e946610e14788d471e4a08d5b5593779ec1senorblanco */ 72aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 82aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "SkBlurImageFilter.h" 92aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "SkColor.h" 102aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "SkDropShadowImageFilter.h" 112aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "SkOffsetImageFilter.h" 122aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "SkScalar.h" 132aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#include "gm.h" 142aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 152aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#define RESIZE_FACTOR_X SkIntToScalar(2) 162aec4e946610e14788d471e4a08d5b5593779ec1senorblanco#define RESIZE_FACTOR_Y SkIntToScalar(5) 172aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 182aec4e946610e14788d471e4a08d5b5593779ec1senorblanconamespace skiagm { 192aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 202aec4e946610e14788d471e4a08d5b5593779ec1senorblancoclass ImageFiltersStrokedGM : public GM { 212aec4e946610e14788d471e4a08d5b5593779ec1senorblancopublic: 222aec4e946610e14788d471e4a08d5b5593779ec1senorblanco ImageFiltersStrokedGM() { 232aec4e946610e14788d471e4a08d5b5593779ec1senorblanco this->setBGColor(0x00000000); 242aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 252aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 262aec4e946610e14788d471e4a08d5b5593779ec1senorblancoprotected: 272aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 282aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkString onShortName() override { 292aec4e946610e14788d471e4a08d5b5593779ec1senorblanco return SkString("imagefiltersstroked"); 302aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 312aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 322aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkISize onISize() override { 332aec4e946610e14788d471e4a08d5b5593779ec1senorblanco return SkISize::Make(860, 500); 342aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 352aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 362aec4e946610e14788d471e4a08d5b5593779ec1senorblanco static void draw_circle(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { 372aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->drawCircle(r.centerX(), r.centerY(), 382aec4e946610e14788d471e4a08d5b5593779ec1senorblanco r.width() * 2 / 5, paint); 392aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 402aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 412aec4e946610e14788d471e4a08d5b5593779ec1senorblanco static void draw_line(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { 422aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, paint); 432aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 442aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 452aec4e946610e14788d471e4a08d5b5593779ec1senorblanco static void draw_rect(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) { 462aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->drawRect(r, paint); 472aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 482aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 492aec4e946610e14788d471e4a08d5b5593779ec1senorblanco void onDraw(SkCanvas* canvas) override { 502aec4e946610e14788d471e4a08d5b5593779ec1senorblanco void (*drawProc[])(SkCanvas*, const SkRect&, const SkPaint&) = { 512aec4e946610e14788d471e4a08d5b5593779ec1senorblanco draw_line, draw_rect, draw_circle, 522aec4e946610e14788d471e4a08d5b5593779ec1senorblanco }; 532aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 542aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->clear(SK_ColorBLACK); 552aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 562aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkMatrix resizeMatrix; 572aec4e946610e14788d471e4a08d5b5593779ec1senorblanco resizeMatrix.setScale(RESIZE_FACTOR_X, RESIZE_FACTOR_Y); 582aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 59ae8c933ca89315c1256bcf23749b5ee5cbc0d53crobertphillips sk_sp<SkImageFilter> filters[] = { 60ae8c933ca89315c1256bcf23749b5ee5cbc0d53crobertphillips SkBlurImageFilter::Make(5, 5, nullptr), 61c416912da4840af0c49bd8cdcf00044ed39500f6robertphillips SkDropShadowImageFilter::Make(10, 10, 3, 3, SK_ColorGREEN, 62c416912da4840af0c49bd8cdcf00044ed39500f6robertphillips SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, 63c416912da4840af0c49bd8cdcf00044ed39500f6robertphillips nullptr), 64ae8c933ca89315c1256bcf23749b5ee5cbc0d53crobertphillips SkOffsetImageFilter::Make(-16, 32, nullptr), 65ae8c933ca89315c1256bcf23749b5ee5cbc0d53crobertphillips SkImageFilter::MakeMatrixFilter(resizeMatrix, kNone_SkFilterQuality, nullptr), 662aec4e946610e14788d471e4a08d5b5593779ec1senorblanco }; 672aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 682aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkRect r = SkRect::MakeWH(64, 64); 692aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkScalar margin = 32; 702aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkPaint paint; 712aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setColor(SK_ColorWHITE); 722aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setAntiAlias(true); 732aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setStrokeWidth(10); 742aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setStyle(SkPaint::kStroke_Style); 752aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setTextSize(48); 762aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setTextAlign(SkPaint::kCenter_Align); 772aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 782aec4e946610e14788d471e4a08d5b5593779ec1senorblanco for (size_t i = 0; i < SK_ARRAY_COUNT(drawProc); ++i) { 792aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->translate(0, margin); 802aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->save(); 812aec4e946610e14788d471e4a08d5b5593779ec1senorblanco for (size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { 822aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->translate(margin, 0); 832aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->save(); 842aec4e946610e14788d471e4a08d5b5593779ec1senorblanco if (2 == j) { 852aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->translate(16, -32); 862aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } else if (3 == j) { 872aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->scale(SkScalarInvert(RESIZE_FACTOR_X), 882aec4e946610e14788d471e4a08d5b5593779ec1senorblanco SkScalarInvert(RESIZE_FACTOR_Y)); 892aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 902aec4e946610e14788d471e4a08d5b5593779ec1senorblanco paint.setImageFilter(filters[j]); 912aec4e946610e14788d471e4a08d5b5593779ec1senorblanco drawProc[i](canvas, r, paint); 922aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->restore(); 932aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->translate(r.width() + margin, 0); 942aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 952aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->restore(); 962aec4e946610e14788d471e4a08d5b5593779ec1senorblanco canvas->translate(0, r.height()); 972aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 982aec4e946610e14788d471e4a08d5b5593779ec1senorblanco } 992aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 1002aec4e946610e14788d471e4a08d5b5593779ec1senorblancoprivate: 1012aec4e946610e14788d471e4a08d5b5593779ec1senorblanco typedef GM INHERITED; 1022aec4e946610e14788d471e4a08d5b5593779ec1senorblanco}; 1032aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 1042aec4e946610e14788d471e4a08d5b5593779ec1senorblanco////////////////////////////////////////////////////////////////////////////// 1052aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 1062aec4e946610e14788d471e4a08d5b5593779ec1senorblancoDEF_GM(return new ImageFiltersStrokedGM;) 1072aec4e946610e14788d471e4a08d5b5593779ec1senorblanco 1082aec4e946610e14788d471e4a08d5b5593779ec1senorblanco} 109