 Chromium Code Reviews
 Chromium Code Reviews| Index: gm/rects.cpp | 
| =================================================================== | 
| --- gm/rects.cpp (revision 0) | 
| +++ gm/rects.cpp (revision 0) | 
| @@ -0,0 +1,244 @@ | 
| +/* | 
| + * Copyright 2013 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 "SkTArray.h" | 
| +#include "SkMatrix.h" | 
| +#include "SkBlurMaskFilter.h" | 
| +#include "SkGradientShader.h" | 
| +#include "SkBlurDrawLooper.h" | 
| + | 
| +namespace skiagm { | 
| + | 
| +class RectsGM : public GM { | 
| +public: | 
| + RectsGM() { | 
| + this->setBGColor(0xFF000000); | 
| + this->makePaints(); | 
| + this->makeMatrices(); | 
| + this->makeRects(); | 
| + } | 
| + | 
| +protected: | 
| + virtual SkString onShortName() SK_OVERRIDE { | 
| + return SkString("rects"); | 
| + } | 
| + | 
| + virtual SkISize onISize() SK_OVERRIDE { | 
| + return make_isize(1200, 900); | 
| + } | 
| + | 
| + void makePaints() { | 
| + { | 
| + // no AA | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with mask filter | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + SkMaskFilter* mf = SkBlurMaskFilter::Create(SkIntToScalar(5), | 
| + SkBlurMaskFilter::kNormal_BlurStyle, | 
| + SkBlurMaskFilter::kHighQuality_BlurFlag); | 
| + p.setMaskFilter(mf)->unref(); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with radial shader | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + SkPoint center = SkPoint::Make(SkIntToScalar(-5), SkIntToScalar(30)); | 
| + SkColor colors[] = { SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN }; | 
| + SkScalar pos[] = { 0, SK_ScalarHalf, SK_Scalar1 }; | 
| + SkShader* s = SkGradientShader::CreateRadial(center, | 
| + SkIntToScalar(20), | 
| + colors, | 
| + pos, | 
| + SK_ARRAY_COUNT(colors), | 
| + SkShader::kClamp_TileMode); | 
| + p.setShader(s)->unref(); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with blur | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + SkBlurDrawLooper* shadowLooper = | 
| + new SkBlurDrawLooper (SkIntToScalar(10), SkIntToScalar(5), | 
| + SkIntToScalar(10), SK_ColorWHITE, | 
| + SkBlurDrawLooper::kIgnoreTransform_BlurFlag | | 
| + SkBlurDrawLooper::kOverrideColor_BlurFlag | | 
| + SkBlurDrawLooper::kHighQuality_BlurFlag ); | 
| + SkAutoUnref aurL0(shadowLooper); | 
| + p.setLooper(shadowLooper); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with stroke style | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + p.setStyle(SkPaint::kStroke_Style); | 
| + p.setStrokeWidth(SkIntToScalar(3)); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with stroke style, width = 0 | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + p.setStyle(SkPaint::kStroke_Style); | 
| + fPaints.push_back(p); | 
| + } | 
| + | 
| + { | 
| + // AA with stroke and fill style | 
| + SkPaint p; | 
| + p.setColor(SK_ColorWHITE); | 
| + p.setAntiAlias(true); | 
| + p.setStyle(SkPaint::kStrokeAndFill_Style); | 
| + p.setStrokeWidth(SkIntToScalar(2)); | 
| + fPaints.push_back(p); | 
| + } | 
| + } | 
| + | 
| + void makeMatrices() { | 
| + { | 
| + // 1x1.5 scale | 
| + SkMatrix m; | 
| + m.setScale(1, 1.5); | 
| + fMatrices.push_back(m); | 
| + } | 
| + | 
| + { | 
| + // 1.5x1.5 scale | 
| + SkMatrix m; | 
| + m.setScale(1.5, 1.5); | 
| + fMatrices.push_back(m); | 
| + } | 
| + | 
| + { | 
| + // 1x1.5 skew | 
| + SkMatrix m; | 
| + m.setSkew(1, 1.5); | 
| + fMatrices.push_back(m); | 
| + } | 
| + | 
| + { | 
| + // 1.5x1.5 skew | 
| + SkMatrix m; | 
| + m.setSkew(1.5, 1.5); | 
| + fMatrices.push_back(m); | 
| + } | 
| + | 
| + { | 
| + // 30 degree rotation | 
| + SkMatrix m; | 
| + m.setRotate(SkIntToScalar(30)); | 
| + fMatrices.push_back(m); | 
| + } | 
| + } | 
| + | 
| + void makeRects() { | 
| + { | 
| + // small square | 
| + SkRect r = SkRect::MakeLTRB(0, 0, 30, 30); | 
| + fRects.push_back(r); | 
| + } | 
| + | 
| + { | 
| + // thin vertical | 
| + SkRect r = SkRect::MakeLTRB(0, 0, 2, 40); | 
| + fRects.push_back(r); | 
| + } | 
| + | 
| + { | 
| + // thin horizontal | 
| + SkRect r = SkRect::MakeLTRB(0, 0, 40, 2); | 
| + fRects.push_back(r); | 
| + } | 
| + | 
| + { | 
| + // very thin | 
| + SkRect r = SkRect::MakeLTRB(0, 0, 0.25f, 10); | 
| + fRects.push_back(r); | 
| + } | 
| + | 
| + { | 
| + // zaftig | 
| 
bsalomon
2013/03/19 13:58:26
I had to look that up!
 | 
| + SkRect r = SkRect::MakeLTRB(0, 0, 60, 60); | 
| + fRects.push_back(r); | 
| + } | 
| + } | 
| + | 
| + // position the current test on the canvas | 
| + static void position(SkCanvas* canvas, int testCount) { | 
| + canvas->translate(SK_Scalar1 * 100 * (testCount % 10) + SK_Scalar1 / 4, | 
| + SK_Scalar1 * 100 * (testCount / 10) + 3 * SK_Scalar1 / 4); | 
| + } | 
| + | 
| + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 
| + canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1); | 
| + | 
| + int testCount = 0; | 
| + | 
| + for (int i = 0; i < fPaints.count(); ++i) { | 
| + for (int j = 0; j < fRects.count(); ++j, ++testCount) { | 
| + canvas->save(); | 
| + this->position(canvas, testCount); | 
| + canvas->drawRect(fRects[j], fPaints[i]); | 
| + canvas->restore(); | 
| + } | 
| + } | 
| + | 
| + SkPaint paint; | 
| + paint.setColor(SK_ColorWHITE); | 
| + paint.setAntiAlias(true); | 
| + | 
| + for (int i = 0; i < fMatrices.count(); ++i) { | 
| + for (int j = 0; j < fRects.count(); ++j, ++testCount) { | 
| + canvas->save(); | 
| + this->position(canvas, testCount); | 
| + canvas->concat(fMatrices[i]); | 
| + canvas->drawRect(fRects[j], paint); | 
| + canvas->restore(); | 
| + } | 
| + } | 
| + } | 
| + | 
| +private: | 
| + SkTArray<SkPaint> fPaints; | 
| + SkTArray<SkMatrix> fMatrices; | 
| + SkTArray<SkRect> fRects; | 
| + | 
| + typedef GM INHERITED; | 
| +}; | 
| + | 
| +////////////////////////////////////////////////////////////////////////////// | 
| + | 
| +static GM* MyFactory(void*) { return new RectsGM; } | 
| +static GMRegistry reg(MyFactory); | 
| + | 
| +} | 
| Property changes on: gm\rects.cpp | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF |