From cecd3ac9d04c16c1c2b3c18a3f0eedd4318c1dde Mon Sep 17 00:00:00 2001 From: "bsalomon@google.com" Date: Tue, 13 Sep 2011 15:39:00 +0000 Subject: Remove wrong file, add right file git-svn-id: http://skia.googlecode.com/svn/trunk@2257 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/filltypespersp.cpp | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 gm/filltypespersp.cpp (limited to 'gm/filltypespersp.cpp') 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); + +} + -- cgit v1.2.3