diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-03-15 14:40:46 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-03-15 14:40:46 +0000 |
commit | 1a38d5508f7a0e2c186d3aa8ea807045a46b663d (patch) | |
tree | 175be595d3de79d1cf2a33431bbde1cfef0ce508 /gm/bigmatrix.cpp | |
parent | 0724f4320d4f8c67d26c77594cca7fd030f4be1d (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.cpp | 97 |
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); + +} + |