aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/bigmatrix.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-15 14:40:46 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-15 14:40:46 +0000
commit1a38d5508f7a0e2c186d3aa8ea807045a46b663d (patch)
tree175be595d3de79d1cf2a33431bbde1cfef0ce508 /gm/bigmatrix.cpp
parent0724f4320d4f8c67d26c77594cca7fd030f4be1d (diff)
Perform degenerate check in device coords in convex path renderer
Review URL: http://codereview.appspot.com/5821053/ git-svn-id: http://skia.googlecode.com/svn/trunk@3401 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/bigmatrix.cpp')
-rw-r--r--gm/bigmatrix.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/gm/bigmatrix.cpp b/gm/bigmatrix.cpp
new file mode 100644
index 0000000000..776566848e
--- /dev/null
+++ b/gm/bigmatrix.cpp
@@ -0,0 +1,97 @@
+
+/*
+ * Copyright 2012 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 "SkColorPriv.h"
+#include "SkShader.h"
+
+namespace skiagm {
+
+class BigMatrixGM : public GM {
+public:
+ BigMatrixGM() {
+ this->setBGColor(0xFF66AA99);
+ }
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("bigmatrix");
+ }
+
+ virtual SkISize onISize() {
+ return make_isize(50, 50);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ SkMatrix m;
+ m.reset();
+ m.setRotate(33 * SK_Scalar1);
+ m.postScale(3000 * SK_Scalar1, 3000 * SK_Scalar1);
+ m.postTranslate(6000 * SK_Scalar1, -5000 * SK_Scalar1);
+ canvas->concat(m);
+
+ SkPaint paint;
+ paint.setColor(SK_ColorRED);
+ paint.setAntiAlias(true);
+
+ m.invert(&m);
+
+ SkPath path;
+
+ SkPoint pt = {10 * SK_Scalar1, 10 * SK_Scalar1};
+ SkScalar small = 1 / (500 * SK_Scalar1);
+
+ m.mapPoints(&pt, 1);
+ path.addCircle(pt.fX, pt.fY, small);
+ canvas->drawPath(path, paint);
+
+ pt.set(30 * SK_Scalar1, 10 * SK_Scalar1);
+ m.mapPoints(&pt, 1);
+ SkRect rect = {pt.fX - small, pt.fY - small,
+ pt.fX + small, pt.fY + small};
+ canvas->drawRect(rect, paint);
+
+ SkBitmap bmp;
+ bmp.setConfig(SkBitmap::kARGB_8888_Config, 2, 2);
+ bmp.allocPixels();
+ bmp.lockPixels();
+ uint32_t* pixels = reinterpret_cast<uint32_t*>(bmp.getPixels());
+ pixels[0] = SkPackARGB32(0xFF, 0xFF, 0x00, 0x00);
+ pixels[1] = SkPackARGB32(0xFF, 0x00, 0xFF, 0x00);
+ pixels[2] = SkPackARGB32(0x80, 0x00, 0x00, 0x00);
+ pixels[3] = SkPackARGB32(0xFF, 0x00, 0x00, 0xFF);
+ bmp.unlockPixels();
+ pt.set(30 * SK_Scalar1, 30 * SK_Scalar1);
+ m.mapPoints(&pt, 1);
+ SkShader* shader = SkShader::CreateBitmapShader(
+ bmp,
+ SkShader::kRepeat_TileMode,
+ SkShader::kRepeat_TileMode);
+ SkMatrix s;
+ s.reset();
+ s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000);
+ shader->setLocalMatrix(s);
+ paint.setShader(shader)->unref();
+ paint.setAntiAlias(false);
+ paint.setFilterBitmap(true);
+ rect.setLTRB(pt.fX - small, pt.fY - small,
+ pt.fX + small, pt.fY + small);
+ canvas->drawRect(rect, paint);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new BigMatrixGM; }
+static GMRegistry reg(MyFactory);
+
+}
+