ovals.cpp revision cb6dc752281841a8d3245d14530e30eff39816d3
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: 298e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual SkString onShortName() SK_OVERRIDE { 308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkString("ovals"); 318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual SkISize onISize() SK_OVERRIDE { 348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return make_isize(1200, 900); 358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makePaints() { 388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // no AA 408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA 468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style 538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(5)); 578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style, width = 0 628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke and fill style 708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStrokeAndFill_Style); 738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(3)); 748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makeMatrices() { 798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setIdentity(); 828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(3), SkIntToScalar(2)); 888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(2), SkIntToScalar(2)); 948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 978e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 988e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(1), SkIntToScalar(2)); 1008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1018e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1048e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1058e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(4), SkIntToScalar(1)); 1068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1088e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(90)); 1128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setSkew(SkIntToScalar(2), SkIntToScalar(3)); 1188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(60)); 1248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor genColor(SkMWCRandom* rand) { 1298e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar hsv[3]; 1308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com hsv[0] = SkFloatToScalar(rand->nextRangeF(0.0f, 360.0f)); 1318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com hsv[1] = SkFloatToScalar(rand->nextRangeF(0.75f, 1.0f)); 1328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com hsv[2] = SkFloatToScalar(rand->nextRangeF(0.75f, 1.0f)); 1338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkHSVToColor(hsv); 1358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 1388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMWCRandom rand(1); 1398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1); 1408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -30, 20, 30); 1418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kXStart = 60.0f; 1438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kYStart = 80.0f; 1448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kXStep = 150; 1458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kYStep = 160; 1468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int maxX = fMatrices.count(); 1478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint rectPaint; 1498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setAntiAlias(true); 1508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStyle(SkPaint::kStroke_Style); 1518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStrokeWidth(SkIntToScalar(0)); 1528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setColor(SK_ColorLTGRAY); 1538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int testCount = 0; 155cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com for (int j = 0; j < fMatrices.count(); ++j) { 1578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix mat = fMatrices[j]; 1598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 160cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com mat.postTranslate(kXStart + SK_Scalar1 * kXStep * (testCount % maxX) + 1618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_Scalar1 / 4, 162cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com kYStart + SK_Scalar1 * kYStep * (testCount / maxX) + 1638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 3 * SK_Scalar1 / 4); 1648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->concat(mat); 165cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com ++testCount; 1758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // special cases 1798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled tall and skinny oval 181cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -60, 20, 60); 1838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 1858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.55f + SK_Scalar1 / 4, 1868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 187cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled wide and short oval 197cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1988e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -30, 80, 30); 1998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2018e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 4 + SK_Scalar1 / 4, 2028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 204cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2058e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2088e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super skinny oval 214cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(0, -60, 1, 60); 2168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 3.25f + SK_Scalar1 / 4, 2198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 220cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super short oval 229cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -1, 80, 0); 2318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.5f + SK_Scalar1 / 4, 2348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 236cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // radial gradient 2458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPoint center = SkPoint::Make(SkIntToScalar(0), SkIntToScalar(0)); 2468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor colors[] = { SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN }; 2478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar pos[] = { 0, SK_ScalarHalf, SK_Scalar1 }; 2488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, 2498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkIntToScalar(20), 2508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com colors, 2518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com pos, 2528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ARRAY_COUNT(colors), 2538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkShader::kClamp_TileMode)); 2548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 255cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the path, and make it at off-integer coords. 2588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 0 + SK_Scalar1 / 4, 2598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 261cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setShader(shader); 2658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 268cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 269cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com fPaints[i].setShader(NULL); 270cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 2718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comprivate: 2768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkPaint> fPaints; 2778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkMatrix> fMatrices; 2788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com typedef GM INHERITED; 2808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com}; 2818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com////////////////////////////////////////////////////////////////////////////// 2838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GM* MyFactory(void*) { return new OvalGM; } 2858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GMRegistry reg(MyFactory); 2868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com} 288