aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/filltypespersp.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-09-13 15:39:00 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-09-13 15:39:00 +0000
commitcecd3ac9d04c16c1c2b3c18a3f0eedd4318c1dde (patch)
tree536be3735c2703935ee47dfd1700aa66b3b1fa09 /gm/filltypespersp.cpp
parent8c2fe99ed2c210317786683e8c1f1e86cff0be49 (diff)
Remove wrong file, add right file
git-svn-id: http://skia.googlecode.com/svn/trunk@2257 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/filltypespersp.cpp')
-rw-r--r--gm/filltypespersp.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp
new file mode 100644
index 0000000000..910547399a
--- /dev/null
+++ b/gm/filltypespersp.cpp
@@ -0,0 +1,128 @@
+
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "gm.h"
+#include "SkGradientShader.h"
+
+namespace skiagm {
+
+class FillTypePerspGM : public GM {
+ SkPath fPath;
+public:
+ FillTypePerspGM() {
+ const SkScalar radius = SkIntToScalar(45);
+ fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
+ fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
+ }
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("filltypespersp");
+ }
+
+ virtual SkISize onISize() {
+ return make_isize(835, 840);
+ }
+
+ void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
+ SkScalar scale, const SkPaint& paint) {
+
+ const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
+
+ canvas->save();
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
+ canvas->clipRect(r);
+ canvas->drawColor(SK_ColorWHITE);
+ fPath.setFillType(ft);
+ canvas->translate(r.centerX(), r.centerY());
+ canvas->scale(scale, scale);
+ canvas->translate(-r.centerX(), -r.centerY());
+ canvas->drawPath(fPath, paint);
+ canvas->restore();
+ }
+
+ void showFour(SkCanvas* canvas, SkScalar scale, bool aa) {
+
+ SkPaint paint;
+ SkPoint center = SkPoint::Make(SkIntToScalar(100), SkIntToScalar(100));
+ SkColor colors[] = {SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN};
+ SkScalar pos[] = {0, SK_ScalarHalf, SK_Scalar1};
+ SkShader* s = SkGradientShader::CreateRadial(center,
+ SkIntToScalar(100),
+ colors,
+ pos,
+ SK_ARRAY_COUNT(colors),
+ SkShader::kClamp_TileMode);
+ paint.setShader(s)->unref();
+ paint.setAntiAlias(aa);
+
+ showPath(canvas, 0, 0, SkPath::kWinding_FillType,
+ scale, paint);
+ showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType,
+ scale, paint);
+ showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType,
+ scale, paint);
+ showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
+ scale, paint);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ // do perspective drawPaint as the background;
+ SkPaint bkgnrd;
+ SkPoint center = SkPoint::Make(SkIntToScalar(100),
+ SkIntToScalar(100));
+ SkColor colors[] = {SK_ColorBLACK, SK_ColorCYAN,
+ SK_ColorYELLOW, SK_ColorWHITE};
+ SkScalar pos[] = {0, SK_ScalarHalf / 2,
+ 3 * SK_ScalarHalf / 2, SK_Scalar1};
+ SkShader* s = SkGradientShader::CreateRadial(center,
+ SkIntToScalar(1000),
+ colors,
+ pos,
+ SK_ARRAY_COUNT(colors),
+ SkShader::kClamp_TileMode);
+ bkgnrd.setShader(s)->unref();
+ canvas->save();
+ canvas->translate(SkIntToScalar(100), SkIntToScalar(100));
+ SkMatrix mat;
+ mat.reset();
+ mat.setPerspY(SK_Scalar1 / 1000);
+ canvas->concat(mat);
+ canvas->drawPaint(bkgnrd);
+ canvas->restore();
+
+ // draw the paths in perspective
+ SkMatrix persp;
+ persp.reset();
+ persp.setPerspX(-SK_Scalar1 / 1800);
+ persp.setPerspY(SK_Scalar1 / 500);
+ canvas->concat(persp);
+
+ canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
+ const SkScalar scale = SkIntToScalar(5)/4;
+
+ showFour(canvas, SK_Scalar1, false);
+ canvas->translate(SkIntToScalar(450), 0);
+ showFour(canvas, scale, false);
+
+ canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
+ showFour(canvas, SK_Scalar1, true);
+ canvas->translate(SkIntToScalar(450), 0);
+ showFour(canvas, scale, true);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new FillTypePerspGM; }
+static GMRegistry reg(MyFactory);
+
+}
+