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