144df651ebefc284acc2f66425dff3ea0b0e14b36msarett/* 244df651ebefc284acc2f66425dff3ea0b0e14b36msarett * Copyright 2016 Google Inc. 344df651ebefc284acc2f66425dff3ea0b0e14b36msarett * 444df651ebefc284acc2f66425dff3ea0b0e14b36msarett * Use of this source code is governed by a BSD-style license that can be 544df651ebefc284acc2f66425dff3ea0b0e14b36msarett * found in the LICENSE file. 644df651ebefc284acc2f66425dff3ea0b0e14b36msarett */ 744df651ebefc284acc2f66425dff3ea0b0e14b36msarett 844df651ebefc284acc2f66425dff3ea0b0e14b36msarett#include "gm.h" 970e3e9adc57d765cbd1e86d8f54145e1b4a564f4Robert Phillips#include "SkBlurImageFilter.h" 1044df651ebefc284acc2f66425dff3ea0b0e14b36msarett#include "SkBlurMaskFilter.h" 1144df651ebefc284acc2f66425dff3ea0b0e14b36msarett#include "SkCanvas.h" 1244df651ebefc284acc2f66425dff3ea0b0e14b36msarett#include "SkDashPathEffect.h" 1344df651ebefc284acc2f66425dff3ea0b0e14b36msarett#include "SkGradientShader.h" 14267be7fbc38174652c750ec69d8dc1feaa72db0cMike Reed#include "SkRegion.h" 1544df651ebefc284acc2f66425dff3ea0b0e14b36msarett 1644df651ebefc284acc2f66425dff3ea0b0e14b36msarettclass DrawRegionModesGM : public skiagm::GM { 1744df651ebefc284acc2f66425dff3ea0b0e14b36msarettpublic: 1844df651ebefc284acc2f66425dff3ea0b0e14b36msarett DrawRegionModesGM() {} 1944df651ebefc284acc2f66425dff3ea0b0e14b36msarett 2044df651ebefc284acc2f66425dff3ea0b0e14b36msarettprotected: 2144df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkString onShortName() override { 2244df651ebefc284acc2f66425dff3ea0b0e14b36msarett return SkString("drawregionmodes"); 2344df651ebefc284acc2f66425dff3ea0b0e14b36msarett } 2444df651ebefc284acc2f66425dff3ea0b0e14b36msarett 2544df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkISize onISize() override { 2644df651ebefc284acc2f66425dff3ea0b0e14b36msarett return SkISize::Make(375, 500); 2744df651ebefc284acc2f66425dff3ea0b0e14b36msarett } 2844df651ebefc284acc2f66425dff3ea0b0e14b36msarett 2944df651ebefc284acc2f66425dff3ea0b0e14b36msarett void onOnceBeforeDraw() override { 3044df651ebefc284acc2f66425dff3ea0b0e14b36msarett fRegion.op( 50, 50, 100, 100, SkRegion::kUnion_Op); 3144df651ebefc284acc2f66425dff3ea0b0e14b36msarett fRegion.op( 50, 100, 150, 150, SkRegion::kUnion_Op); 3244df651ebefc284acc2f66425dff3ea0b0e14b36msarett } 3344df651ebefc284acc2f66425dff3ea0b0e14b36msarett 3444df651ebefc284acc2f66425dff3ea0b0e14b36msarett void onDraw(SkCanvas* canvas) override { 3544df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->clear(SK_ColorGREEN); 3644df651ebefc284acc2f66425dff3ea0b0e14b36msarett 3744df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkPaint paint; 3844df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setStyle(SkPaint::kFill_Style); 3944df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setColor(0xFFFF0000); 4044df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setAntiAlias(true); 4144df651ebefc284acc2f66425dff3ea0b0e14b36msarett 4244df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->translate(-50.0f, 75.0f); 4344df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->rotate(-45.0f); 4444df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->drawRegion(fRegion, paint); 4544df651ebefc284acc2f66425dff3ea0b0e14b36msarett 4644df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->translate(125.0f, 125.0f); 4770e3e9adc57d765cbd1e86d8f54145e1b4a564f4Robert Phillips paint.setImageFilter(SkBlurImageFilter::Make(5.0f, 5.0f, nullptr, nullptr)); 4844df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->drawRegion(fRegion, paint); 4944df651ebefc284acc2f66425dff3ea0b0e14b36msarett 5044df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->translate(-125.0f, 125.0f); 5144df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setImageFilter(nullptr); 5244df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkRect occluder = SkRect::MakeEmpty(); 5344df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5.0f, occluder, 0)); 5444df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->drawRegion(fRegion, paint); 5544df651ebefc284acc2f66425dff3ea0b0e14b36msarett 5644df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->translate(-125.0f, -125.0f); 5744df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setMaskFilter(nullptr); 5844df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setStyle(SkPaint::kStroke_Style); 5944df651ebefc284acc2f66425dff3ea0b0e14b36msarett float intervals[] = { 5.0f, 5.0f }; 6044df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 2.5f)); 6144df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->drawRegion(fRegion, paint); 6244df651ebefc284acc2f66425dff3ea0b0e14b36msarett 6344df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->setMatrix(SkMatrix::I()); 6444df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->translate(100, 325); 6544df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setPathEffect(nullptr); 6644df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setStyle(SkPaint::kFill_Style); 6744df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkPoint points[] = { SkPoint::Make(50.0f, 50.0f), SkPoint::Make(150.0f, 150.0f) }; 6844df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkColor colors[] = { SK_ColorBLUE, SK_ColorYELLOW }; 6944df651ebefc284acc2f66425dff3ea0b0e14b36msarett paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 2, 7044df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkShader::kClamp_TileMode)); 7144df651ebefc284acc2f66425dff3ea0b0e14b36msarett canvas->drawRegion(fRegion, paint); 7244df651ebefc284acc2f66425dff3ea0b0e14b36msarett } 7344df651ebefc284acc2f66425dff3ea0b0e14b36msarett 7444df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkRegion fRegion; 7544df651ebefc284acc2f66425dff3ea0b0e14b36msarett 7644df651ebefc284acc2f66425dff3ea0b0e14b36msarettprivate: 7744df651ebefc284acc2f66425dff3ea0b0e14b36msarett typedef skiagm::GM INHERITED; 7844df651ebefc284acc2f66425dff3ea0b0e14b36msarett}; 7944df651ebefc284acc2f66425dff3ea0b0e14b36msarettDEF_GM( return new DrawRegionModesGM; ) 80