1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 80db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SampleCode.h" 90db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkView.h" 100db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkCanvas.h" 110db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkGradientShader.h" 120db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkAvoidXfermode.h" 130db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 140db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com/////////////////////////////////////////////////////////////////////////////// 150db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 165fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.orgclass AvoidView : public SampleView { 170db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader* fShader; 180db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 190db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com enum { 200db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com W = 480, 210db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com H = 320 220db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com }; 230db5a7fae596e4914250554402e4874c33fdf0d4reed@android.compublic: 240db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com AvoidView() { 250db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkColor colors[] = { SK_ColorRED, SK_ColorYELLOW, SK_ColorGREEN, SK_ColorCYAN, SK_ColorBLUE }; 260db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 270db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#if 0 280db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPoint pts[] = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 290db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader = SkGradientShader::CreateLinear(pts, colors, NULL, 300db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SK_ARRAY_COUNT(colors), 310db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader::kMirror_TileMode); 320db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#else 3364cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org SkPoint pts[] = { { SkIntToScalar(W)/2, SkIntToScalar(H)/2 } }; 340db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader = SkGradientShader::CreateRadial(pts[0], SkIntToScalar(H)/5, 350db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com colors, NULL, 360db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SK_ARRAY_COUNT(colors), 370db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader::kMirror_TileMode); 380db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#endif 390db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 40ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 410db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com virtual ~AvoidView() { 420db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader->unref(); 430db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 440db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 450db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comprotected: 460db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com virtual bool onQuery(SkEvent* evt) { 470db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com if (SampleCode::TitleQ(*evt)) { 480db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SampleCode::TitleR(evt, "AvoidXfermode"); 490db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return true; 500db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 510db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return this->INHERITED::onQuery(evt); 520db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 530db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 545fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org virtual void onDrawContent(SkCanvas* canvas) { 550db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPaint paint; 560db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) }; 57ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 580db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->translate(r.width() / 6, r.height() / 6); 590db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 600db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setShader(fShader); 610db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(r, paint); 620db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 630db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com static const struct { 640db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com int fTolerance; 650db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkAvoidXfermode::Mode fMode; 660db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com float fDX, fDY; 670db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } gData[] = { 680db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 16, SkAvoidXfermode::kAvoidColor_Mode, 0, 0 }, 690db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 255-16, SkAvoidXfermode::kAvoidColor_Mode, 1, 0 }, 700db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 16, SkAvoidXfermode::kTargetColor_Mode, 0, 1 }, 710db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 255-16, SkAvoidXfermode::kTargetColor_Mode, 1, 1 }, 720db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com }; 730db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 740db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setShader(NULL); 750db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setColor(SK_ColorMAGENTA); 76ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 770db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPaint frameP; 780db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com frameP.setStyle(SkPaint::kStroke_Style); 790db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 800db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gData); i++) { 810a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org SkAutoTUnref<SkAvoidXfermode> mode(SkAvoidXfermode::Create( 820a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org SK_ColorGREEN, gData[i].fTolerance, gData[i].fMode)); 830a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org paint.setXfermode(mode); 840db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com int div = 3; 850db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkRect rr = { 0, 0, r.width()/div, r.height()/div }; 860db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com rr.offset(r.width()/4 - rr.width()/2, r.height()/4 - rr.height()/2); 870db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com rr.offset(r.width() * gData[i].fDX/2, r.height() * gData[i].fDY/2); 880db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(rr, paint); 890db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setXfermode(NULL); 900db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 910db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(rr, frameP); 920db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 930db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 94ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 950db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comprivate: 965fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org typedef SampleView INHERITED; 970db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com}; 980db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 990db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com////////////////////////////////////////////////////////////////////////////// 1000db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 1010db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comstatic SkView* MyFactory() { 1020db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return new AvoidView; 1030db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com} 1040db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 1050db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comstatic SkViewRegister reg(MyFactory); 106