1e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed#include "gm.h" 2e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 3e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reednamespace skiagm { 4e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 5e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedclass FillTypeGM : public GM { 6e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed SkPath fPath; 7e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedpublic: 8e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed FillTypeGM() { 9e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed const SkScalar radius = SkIntToScalar(45); 10e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); 11e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); 12e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 13e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 14e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedprotected: 15e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed virtual SkString onShortName() { 16e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed return SkString("filltypes"); 17e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 18e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 19e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed virtual SkISize onISize() { 20e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed return make_isize(835, 840); 21e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 22e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 23e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, 24e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed SkScalar scale, const SkPaint& paint) { 25e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 26e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; 27e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 28e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->save(); 29e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 30e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->clipRect(r); 31e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->drawColor(SK_ColorWHITE); 32e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed fPath.setFillType(ft); 33e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(r.centerX(), r.centerY()); 34e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->scale(scale, scale); 35e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(-r.centerX(), -r.centerY()); 36e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->drawPath(fPath, paint); 37e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->restore(); 38e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 39e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 40e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) { 41e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showPath(canvas, 0, 0, SkPath::kWinding_FillType, 42e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed scale, paint); 43e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, 44e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed scale, paint); 45e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, 46e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed scale, paint); 47e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, 48e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed scale, paint); 49e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 50e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 51e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed virtual void onDraw(SkCanvas* canvas) { 52e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->drawColor(0xFFDDDDDD); 53e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 54e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 55e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 56e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed SkPaint paint; 57e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed const SkScalar scale = SkIntToScalar(5)/4; 58e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 59e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed paint.setAntiAlias(false); 60e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 61e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showFour(canvas, SK_Scalar1, paint); 62e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(SkIntToScalar(450), 0); 63e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showFour(canvas, scale, paint); 64e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 65e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed paint.setAntiAlias(true); 66e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 67e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(SkIntToScalar(-450), SkIntToScalar(450)); 68e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showFour(canvas, SK_Scalar1, paint); 69e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed canvas->translate(SkIntToScalar(450), 0); 70e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed showFour(canvas, scale, paint); 71e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed } 72e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 73e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedprivate: 74e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed typedef GM INHERITED; 75e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed}; 76e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 77e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed////////////////////////////////////////////////////////////////////////////// 78e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 79e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedstatic GM* MyFactory(void*) { return new FillTypeGM; } 80e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedstatic GMRegistry reg(MyFactory); 81e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 82e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed} 83e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed 84