add mask for paint-bits to layerdrawlooper
change addLayer variants that don't respect paint changes to return void
git-svn-id: http://skia.googlecode.com/svn/trunk@1123 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleDraw.cpp b/samplecode/SampleDraw.cpp
index 776d6da..d34403e 100644
--- a/samplecode/SampleDraw.cpp
+++ b/samplecode/SampleDraw.cpp
@@ -4,6 +4,55 @@
#include "SkGraphics.h"
#include "SkRandom.h"
+static void test_strokerect(SkCanvas* canvas, const SkRect& r) {
+ SkPaint p;
+
+ p.setAntiAlias(true);
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(4);
+
+ canvas->drawRect(r, p);
+
+ SkPath path;
+ SkRect r2(r);
+ r2.offset(18, 0);
+ path.addRect(r2);
+
+ canvas->drawPath(path, p);
+}
+
+static void test_strokerect(SkCanvas* canvas) {
+ canvas->drawColor(SK_ColorWHITE);
+
+ SkRect r;
+
+ r.set(10, 10, 14, 14);
+ r.offset(0.25, 0.3333);
+ test_strokerect(canvas, r);
+ canvas->translate(0, 20);
+
+ r.set(10, 10, 14.5f, 14.5f);
+ r.offset(0.25, 0.3333);
+ test_strokerect(canvas, r);
+ canvas->translate(0, 20);
+
+ r.set(10, 10, 14.5f, 20);
+ r.offset(0.25, 0.3333);
+ test_strokerect(canvas, r);
+ canvas->translate(0, 20);
+
+ r.set(10, 10, 20, 14.5f);
+ r.offset(0.25, 0.3333);
+ test_strokerect(canvas, r);
+ canvas->translate(0, 20);
+
+ r.set(10, 10, 20, 20);
+ r.offset(0.25, 0.3333);
+ test_strokerect(canvas, r);
+ canvas->translate(0, 20);
+
+}
+
class Draw : public SkRefCnt {
public:
Draw() : fFlags(0) {}
@@ -83,7 +132,8 @@
enum Style {
kRect_Style,
kOval_Style,
- kRRect_Style
+ kRRect_Style,
+ kFrame_Style
};
RDraw(const SkRect& r, Style s) : fRect(r), fStyle(s) {}
@@ -116,6 +166,15 @@
canvas->drawRoundRect(fRect, rx, ry, fPaint);
break;
}
+ case kFrame_Style: {
+ SkPath path;
+ path.addOval(fRect, SkPath::kCW_Direction);
+ SkRect r = fRect;
+ r.inset(fRect.width()/6, 0);
+ path.addOval(r, SkPath::kCCW_Direction);
+ canvas->drawPath(path, fPaint);
+ break;
+ }
}
}
@@ -158,7 +217,8 @@
r.set(p0.x(), p0.y(), p1.x(), p1.y());
r.sort();
- RDraw* d = new RDraw(r, RDraw::kRRect_Style);
+// RDraw* d = new RDraw(r, RDraw::kRRect_Style);
+ RDraw* d = new RDraw(r, RDraw::kFrame_Style);
d->setPaint(this->getPaint());
return d;
}
@@ -217,6 +277,8 @@
virtual void onDraw(SkCanvas* canvas) {
this->drawBG(canvas);
+ // test_strokerect(canvas);
+ // return;
for (Draw** iter = fList.begin(); iter < fList.end(); iter++) {
(*iter)->draw(canvas);
diff --git a/samplecode/SampleDrawLooper.cpp b/samplecode/SampleDrawLooper.cpp
index 7cf53b2..e1b63a1 100644
--- a/samplecode/SampleDrawLooper.cpp
+++ b/samplecode/SampleDrawLooper.cpp
@@ -30,14 +30,18 @@
fLooper = new SkLayerDrawLooper;
+ SkLayerDrawLooper::LayerInfo info;
+ info.fFlagsMask = SkPaint::kAntiAlias_Flag;
+ info.fPaintBits = SkLayerDrawLooper::kStyle_Bit | SkLayerDrawLooper::kMaskFilter_Bit;
+ info.fColorMode = SkXfermode::kSrc_Mode;
+
for (int i = 0; i < SK_ARRAY_COUNT(gParams); i++) {
- SkPaint* paint = fLooper->addLayer(gParams[i].fOffset,
- gParams[i].fOffset);
+ info.fOffset.set(gParams[i].fOffset, gParams[i].fOffset);
+ SkPaint* paint = fLooper->addLayer(info);
paint->setAntiAlias(true);
paint->setColor(gParams[i].fColor);
paint->setStyle(gParams[i].fStyle);
paint->setStrokeWidth(gParams[i].fWidth);
- paint->setTextSize(SkIntToScalar(72));
if (gParams[i].fBlur > 0) {
SkMaskFilter* mf = SkBlurMaskFilter::Create(SkIntToScalar(gParams[i].fBlur),
SkBlurMaskFilter::kNormal_BlurStyle);
@@ -69,6 +73,7 @@
this->drawBG(canvas);
SkPaint paint;
+ paint.setTextSize(SkIntToScalar(72));
paint.setLooper(fLooper);
canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),