180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "gm.h" 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querunamespace skiagm { 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass FillTypeGM : public GM { 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath fPath; 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru FillTypeGM() { 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->setBGColor(0xFFDDDDDD); 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void makePath() { 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fPath.isEmpty()) { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar radius = SkIntToScalar(45); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual SkString onShortName() { 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return SkString("filltypes"); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual SkISize onISize() { 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return make_isize(835, 840); 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar scale, const SkPaint& paint) { 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->save(); 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->clipRect(r); 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->drawColor(SK_ColorWHITE); 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fPath.setFillType(ft); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(r.centerX(), r.centerY()); 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->scale(scale, scale); 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(-r.centerX(), -r.centerY()); 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->drawPath(fPath, paint); 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->restore(); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) { 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showPath(canvas, 0, 0, SkPath::kWinding_FillType, 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scale, paint); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scale, paint); 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scale, paint); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scale, paint); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onDraw(SkCanvas* canvas) { 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->makePath(); 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPaint paint; 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar scale = SkIntToScalar(5)/4; 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru paint.setAntiAlias(false); 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showFour(canvas, SK_Scalar1, paint); 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(SkIntToScalar(450), 0); 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showFour(canvas, scale, paint); 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru paint.setAntiAlias(true); 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(SkIntToScalar(-450), SkIntToScalar(450)); 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showFour(canvas, SK_Scalar1, paint); 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(SkIntToScalar(450), 0); 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru showFour(canvas, scale, paint); 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef GM INHERITED; 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru////////////////////////////////////////////////////////////////////////////// 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic GM* MyFactory(void*) { return new FillTypeGM; } 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic GMRegistry reg(MyFactory); 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 96