aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-24 12:19:46 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-24 12:19:46 +0000
commit045e62d715f5ee9b03deb5af3c750f8318096179 (patch)
treee16aed890a3a96aff73f66b13de3b079cd638df3 /samplecode
parent5a0920c22c0dfc62109efdda08ed7e150806e2ff (diff)
enable soft clipping (yikes)
git-svn-id: http://skia.googlecode.com/svn/trunk@2515 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode')
-rw-r--r--samplecode/SampleAAClip.cpp2
-rw-r--r--samplecode/SampleAAClip2.cpp4
-rw-r--r--samplecode/SampleApp.cpp2
-rw-r--r--samplecode/SampleClip.cpp88
-rw-r--r--samplecode/SampleFuzz.cpp1
-rw-r--r--samplecode/SampleXfermodesBlur.cpp25
6 files changed, 101 insertions, 21 deletions
diff --git a/samplecode/SampleAAClip.cpp b/samplecode/SampleAAClip.cpp
index dd6af09253..93a77cb4d1 100644
--- a/samplecode/SampleAAClip.cpp
+++ b/samplecode/SampleAAClip.cpp
@@ -16,6 +16,8 @@ static void drawClip(SkCanvas* canvas, const SkAAClip& clip) {
SkBitmap bm;
clip.copyToMask(&mask);
+ SkAutoMaskFreeImage amfi(mask.fImage);
+
bm.setConfig(SkBitmap::kA8_Config, mask.fBounds.width(),
mask.fBounds.height(), mask.fRowBytes);
bm.setPixels(mask.fImage);
diff --git a/samplecode/SampleAAClip2.cpp b/samplecode/SampleAAClip2.cpp
index 6d854e80ca..e8f5a1490a 100644
--- a/samplecode/SampleAAClip2.cpp
+++ b/samplecode/SampleAAClip2.cpp
@@ -26,6 +26,8 @@ static void drawClip(SkCanvas* canvas, const SkAAClip& clip) {
SkBitmap bm;
clip.copyToMask(&mask);
+ SkAutoMaskFreeImage amfi(mask.fImage);
+
bm.setConfig(SkBitmap::kA8_Config, mask.fBounds.width(),
mask.fBounds.height(), mask.fRowBytes);
bm.setPixels(mask.fImage);
@@ -40,6 +42,8 @@ static void paint_rgn(SkCanvas* canvas, const SkAAClip& clip,
SkBitmap bm;
clip.copyToMask(&mask);
+ SkAutoMaskFreeImage amfi(mask.fImage);
+
bm.setConfig(SkBitmap::kA8_Config, mask.fBounds.width(),
mask.fBounds.height(), mask.fRowBytes);
bm.setPixels(mask.fImage);
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index bed54596b3..740047e534 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -893,7 +893,7 @@ SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) {
if (fUseClip) {
canvas->drawColor(0xFFFF88FF);
- canvas->clipPath(fClipPath);
+ canvas->clipPath(fClipPath, SkRegion::kIntersect_Op, true);
}
return canvas;
diff --git a/samplecode/SampleClip.cpp b/samplecode/SampleClip.cpp
index 87ff0b6277..570f0b98f4 100644
--- a/samplecode/SampleClip.cpp
+++ b/samplecode/SampleClip.cpp
@@ -13,58 +13,106 @@
#include "SkPaint.h"
#include "SkRandom.h"
-#define W 270
+#define W 150
#define H 200
-static void show_text(SkCanvas* canvas) {
+static void show_text(SkCanvas* canvas, bool doAA) {
SkRandom rand;
SkPaint paint;
- paint.setAntiAlias(true);
+ paint.setAntiAlias(doAA);
+ paint.setLCDRenderText(true);
paint.setTextSize(SkIntToScalar(20));
- for (int i = 0; i < 300; ++i) {
+ for (int i = 0; i < 200; ++i) {
paint.setColor((SK_A32_MASK << SK_A32_SHIFT) | rand.nextU());
canvas->drawText("Hamburgefons", 12,
- rand.nextSScalar1() * W, rand.nextSScalar1() * H,
+ rand.nextSScalar1() * W, rand.nextSScalar1() * H + 20,
paint);
}
}
-static void show_geo(SkCanvas* canvas) {
+static bool valid(int i) {
+ return i < 15 && i > 7;
+}
+
+static void show_fill(SkCanvas* canvas, bool doAA) {
SkRandom rand;
SkPaint paint;
- paint.setAntiAlias(true);
+ paint.setAntiAlias(doAA);
- for (int i = 0; i < 30; ++i) {
+ for (int i = 0; i < 50; ++i) {
SkRect r;
SkPath p;
-
+
r.setXYWH(rand.nextSScalar1() * W, rand.nextSScalar1() * H,
rand.nextUScalar1() * W, rand.nextUScalar1() * H);
- paint.setStyle(SkPaint::kFill_Style);
paint.setColor(rand.nextU());
canvas->drawRect(r, paint);
r.setXYWH(rand.nextSScalar1() * W, rand.nextSScalar1() * H,
rand.nextUScalar1() * W, rand.nextUScalar1() * H);
- paint.setStyle(SkPaint::kStroke_Style);
+ paint.setColor(rand.nextU());
+ p.addOval(r);
+ canvas->drawPath(p, paint);
+ }
+}
+
+static SkScalar randRange(SkRandom& rand, SkScalar min, SkScalar max) {
+ SkASSERT(min <= max);
+ return min + SkScalarMul(rand.nextUScalar1(), max - min);
+}
+
+static void show_stroke(SkCanvas* canvas, bool doAA, SkScalar strokeWidth, int n) {
+ SkRandom rand;
+ SkPaint paint;
+ paint.setAntiAlias(doAA);
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setStrokeWidth(strokeWidth);
+
+ for (int i = 0; i < n; ++i) {
+ SkRect r;
+ SkPath p;
+
+ r.setXYWH(rand.nextSScalar1() * W, rand.nextSScalar1() * H,
+ rand.nextUScalar1() * W, rand.nextUScalar1() * H);
paint.setColor(rand.nextU());
canvas->drawRect(r, paint);
r.setXYWH(rand.nextSScalar1() * W, rand.nextSScalar1() * H,
rand.nextUScalar1() * W, rand.nextUScalar1() * H);
- paint.setStyle(SkPaint::kFill_Style);
paint.setColor(rand.nextU());
p.addOval(r);
canvas->drawPath(p, paint);
+
+ const SkScalar minx = -SkIntToScalar(W)/4;
+ const SkScalar maxx = 5*SkIntToScalar(W)/4;
+ const SkScalar miny = -SkIntToScalar(H)/4;
+ const SkScalar maxy = 5*SkIntToScalar(H)/4;
+ paint.setColor(rand.nextU());
+ canvas->drawLine(randRange(rand, minx, maxx), randRange(rand, miny, maxy),
+ randRange(rand, minx, maxx), randRange(rand, miny, maxy),
+ paint);
}
}
-typedef void (*CanvasProc)(SkCanvas*);
+static void show_hair(SkCanvas* canvas, bool doAA) {
+ show_stroke(canvas, doAA, 0, 150);
+}
+
+static void show_thick(SkCanvas* canvas, bool doAA) {
+ show_stroke(canvas, doAA, SkIntToScalar(5), 50);
+}
+
+typedef void (*CanvasProc)(SkCanvas*, bool);
+
+#include "SkAAClip.h"
class ClipView : public SampleView {
public:
ClipView() {
+ SkAAClip clip;
+ SkIRect r = { -2, -3, 842, 18 };
+ clip.setRect(r);
}
virtual ~ClipView() {
@@ -81,25 +129,27 @@ protected:
}
virtual void onDrawContent(SkCanvas* canvas) {
- canvas->drawColor(SK_ColorLTGRAY);
+ canvas->drawColor(SK_ColorWHITE);
canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
static const CanvasProc gProc[] = {
- show_text, show_geo
+ show_text, show_thick, show_hair, show_fill
};
SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) };
SkPath clipPath;
r.inset(SK_Scalar1 / 4, SK_Scalar1 / 4);
- clipPath.addRoundRect(r, SkIntToScalar(16), SkIntToScalar(16));
+ clipPath.addRoundRect(r, SkIntToScalar(20), SkIntToScalar(20));
+
+// clipPath.toggleInverseFillType();
for (int aa = 0; aa <= 1; ++aa) {
canvas->save();
for (size_t i = 0; i < SK_ARRAY_COUNT(gProc); ++i) {
canvas->save();
- canvas->clipPath(clipPath);
- canvas->drawColor(SK_ColorWHITE);
- gProc[i](canvas);
+ canvas->clipPath(clipPath, SkRegion::kIntersect_Op, true);
+// canvas->drawColor(SK_ColorWHITE);
+ gProc[i](canvas, SkToBool(aa));
canvas->restore();
canvas->translate(W * SK_Scalar1 * 8 / 7, 0);
}
diff --git a/samplecode/SampleFuzz.cpp b/samplecode/SampleFuzz.cpp
index 51350be9ca..02b2391be9 100644
--- a/samplecode/SampleFuzz.cpp
+++ b/samplecode/SampleFuzz.cpp
@@ -354,7 +354,6 @@ protected:
}
virtual void onDrawContent(SkCanvas* canvas) {
- SkIRect r = canvas->getTotalClip().getBounds();
do_fuzz(canvas);
this->inval(NULL);
}
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index cce37f5f5c..11b1268086 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -31,6 +31,11 @@
#include "SkImageDecoder.h"
#include "SkBlurMaskFilter.h"
+#ifdef SK_BUILD_FOR_MAC
+#import <ApplicationServices/ApplicationServices.h>
+SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef);
+#endif
+
static void setNamedTypeface(SkPaint* paint, const char name[]) {
SkTypeface* face = SkTypeface::CreateFromName(name, SkTypeface::kNormal);
paint->setTypeface(face);
@@ -68,6 +73,26 @@ class XfermodesBlurView : public SampleView {
r.set(ww/3, hh/3, ww*19/20, hh*19/20);
r.offset(x, y);
canvas->drawRect(r, p);
+
+#ifdef SK_BUILD_FOR_MAC
+ static const char* gNames[] = { "Arial", "Times", "Courier", "Lucida" };
+ for (int j = 0; j < SK_ARRAY_COUNT(gNames); ++j) {
+ CFStringRef name = CFStringCreateWithCString(NULL, gNames[j], kCFStringEncodingUTF8);
+ CTFontRef font = CTFontCreateWithName(name, 0, NULL);
+ SkTypeface* face = SkCreateTypefaceFromCTFont(font);
+ SkDebugf("%s ct:%p face:%p ats:%p\n", gNames[j], font, face, CTFontGetPlatformFont(font, NULL));
+ for (int i = 9; i <= 24; ++i) {
+ CTFontRef newFont = CTFontCreateCopyWithAttributes(font, i, NULL, NULL);
+ SkTypeface* newFace = SkCreateTypefaceFromCTFont(newFont);
+ SkDebugf("size:%d ct:%p face:%p ats:%p\n", i, newFont, newFace, CTFontGetPlatformFont(newFont, NULL));
+ newFace->unref();
+ CFRelease(newFont);
+ }
+ face->unref();
+ CFRelease(font);
+ CFRelease(name);
+ }
+#endif
}
public: