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