1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurImageFilter.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDashPathEffect.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGradientShader.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRegion.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass DrawRegionModesGM : public skiagm::GM {
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    DrawRegionModesGM() {}
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkString onShortName() override {
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkString("drawregionmodes");
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkISize onISize() override {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkISize::Make(375, 500);
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onOnceBeforeDraw() override {
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fRegion.op( 50,  50, 100, 100, SkRegion::kUnion_Op);
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fRegion.op( 50, 100, 150, 150, SkRegion::kUnion_Op);
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(SkCanvas* canvas) override {
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->clear(SK_ColorGREEN);
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setStyle(SkPaint::kFill_Style);
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(0xFFFF0000);
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setAntiAlias(true);
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(-50.0f, 75.0f);
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->rotate(-45.0f);
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRegion(fRegion, paint);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(125.0f, 125.0f);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setImageFilter(SkBlurImageFilter::Make(5.0f, 5.0f, nullptr, nullptr));
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRegion(fRegion, paint);
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(-125.0f, 125.0f);
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setImageFilter(nullptr);
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect occluder = SkRect::MakeEmpty();
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5.0f, occluder, 0));
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRegion(fRegion, paint);
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(-125.0f, -125.0f);
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setMaskFilter(nullptr);
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setStyle(SkPaint::kStroke_Style);
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        float intervals[] = { 5.0f, 5.0f };
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 2.5f));
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRegion(fRegion, paint);
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->setMatrix(SkMatrix::I());
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(100, 325);
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setPathEffect(nullptr);
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setStyle(SkPaint::kFill_Style);
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPoint points[] = { SkPoint::Make(50.0f, 50.0f), SkPoint::Make(150.0f, 150.0f) };
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkColor colors[] = { SK_ColorBLUE, SK_ColorYELLOW };
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 2,
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                     SkShader::kClamp_TileMode));
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRegion(fRegion, paint);
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRegion fRegion;
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef skiagm::GM INHERITED;
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new DrawRegionModesGM; )
80