1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 78ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com#include "gm.h" 967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com 108ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comclass SkJSCanvas { 118ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.compublic: 128ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkJSCanvas(SkCanvas* target); 138ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ~SkJSCanvas(); 148ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 158ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void save(); 168ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void restore(); 17020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 188ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com double lineWidth; 198ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void setLineWidth(double); 20020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 218ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void beginPath(); 228ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void moveTo(double x, double y); 238ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void lineTo(double x, double y); 248ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void closePath(); 25020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 268ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void fill(); 278ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void stroke(); 28020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 298ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com void fillText(const char text[], double x, double y); 308ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 318ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comprivate: 328ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkCanvas* fTarget; 338ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkPaint fFillPaint; 348ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkPaint fStrokePaint; 358ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkPath fPath; 368ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com}; 378ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 388ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comSkJSCanvas::SkJSCanvas(SkCanvas* target) : fTarget(target) { 398ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fFillPaint.setAntiAlias(true); 408ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fStrokePaint.setAntiAlias(true); 418ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fStrokePaint.setStyle(SkPaint::kStroke_Style); 428ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fStrokePaint.setStrokeWidth(SK_Scalar1); 438ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 4467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com 458ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comSkJSCanvas::~SkJSCanvas() {} 468ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 478ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::save() { fTarget->save(); } 488ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::restore() { fTarget->restore(); } 498ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 508ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::beginPath() { fPath.reset(); } 518ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::moveTo(double x, double y) { 528ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fPath.moveTo(SkDoubleToScalar(x), SkDoubleToScalar(y)); 538ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 548ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 558ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::lineTo(double x, double y) { 568ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fPath.lineTo(SkDoubleToScalar(x), SkDoubleToScalar(y)); 578ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 588ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 598ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::closePath() { fPath.close(); } 608ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 618ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::fill() { 628ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fTarget->drawPath(fPath, fFillPaint); 638ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 648ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 658ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::stroke() { 668ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fStrokePaint.setStrokeWidth(SkDoubleToScalar(lineWidth)); 678ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fTarget->drawPath(fPath, fStrokePaint); 688ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 698ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 708ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comvoid SkJSCanvas::fillText(const char text[], double x, double y) { 718ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com fTarget->drawText(text, strlen(text), 728ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkDoubleToScalar(x), SkDoubleToScalar(y), fFillPaint); 738ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 748ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 758ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com/////////////////////////////////////////////////////////////////////////////// 768ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 778ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comstatic void dump(const SkPath& path) { 788ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com const SkRect& r = path.getBounds(); 798ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkDebugf("isEmpty %d, bounds [%g %g %g %g]\n", path.isEmpty(), 808ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com r.fLeft, r.fTop, r.fRight, r.fBottom); 818ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 828ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 838ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comstatic void test_stroke(SkCanvas* canvas) { 848ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com if (true) { 858ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkPath path; 868ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 878ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com path.reset(); path.moveTo(0, 0); 888ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 898ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com path.reset(); path.moveTo(100, 100); 908ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 918ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com path.reset(); path.moveTo(0, 0); path.moveTo(100, 100); 928ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 938ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com path.reset(); path.moveTo(0, 0); path.lineTo(100, 100); 948ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 958ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com path.reset(); path.moveTo(0, 0); path.lineTo(100, 100); path.moveTo(200, 200); 968ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com dump(path); 978ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com } 98020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 998ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#if 0 1008ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com // TEST 1 - The rectangle as it's expected to look 1018ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com var canvas = document.createElement('canvas'); 1028ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com document.body.appendChild(canvas); 1038ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com var ctx = canvas.getContext("2d"); 1048ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#else 1058ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com SkJSCanvas ctx(canvas); 1068ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#endif 1078ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 1088ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.save(); 1098ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineWidth = 2; 1108ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.beginPath(); 1118ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.moveTo(10, 100); 1128ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 100); 1138ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 15); 1148ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(10, 15); 1158ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.closePath(); 116020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1178ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com // no extra moveTo here 1188ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com // ctx.moveTo(175, 125); 119020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1208ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.stroke(); 1218ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.restore(); 122020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1238ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.fillText("As Expected", 10, 10); 124020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1258ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#if 0 1268ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com // TEST 2 - Includes an extra moveTo call before stroke; the rectangle appears larger 1278ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com canvas = document.createElement('canvas'); 1288ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com document.body.appendChild(canvas); 1298ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx = canvas.getContext("2d"); 1308ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#else 1318ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com canvas->translate(200, 0); 1328ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#endif 1338ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 1348ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.save(); 1358ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineWidth = 2; 1368ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.beginPath(); 1378ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.moveTo(10, 100); 1388ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 100); 1398ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 15); 1408ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(10, 15); 1418ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.closePath(); 142020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1438ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.moveTo(175, 125); 144020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1458ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.stroke(); 1468ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.restore(); 147020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1488ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.fillText("Larger Rectangle", 10, 10); 149020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1508ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#if 0 1518ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com // TEST 3 - Identical to test 2 except the line width is 1 1528ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com canvas = document.createElement('canvas'); 1538ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com document.body.appendChild(canvas); 1548ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx = canvas.getContext("2d"); 1558ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#else 1568ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com canvas->translate(200, 0); 1578ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com#endif 1588ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 1598ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.save(); 1608ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineWidth = 1; 1618ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.beginPath(); 1628ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.moveTo(10, 100); 1638ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 100); 1648ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(150, 15); 1658ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.lineTo(10, 15); 1668ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.closePath(); 167020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1688ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.moveTo(175, 125); 169020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1708ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.stroke(); 1718ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.restore(); 172020b25becb4a99061e8643780c887ad472eb0648skia.committer@gmail.com 1738ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com ctx.fillText("As Expected - line width 1", 10, 10); 1748ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com} 1758ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 1768ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comclass Poly2PolyGM : public skiagm::GM { 17767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.compublic: 178d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com Poly2PolyGM() {} 179d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 18067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.comprotected: 181a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 182a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 183a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 184a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 1858ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com virtual SkString onShortName() SK_OVERRIDE { 18667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com return SkString("poly2poly"); 18767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com } 18867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com 1898ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com virtual SkISize onISize() SK_OVERRIDE { 1908ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com return SkISize::Make(835, 840); 19167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com } 192d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 19367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com static void doDraw(SkCanvas* canvas, SkPaint* paint, const int isrc[], 19467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int idst[], int count) { 19567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkMatrix matrix; 19667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkPoint src[4], dst[4]; 197d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 19867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com for (int i = 0; i < count; i++) { 19967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com src[i].set(SkIntToScalar(isrc[2*i+0]), SkIntToScalar(isrc[2*i+1])); 20067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com dst[i].set(SkIntToScalar(idst[2*i+0]), SkIntToScalar(idst[2*i+1])); 20167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com } 202d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 20367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->save(); 20467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com matrix.setPolyToPoly(src, dst, count); 20567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->concat(matrix); 206d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 20767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint->setColor(SK_ColorGRAY); 20867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint->setStyle(SkPaint::kStroke_Style); 20967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const SkScalar D = SkIntToScalar(64); 21067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->drawRectCoords(0, 0, D, D, *paint); 21167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->drawLine(0, 0, D, D, *paint); 21267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->drawLine(0, D, D, 0, *paint); 213d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 21467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkPaint::FontMetrics fm; 21567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint->getFontMetrics(&fm); 21667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint->setColor(SK_ColorRED); 21767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint->setStyle(SkPaint::kFill_Style); 21867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkScalar x = D/2; 21972e49b8982586a5d8b0425f16d909c05a36ea8c3bsalomon@google.com SkScalar y = D/2 - (fm.fAscent + fm.fDescent)/2; 22067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkString str; 22167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com str.appendS32(count); 22267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->drawText(str.c_str(), str.size(), x, y, *paint); 223d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 22467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->restore(); 22567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com } 226d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2278ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 2288ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com if (false) { test_stroke(canvas); return; } 2298ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com 23067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com SkPaint paint; 23167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint.setAntiAlias(true); 23267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint.setStrokeWidth(SkIntToScalar(4)); 23367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint.setTextSize(SkIntToScalar(40)); 23467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com paint.setTextAlign(SkPaint::kCenter_Align); 235d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 23667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->save(); 23767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 23867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com // translate (1 point) 23967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int src1[] = { 0, 0 }; 24067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int dst1[] = { 5, 5 }; 24167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com doDraw(canvas, &paint, src1, dst1, 1); 24267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->restore(); 243d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 24467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->save(); 24567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->translate(SkIntToScalar(160), SkIntToScalar(10)); 24667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com // rotate/uniform-scale (2 points) 24767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int src2[] = { 32, 32, 64, 32 }; 24867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int dst2[] = { 32, 32, 64, 48 }; 24967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com doDraw(canvas, &paint, src2, dst2, 2); 25067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->restore(); 251d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 25267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->save(); 25367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->translate(SkIntToScalar(10), SkIntToScalar(110)); 25467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com // rotate/skew (3 points) 25567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int src3[] = { 0, 0, 64, 0, 0, 64 }; 25667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int dst3[] = { 0, 0, 96, 0, 24, 64 }; 25767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com doDraw(canvas, &paint, src3, dst3, 3); 25867981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->restore(); 259d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 26067981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->save(); 26167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->translate(SkIntToScalar(160), SkIntToScalar(110)); 26267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com // perspective (4 points) 26367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int src4[] = { 0, 0, 64, 0, 64, 64, 0, 64 }; 26467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com const int dst4[] = { 0, 0, 96, 0, 64, 96, 0, 64 }; 26567981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com doDraw(canvas, &paint, src4, dst4, 4); 26667981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com canvas->restore(); 26767981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com } 268d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 26967981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.comprivate: 2708ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.com typedef skiagm::GM INHERITED; 27167981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com}; 27267981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com 27367981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com////////////////////////////////////////////////////////////////////////////// 27467981c5e4b4bec341fb40a59b111d75da1d6ab66reed@google.com 2758ea69838a4f00281c744e8c8e7fc95375c0aa1e5reed@google.comDEF_GM( return new Poly2PolyGM; ) 276