SampleAAClip.cpp revision 045e62d715f5ee9b03deb5af3c750f8318096179
1322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 2322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com/* 3322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com * Copyright 2011 Google Inc. 4322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com * 5322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com * Use of this source code is governed by a BSD-style license that can be 6322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com * found in the LICENSE file. 7322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com */ 8322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 9322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#include "SampleCode.h" 10322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#include "SkView.h" 11322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#include "SkCanvas.h" 12322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#include "SkAAClip.h" 13322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 14322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comstatic void drawClip(SkCanvas* canvas, const SkAAClip& clip) { 15322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkMask mask; 16322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkBitmap bm; 17322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 18322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com clip.copyToMask(&mask); 19045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com SkAutoMaskFreeImage amfi(mask.fImage); 20045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com 21322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com bm.setConfig(SkBitmap::kA8_Config, mask.fBounds.width(), 22322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com mask.fBounds.height(), mask.fRowBytes); 23322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com bm.setPixels(mask.fImage); 24322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 25322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkPaint paint; 26322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->drawBitmap(bm, mask.fBounds.fLeft, mask.fBounds.fTop, &paint); 27322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com} 28322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 29322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comclass AAClipView : public SampleView { 30322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.compublic: 31322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com AAClipView() { 32322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com } 33322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 34322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comprotected: 35322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com // overrides from SkEventSink 36322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com virtual bool onQuery(SkEvent* evt) { 37322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com if (SampleCode::TitleQ(*evt)) { 38322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SampleCode::TitleR(evt, "AAClip"); 39322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com return true; 40322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com } 41322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com return this->INHERITED::onQuery(evt); 42322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com } 43322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 44322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com virtual void onDrawContent(SkCanvas* canvas) { 45322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#if 1 46322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkAAClip aaclip; 47322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkPath path; 48322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkRect bounds; 49322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 50322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com bounds.set(0, 0, 20, 20); 51322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com bounds.inset(SK_ScalarHalf, SK_ScalarHalf); 52322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 53322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com// path.addRect(bounds); 54322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com// path.addOval(bounds); 55322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com path.addRoundRect(bounds, 4, 4); 56322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com aaclip.setPath(path); 57322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->translate(30, 30); 58322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com drawClip(canvas, aaclip); 59322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 60322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkAAClip aaclip2; 61322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com path.offset(10, 10); 62322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com aaclip2.setPath(path); 63322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->translate(30, 0); 64322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com drawClip(canvas, aaclip2); 65322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 66322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkAAClip aaclip3; 67322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com aaclip3.op(aaclip, aaclip2, SkRegion::kIntersect_Op); 68322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->translate(30, 0); 69322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com drawClip(canvas, aaclip3); 70322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 71322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#endif 72322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 73322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#if 0 74322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkRect r; 75322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com r.set(0, 0, this->width(), this->height()); 76322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com r.inset(20, 20); 77322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->clipRect(r); 78322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 79322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkPath path; 80322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com path.addRect(r); 81322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com SkPaint paint; 82322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com paint.setAntiAlias(true); 83322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com paint.setColor(SK_ColorRED); 84322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com canvas->drawPath(path, paint); 85322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com#endif 86322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com } 87322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 88322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comprivate: 89322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com typedef SkView INHERITED; 90322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com}; 91322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 92322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com////////////////////////////////////////////////////////////////////////////// 93322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 94322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comstatic SkView* MyFactory() { return new AAClipView; } 95322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.comstatic SkViewRegister reg(MyFactory); 96322878907f6c5c5fb8abdbce7d348a3cd66ff2fareed@google.com 97