18e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 28e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com/* 38e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com * Copyright 2013 Google Inc. 48e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com * 58e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com * Use of this source code is governed by a BSD-style license that can be 68e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com * found in the LICENSE file. 78e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com */ 88e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 98e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "gm.h" 108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkTArray.h" 118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkRandom.h" 128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkMatrix.h" 138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkBlurMaskFilter.h" 148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkGradientShader.h" 158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkBlurDrawLooper.h" 168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com#include "SkRect.h" 178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comnamespace skiagm { 198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comclass OvalGM : public GM { 218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.compublic: 228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com OvalGM() { 238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com this->setBGColor(0xFF000000); 248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com this->makePaints(); 258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com this->makeMatrices(); 268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comprotected: 29a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 3036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkString("ovals"); 328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 35f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(1200, 900); 368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makePaints() { 398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // no AA 418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA 478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style 548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(5)); 588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style, width = 0 638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke and fill style 718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStrokeAndFill_Style); 748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(3)); 758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makeMatrices() { 808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setIdentity(); 838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(3), SkIntToScalar(2)); 898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(2), SkIntToScalar(2)); 958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 978e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 988e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(1), SkIntToScalar(2)); 1018e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1048e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1058e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(4), SkIntToScalar(1)); 1078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1088e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(90)); 1138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setSkew(SkIntToScalar(2), SkIntToScalar(3)); 1198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(60)); 1258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 129e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkColor genColor(SkRandom* rand) { 1308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar hsv[3]; 1314b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[0] = rand->nextRangeF(0.0f, 360.0f); 1324b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[1] = rand->nextRangeF(0.75f, 1.0f); 1334b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[2] = rand->nextRangeF(0.75f, 1.0f); 1348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkHSVToColor(hsv); 1368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 13836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 139e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand(1); 1408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1); 1418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -30, 20, 30); 1428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kXStart = 60.0f; 1448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kYStart = 80.0f; 1458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kXStep = 150; 1468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kYStep = 160; 1478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int maxX = fMatrices.count(); 1488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint rectPaint; 1508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setAntiAlias(true); 1518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStyle(SkPaint::kStroke_Style); 1528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStrokeWidth(SkIntToScalar(0)); 1538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setColor(SK_ColorLTGRAY); 1548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int testCount = 0; 156cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com for (int j = 0; j < fMatrices.count(); ++j) { 1588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix mat = fMatrices[j]; 1608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 161cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com mat.postTranslate(kXStart + SK_Scalar1 * kXStep * (testCount % maxX) + 1628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_Scalar1 / 4, 163cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com kYStart + SK_Scalar1 * kYStep * (testCount / maxX) + 1648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 3 * SK_Scalar1 / 4); 1658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->concat(mat); 166cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com ++testCount; 1768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // special cases 1808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled tall and skinny oval 182cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -60, 20, 60); 1848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 1868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.55f + SK_Scalar1 / 4, 1878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 188cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1978e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled wide and short oval 198cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -30, 80, 30); 2008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2018e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 4 + SK_Scalar1 / 4, 2038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2048e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 205cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2088e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super skinny oval 215cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(0, -60, 1, 60); 2178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 3.25f + SK_Scalar1 / 4, 2208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 221cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2298e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super short oval 230cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -1, 80, 0); 2328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.5f + SK_Scalar1 / 4, 2358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 237cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // radial gradient 2468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPoint center = SkPoint::Make(SkIntToScalar(0), SkIntToScalar(0)); 2478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor colors[] = { SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN }; 2488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar pos[] = { 0, SK_ScalarHalf, SK_Scalar1 }; 2498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, 2508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkIntToScalar(20), 2518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com colors, 2528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com pos, 2538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ARRAY_COUNT(colors), 2548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkShader::kClamp_TileMode)); 2558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 256cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the path, and make it at off-integer coords. 2598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 0 + SK_Scalar1 / 4, 2608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 262cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setShader(shader); 2668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 269cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 270cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com fPaints[i].setShader(NULL); 271cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 2728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comprivate: 2778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkPaint> fPaints; 2788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkMatrix> fMatrices; 2798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com typedef GM INHERITED; 2818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com}; 2828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com////////////////////////////////////////////////////////////////////////////// 2848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GM* MyFactory(void*) { return new OvalGM; } 2868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GMRegistry reg(MyFactory); 2878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com} 289