1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2016 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkBlurTypes.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImageFilter.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMaskFilter.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPathEffect.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPoint.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRegion.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 20*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 21*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTileMode.h" 22*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkDashPathEffect.h" 23*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkGradientShader.h" 24*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkImageFilters.h" 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker class DrawRegionModesGM : public skiagm::GM { 27*c8dee2aaSAndroid Build Coastguard Worker public: DrawRegionModesGM()28*c8dee2aaSAndroid Build Coastguard Worker DrawRegionModesGM() {} 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker protected: getName() const31*c8dee2aaSAndroid Build Coastguard Worker SkString getName() const override { return SkString("drawregionmodes"); } 32*c8dee2aaSAndroid Build Coastguard Worker getISize()33*c8dee2aaSAndroid Build Coastguard Worker SkISize getISize() override { return SkISize::Make(375, 500); } 34*c8dee2aaSAndroid Build Coastguard Worker onOnceBeforeDraw()35*c8dee2aaSAndroid Build Coastguard Worker void onOnceBeforeDraw() override { 36*c8dee2aaSAndroid Build Coastguard Worker fRegion.op({50, 50, 100, 100}, SkRegion::kUnion_Op); 37*c8dee2aaSAndroid Build Coastguard Worker fRegion.op({50, 100, 150, 150}, SkRegion::kUnion_Op); 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker onDraw(SkCanvas * canvas)40*c8dee2aaSAndroid Build Coastguard Worker void onDraw(SkCanvas* canvas) override { 41*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(SK_ColorGREEN); 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 44*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kFill_Style); 45*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 46*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(true); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker canvas->save(); 49*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(-50.0f, 75.0f); 50*c8dee2aaSAndroid Build Coastguard Worker canvas->rotate(-45.0f); 51*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRegion(fRegion, paint); 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(125.0f, 125.0f); 54*c8dee2aaSAndroid Build Coastguard Worker paint.setImageFilter(SkImageFilters::Blur(5.0f, 5.0f, nullptr, nullptr)); 55*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRegion(fRegion, paint); 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(-125.0f, 125.0f); 58*c8dee2aaSAndroid Build Coastguard Worker paint.setImageFilter(nullptr); 59*c8dee2aaSAndroid Build Coastguard Worker paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 5.0f)); 60*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRegion(fRegion, paint); 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(-125.0f, -125.0f); 63*c8dee2aaSAndroid Build Coastguard Worker paint.setMaskFilter(nullptr); 64*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kStroke_Style); 65*c8dee2aaSAndroid Build Coastguard Worker float intervals[] = { 5.0f, 5.0f }; 66*c8dee2aaSAndroid Build Coastguard Worker paint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 2.5f)); 67*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRegion(fRegion, paint); 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker canvas->restore(); 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(100, 325); 72*c8dee2aaSAndroid Build Coastguard Worker paint.setPathEffect(nullptr); 73*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kFill_Style); 74*c8dee2aaSAndroid Build Coastguard Worker SkPoint points[] = { SkPoint::Make(50.0f, 50.0f), SkPoint::Make(150.0f, 150.0f) }; 75*c8dee2aaSAndroid Build Coastguard Worker SkColor colors[] = { SK_ColorBLUE, SK_ColorYELLOW }; 76*c8dee2aaSAndroid Build Coastguard Worker paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 2, 77*c8dee2aaSAndroid Build Coastguard Worker SkTileMode::kClamp)); 78*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRegion(fRegion, paint); 79*c8dee2aaSAndroid Build Coastguard Worker } 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker private: 82*c8dee2aaSAndroid Build Coastguard Worker SkRegion fRegion; 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = skiagm::GM; 85*c8dee2aaSAndroid Build Coastguard Worker }; 86*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new DrawRegionModesGM; ) 87