1b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org/* 2b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org * Copyright 2013 Google Inc. 3b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org * 4b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org * found in the LICENSE file. 6b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org */ 7b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org#include "gm.h" 833d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 9b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org#include "SkGradientShader.h" 10b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 11b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgusing namespace skiagm; 12b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 13b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgstruct GradData { 14b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org int fCount; 15b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org const SkColor* fColors; 16b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org const SkScalar* fPos; 17b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org}; 18b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 19dbfd7ab10883f173f5c1b653a233e18dc6142002mtkleinconstexpr SkColor gColors[] = { 20b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 21b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 22b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 23b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 24b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 25b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 26b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 27b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 28b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org}; 29b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 30dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein//constexpr SkScalar gPos[] = { SK_Scalar1*999/2000, SK_Scalar1*1001/2000 }; 31b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 32dbfd7ab10883f173f5c1b653a233e18dc6142002mtkleinconstexpr GradData gGradData[] = { 3396fcdcc219d2a0d3579719b84b28bede76efba64halcanary { 40, gColors, nullptr }, 34b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org // { 2, gColors, gPos }, 3596fcdcc219d2a0d3579719b84b28bede76efba64halcanary // { 2, gCol2, nullptr }, 36b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org}; 37b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 381a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 391a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeLinear(pts, data.fColors, data.fPos, data.fCount, tm); 40b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org} 41b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 421a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> MakeRadial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 431a9b9640843a64af8d9d90337ec3b3fea663196areed const SkPoint pt{ SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY) }; 441a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeRadial(pt, pt.fX, data.fColors, data.fPos, data.fCount, tm); 45b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org} 46b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 471a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> MakeSweep(const SkPoint pts[2], const GradData& data, SkShader::TileMode) { 481a9b9640843a64af8d9d90337ec3b3fea663196areed const SkPoint pt{ SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY) }; 491a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeSweep(pt.fX, pt.fY, data.fColors, data.fPos, data.fCount); 50b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org} 51b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 52b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 531a9b9640843a64af8d9d90337ec3b3fea663196areedtypedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData&, SkShader::TileMode); 5483f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org 55dbfd7ab10883f173f5c1b653a233e18dc6142002mtkleinconstexpr GradMaker gGradMakers[] = { 569e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com MakeLinear, MakeRadial, MakeSweep, 57b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org}; 58b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 59b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 60b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 61b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgclass GradientsGM : public GM { 62b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgpublic: 63b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org GradientsGM() { 6465cdba6ba78aaec0c0a4596bb5941020c789482bcaryclark this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD)); 65b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org } 66b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 67b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgprotected: 6836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { return SkString("gradient_dirty_laundry"); } 6936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { return SkISize::Make(640, 615); } 70b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 7136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 72b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SkPoint pts[2] = { { 0, 0 }, 73b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org { SkIntToScalar(100), SkIntToScalar(100) } 74b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org }; 75b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SkShader::TileMode tm = SkShader::kClamp_TileMode; 76b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 77b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SkPaint paint; 78b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org paint.setAntiAlias(true); 79b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 80b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 81b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { 82b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->save(); 83b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) { 841a9b9640843a64af8d9d90337ec3b3fea663196areed paint.setShader(gGradMakers[j](pts, gGradData[i], tm)); 85b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->drawRect(r, paint); 86b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->translate(0, SkIntToScalar(120)); 87b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org } 88b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->restore(); 89b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org canvas->translate(SkIntToScalar(120), 0); 90b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org } 91b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org } 92b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 93b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgprivate: 94b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org typedef GM INHERITED; 95b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org}; 96b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 97b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 98b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org 99b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgstatic GM* MyFactory(void*) { return new GradientsGM; } 100b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.orgstatic GMRegistry reg(MyFactory); 101