1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 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#include "SampleCode.h"
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMask.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorMatrixFilter.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDiscretePathEffect.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkEmbossMaskFilter.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGradientShader.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPaint.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkView.h"
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot//#define COLOR 0xFFFF8844
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define COLOR 0xFF888888
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void paint_proc0(SkPaint*) {
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void paint_proc1(SkPaint* paint) {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint->setMaskFilter(SkBlurMaskFilter::Make(
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                kNormal_SkBlurStyle,
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                SkBlurMask::ConvertRadiusToSigma(2)));
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void paint_proc2(SkPaint* paint) {
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint->setMaskFilter(SkEmbossMaskFilter::Make(
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(1)),
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 64, 16 }));
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void paint_proc3(SkPaint* paint) {
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor colors[] = { SK_ColorRED, COLOR, SK_ColorBLUE };
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPoint pts[] = { { 3, 0 }, { 7, 5 } };
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint->setShader(SkGradientShader::MakeLinear(pts, colors, nullptr, SK_ARRAY_COUNT(colors),
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  SkShader::kMirror_TileMode));
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void paint_proc5(SkPaint* paint) {
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc3(paint);
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc2(paint);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef void (*PaintProc)(SkPaint*);
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotconst PaintProc gPaintProcs[] = {
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc0,
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc1,
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc2,
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc3,
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint_proc5,
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot///////////////////////////////////////////////////////////////////////////////
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass EffectsView : public SampleView {
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPath fPath;
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint fPaint[SK_ARRAY_COUNT(gPaintProcs)];
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    EffectsView() {
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        size_t i;
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        const float pts[] = {
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            0, 0,
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            10, 0,
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            10, 5,
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            20, -5,
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            10, -15,
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            10, -10,
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            0, -10
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        };
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fPath.moveTo(pts[0], pts[1]);
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (i = 2; i < SK_ARRAY_COUNT(pts); i += 2) {
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fPath.lineTo(pts[i], pts[i+1]);
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (i = 0; i < SK_ARRAY_COUNT(gPaintProcs); i++) {
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fPaint[i].setAntiAlias(true);
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fPaint[i].setColor(COLOR);
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            gPaintProcs[i](&fPaint[i]);
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkColorMatrix cm;
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        cm.setRotate(SkColorMatrix::kG_Axis, 180);
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        cm.setIdentity();
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        this->setBGColor(0xFFDDDDDD);
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // overrides from SkEventSink
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual bool onQuery(SkEvent* evt) {
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (SampleCode::TitleQ(*evt)) {
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SampleCode::TitleR(evt, "Effects");
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return true;
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->INHERITED::onQuery(evt);
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual void onDrawContent(SkCanvas* canvas) {
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->scale(3, 3);
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->translate(10, 30);
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (size_t i = 0; i < SK_ARRAY_COUNT(fPaint); i++) {
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawPath(fPath, fPaint[i]);
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->translate(32, 0);
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef SampleView INHERITED;
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot///////////////////////////////////////////////////////////////////////////////
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkView* MyFactory() { return new EffectsView; }
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkViewRegister reg(MyFactory);
121