SampleAvoid.cpp revision 0db5a7fae596e4914250554402e4874c33fdf0d4
10db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SampleCode.h" 20db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkView.h" 30db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkCanvas.h" 40db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkGradientShader.h" 50db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#include "SkAvoidXfermode.h" 60db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 70db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com/////////////////////////////////////////////////////////////////////////////// 80db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 90db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comclass AvoidView : public SkView { 100db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader* fShader; 110db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 120db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com enum { 130db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com W = 480, 140db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com H = 320 150db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com }; 160db5a7fae596e4914250554402e4874c33fdf0d4reed@android.compublic: 170db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com AvoidView() { 180db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkColor colors[] = { SK_ColorRED, SK_ColorYELLOW, SK_ColorGREEN, SK_ColorCYAN, SK_ColorBLUE }; 190db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 200db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#if 0 210db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPoint pts[] = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 220db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader = SkGradientShader::CreateLinear(pts, colors, NULL, 230db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SK_ARRAY_COUNT(colors), 240db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader::kMirror_TileMode); 250db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#else 260db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPoint pts[] = { SkIntToScalar(W)/2, SkIntToScalar(H)/2 }; 270db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader = SkGradientShader::CreateRadial(pts[0], SkIntToScalar(H)/5, 280db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com colors, NULL, 290db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SK_ARRAY_COUNT(colors), 300db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkShader::kMirror_TileMode); 310db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com#endif 320db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 330db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 340db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com virtual ~AvoidView() { 350db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com fShader->unref(); 360db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 370db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 380db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comprotected: 390db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com virtual bool onQuery(SkEvent* evt) { 400db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com if (SampleCode::TitleQ(*evt)) { 410db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SampleCode::TitleR(evt, "AvoidXfermode"); 420db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return true; 430db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 440db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return this->INHERITED::onQuery(evt); 450db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 460db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 470db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com virtual void onDraw(SkCanvas* canvas) { 480db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawColor(SK_ColorWHITE); 490db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 500db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPaint paint; 510db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) }; 520db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 530db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->translate(r.width() / 6, r.height() / 6); 540db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 550db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setShader(fShader); 560db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(r, paint); 570db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 580db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com static const struct { 590db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com int fTolerance; 600db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkAvoidXfermode::Mode fMode; 610db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com float fDX, fDY; 620db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } gData[] = { 630db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 16, SkAvoidXfermode::kAvoidColor_Mode, 0, 0 }, 640db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 255-16, SkAvoidXfermode::kAvoidColor_Mode, 1, 0 }, 650db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 16, SkAvoidXfermode::kTargetColor_Mode, 0, 1 }, 660db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com { 255-16, SkAvoidXfermode::kTargetColor_Mode, 1, 1 }, 670db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com }; 680db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 690db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setShader(NULL); 700db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setColor(SK_ColorMAGENTA); 710db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 720db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkPaint frameP; 730db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com frameP.setStyle(SkPaint::kStroke_Style); 740db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 750db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gData); i++) { 760db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkAvoidXfermode mode(SK_ColorGREEN, gData[i].fTolerance, 770db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com gData[i].fMode); 780db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setXfermode(&mode); 790db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com int div = 3; 800db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com SkRect rr = { 0, 0, r.width()/div, r.height()/div }; 810db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com rr.offset(r.width()/4 - rr.width()/2, r.height()/4 - rr.height()/2); 820db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com rr.offset(r.width() * gData[i].fDX/2, r.height() * gData[i].fDY/2); 830db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(rr, paint); 840db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com paint.setXfermode(NULL); 850db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 860db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com canvas->drawRect(rr, frameP); 870db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 880db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com } 890db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 900db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comprivate: 910db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com typedef SkView INHERITED; 920db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com}; 930db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 940db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com////////////////////////////////////////////////////////////////////////////// 950db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 960db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comstatic SkView* MyFactory() { 970db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com return new AvoidView; 980db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com} 990db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 1000db5a7fae596e4914250554402e4874c33fdf0d4reed@android.comstatic SkViewRegister reg(MyFactory); 1010db5a7fae596e4914250554402e4874c33fdf0d4reed@android.com 102