From 1c04bf97b6245b55ac58c2f3902f8ca95ca91c3d Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Mon, 10 Oct 2011 12:57:12 +0000 Subject: implement region-ops git-svn-id: http://skia.googlecode.com/svn/trunk@2436 2bbb7eff-a529-9590-31e7-b0007b416f81 --- samplecode/SampleAAClip2.cpp | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'samplecode') diff --git a/samplecode/SampleAAClip2.cpp b/samplecode/SampleAAClip2.cpp index bdb3741704..b3d7b6d3c7 100644 --- a/samplecode/SampleAAClip2.cpp +++ b/samplecode/SampleAAClip2.cpp @@ -57,22 +57,19 @@ public: this->setBGColor(0xFFDDDDDD); } - void build_rgn(SkAAClip* clip, SkRegion::Op op) { - clip->setRect(fBase); -#if 0 - SkIRect r = fBase; - r.offset(75, 20); - rgn->op(r, SkRegion::kUnion_Op); -#endif - + static void setAAClip(SkAAClip* clip, const SkIRect& rect) { SkRect r; - r.set(fRect); + r.set(rect); SkPath path; - path.addOval(r); + path.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5)); + clip->setPath(path); + } + + void build_rgn(SkAAClip* clip, SkRegion::Op op) { + setAAClip(clip, fBase); + SkAAClip clip2; - clip2.setPath(path); - // hack - op = SkRegion::kIntersect_Op; + setAAClip(&clip2, fRect); clip->op(clip2, op); } @@ -101,6 +98,17 @@ protected: canvas->drawRect(r, paint); } + static void outer_frame(SkCanvas* canvas, const SkIRect& rect) { + SkRect r; + r.set(rect); + r.inset(-SK_ScalarHalf, -SK_ScalarHalf); + + SkPaint paint; + paint.setColor(SK_ColorGRAY); + paint.setStyle(SkPaint::kStroke_Style); + canvas->drawRect(r, paint); + } + void drawRgnOped(SkCanvas* canvas, SkRegion::Op op, SkColor color) { SkAAClip clip; @@ -115,6 +123,11 @@ protected: paint.setStyle(SkPaint::kStroke_Style); paint.setColor(color); paint_rgn(canvas, clip, paint); + + SkAAClip clip2(clip); + clip2.offset(0, 80); + outer_frame(canvas, clip2.getBounds()); + paint_rgn(canvas, clip2, paint); } virtual void onDrawContent(SkCanvas* canvas) { @@ -135,10 +148,6 @@ protected: textPaint.setTextSize(SK_Scalar1*24); this->drawOrig(canvas, false); - canvas->save(); - canvas->translate(SkIntToScalar(200), 0); - this->drawRgnOped(canvas, SkRegion::kUnion_Op, SK_ColorBLACK); - canvas->restore(); canvas->translate(0, SkIntToScalar(200)); -- cgit v1.2.3