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 virtual uint32_t onGetFlags() const SK_OVERRIDE { 30a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 31a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 32a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual SkString onShortName() SK_OVERRIDE { 348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkString("ovals"); 358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual SkISize onISize() SK_OVERRIDE { 38f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(1200, 900); 398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makePaints() { 428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // no AA 448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA 508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style 578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 598e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(5)); 618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke style, width = 0 668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStroke_Style); 698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // AA with stroke and fill style 748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint p; 758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setAntiAlias(true); 768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStyle(SkPaint::kStrokeAndFill_Style); 778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com p.setStrokeWidth(SkIntToScalar(3)); 788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints.push_back(p); 798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com void makeMatrices() { 838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setIdentity(); 868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(3), SkIntToScalar(2)); 928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 978e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(2), SkIntToScalar(2)); 988e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1018e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(1), SkIntToScalar(2)); 1048e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1058e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1088e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setScale(SkIntToScalar(4), SkIntToScalar(1)); 1108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(90)); 1168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1188e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setSkew(SkIntToScalar(2), SkIntToScalar(3)); 1228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1248e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com { 1268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix m; 1278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com m.setRotate(SkIntToScalar(60)); 1288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fMatrices.push_back(m); 1298e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 132e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkColor genColor(SkRandom* rand) { 1338e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar hsv[3]; 1344b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[0] = rand->nextRangeF(0.0f, 360.0f); 1354b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[1] = rand->nextRangeF(0.75f, 1.0f); 1364b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org hsv[2] = rand->nextRangeF(0.75f, 1.0f); 1378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com return SkHSVToColor(hsv); 1398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1408e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 142e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand(1); 1438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1); 1448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -30, 20, 30); 1458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kXStart = 60.0f; 1478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const SkScalar kYStart = 80.0f; 1488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kXStep = 150; 1498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com const int kYStep = 160; 1508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int maxX = fMatrices.count(); 1518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPaint rectPaint; 1538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setAntiAlias(true); 1548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStyle(SkPaint::kStroke_Style); 1558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setStrokeWidth(SkIntToScalar(0)); 1568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com rectPaint.setColor(SK_ColorLTGRAY); 1578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com int testCount = 0; 159cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com for (int j = 0; j < fMatrices.count(); ++j) { 1618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkMatrix mat = fMatrices[j]; 1638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 164cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com mat.postTranslate(kXStart + SK_Scalar1 * kXStep * (testCount % maxX) + 1658e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_Scalar1 / 4, 166cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com kYStart + SK_Scalar1 * kYStep * (testCount / maxX) + 1678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 3 * SK_Scalar1 / 4); 1688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->concat(mat); 169cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1728e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1738e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1748e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com ++testCount; 1798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // special cases 1838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled tall and skinny oval 185cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 1868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-20, -60, 20, 60); 1878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 1888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 1898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.55f + SK_Scalar1 / 4, 1908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 191cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 1928e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 1938e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 1948e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 1958e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 1968e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 1978e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 1988e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 1998e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2008e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // non-scaled wide and short oval 201cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2028e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -30, 80, 30); 2038e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2048e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2058e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 4 + SK_Scalar1 / 4, 2068e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2078e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 208cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2098e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2108e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2118e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2128e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2138e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2148e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2158e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2168e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2178e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super skinny oval 218cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2198e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(0, -60, 1, 60); 2208e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2218e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2228e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 3.25f + SK_Scalar1 / 4, 2238e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); 224cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2258e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2268e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2278e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2288e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2298e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2308e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2318e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2328e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // super short oval 233cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2348e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkRect oval = SkRect::MakeLTRB(-80, -1, 80, 0); 2358e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2368e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the oval, and make it at off-integer coords. 2378e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.5f + SK_Scalar1 / 4, 2388e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2398e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 240cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2418e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2428e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2438e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2448e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 2458e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2468e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2478e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2488e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // radial gradient 2498e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkPoint center = SkPoint::Make(SkIntToScalar(0), SkIntToScalar(0)); 2508e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor colors[] = { SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN }; 2518e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkScalar pos[] = { 0, SK_ScalarHalf, SK_Scalar1 }; 2528e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, 2538e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkIntToScalar(20), 2548e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com colors, 2558e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com pos, 2568e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ARRAY_COUNT(colors), 2578e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkShader::kClamp_TileMode)); 2588e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 259cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com for (int i = 0; i < fPaints.count(); ++i) { 2608e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->save(); 2618e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com // position the path, and make it at off-integer coords. 2628e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->translate(kXStart + SK_Scalar1 * kXStep * 0 + SK_Scalar1 / 4, 2638e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + 2648e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SK_ScalarHalf * kYStep); 265cb6dc752281841a8d3245d14530e30eff39816d3skia.committer@gmail.com 2668e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkColor color = genColor(&rand); 2678e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setColor(color); 2688e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com fPaints[i].setShader(shader); 2698e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2708e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawRect(oval, rectPaint); 2718e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->drawOval(oval, fPaints[i]); 272cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 273cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com fPaints[i].setShader(NULL); 274cabd0ed14fe6c4679325259682f76f351c8c99ccjvanverth@google.com 2758e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com canvas->restore(); 2768e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2778e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com } 2788e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2798e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comprivate: 2808e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkPaint> fPaints; 2818e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com SkTArray<SkMatrix> fMatrices; 2828e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2838e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com typedef GM INHERITED; 2848e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com}; 2858e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2868e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com////////////////////////////////////////////////////////////////////////////// 2878e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2888e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GM* MyFactory(void*) { return new OvalGM; } 2898e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.comstatic GMRegistry reg(MyFactory); 2908e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com 2918e2962fbb582baee8078cde7a1c306a5a93b06c9jvanverth@google.com} 292