183f7c659461d602e498569dab63f04b1b578b742reed@google.com/* 283f7c659461d602e498569dab63f04b1b578b742reed@google.com * Copyright 2013 Google Inc. 383f7c659461d602e498569dab63f04b1b578b742reed@google.com * 483f7c659461d602e498569dab63f04b1b578b742reed@google.com * Use of this source code is governed by a BSD-style license that can be 583f7c659461d602e498569dab63f04b1b578b742reed@google.com * found in the LICENSE file. 683f7c659461d602e498569dab63f04b1b578b742reed@google.com */ 783f7c659461d602e498569dab63f04b1b578b742reed@google.com 883f7c659461d602e498569dab63f04b1b578b742reed@google.com#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 1083f7c659461d602e498569dab63f04b1b578b742reed@google.com#include "SkGradientShader.h" 1183f7c659461d602e498569dab63f04b1b578b742reed@google.com 121a9b9640843a64af8d9d90337ec3b3fea663196areedtypedef sk_sp<SkShader> (*MakeShaderProc)(const SkColor[], int count, const SkSize&); 1383f7c659461d602e498569dab63f04b1b578b742reed@google.com 141a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> shader_linear(const SkColor colors[], int count, const SkSize& size) { 1583f7c659461d602e498569dab63f04b1b578b742reed@google.com SkPoint pts[] = { { 0, 0 }, { size.width(), size.height() } }; 161a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeLinear(pts, colors, nullptr, count, SkShader::kClamp_TileMode); 1783f7c659461d602e498569dab63f04b1b578b742reed@google.com} 1883f7c659461d602e498569dab63f04b1b578b742reed@google.com 191a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> shader_radial(const SkColor colors[], int count, const SkSize& size) { 2083f7c659461d602e498569dab63f04b1b578b742reed@google.com SkPoint center = { size.width()/2, size.height()/2 }; 211a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeRadial(center, size.width()/2, colors, nullptr, count, 221a9b9640843a64af8d9d90337ec3b3fea663196areed SkShader::kClamp_TileMode); 2383f7c659461d602e498569dab63f04b1b578b742reed@google.com} 2483f7c659461d602e498569dab63f04b1b578b742reed@google.com 251a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> shader_conical(const SkColor colors[], int count, const SkSize& size) { 2683f7c659461d602e498569dab63f04b1b578b742reed@google.com SkPoint center = { size.width()/2, size.height()/2 }; 271a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeTwoPointConical(center, size.width()/64, center, size.width()/2, 281a9b9640843a64af8d9d90337ec3b3fea663196areed colors, nullptr, count, SkShader::kClamp_TileMode); 2983f7c659461d602e498569dab63f04b1b578b742reed@google.com} 3083f7c659461d602e498569dab63f04b1b578b742reed@google.com 311a9b9640843a64af8d9d90337ec3b3fea663196areedstatic sk_sp<SkShader> shader_sweep(const SkColor colors[], int count, const SkSize& size) { 321a9b9640843a64af8d9d90337ec3b3fea663196areed return SkGradientShader::MakeSweep(size.width()/2, size.height()/2, colors, nullptr, count); 3383f7c659461d602e498569dab63f04b1b578b742reed@google.com} 3483f7c659461d602e498569dab63f04b1b578b742reed@google.com 3583f7c659461d602e498569dab63f04b1b578b742reed@google.comclass ShallowGradientGM : public skiagm::GM { 3683f7c659461d602e498569dab63f04b1b578b742reed@google.compublic: 37063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita ShallowGradientGM(MakeShaderProc proc, const char name[], bool dither) 38063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita : fProc(proc) 39063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita , fDither(dither) { 4083f7c659461d602e498569dab63f04b1b578b742reed@google.com fName.printf("shallow_gradient_%s", name); 4183f7c659461d602e498569dab63f04b1b578b742reed@google.com } 4283f7c659461d602e498569dab63f04b1b578b742reed@google.com 4383f7c659461d602e498569dab63f04b1b578b742reed@google.comprotected: 44a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 4536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 4683f7c659461d602e498569dab63f04b1b578b742reed@google.com return fName; 4783f7c659461d602e498569dab63f04b1b578b742reed@google.com } 4883f7c659461d602e498569dab63f04b1b578b742reed@google.com 4936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 5083f7c659461d602e498569dab63f04b1b578b742reed@google.com return SkISize::Make(800, 800); 5183f7c659461d602e498569dab63f04b1b578b742reed@google.com } 5283f7c659461d602e498569dab63f04b1b578b742reed@google.com 5336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 549d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary const SkColor colors[] = { sk_tool_utils::color_to_565(0xFF555555), 55125960152dfd7f2aba4c2239131bdf75d9ac2705caryclark sk_tool_utils::color_to_565(0xFF444444) }; 5683f7c659461d602e498569dab63f04b1b578b742reed@google.com const int colorCount = SK_ARRAY_COUNT(colors); 5783f7c659461d602e498569dab63f04b1b578b742reed@google.com 5883f7c659461d602e498569dab63f04b1b578b742reed@google.com SkRect r = { 0, 0, this->width(), this->height() }; 5983f7c659461d602e498569dab63f04b1b578b742reed@google.com SkSize size = SkSize::Make(r.width(), r.height()); 6083f7c659461d602e498569dab63f04b1b578b742reed@google.com 6183f7c659461d602e498569dab63f04b1b578b742reed@google.com SkPaint paint; 621a9b9640843a64af8d9d90337ec3b3fea663196areed paint.setShader(fProc(colors, colorCount, size)); 63063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita paint.setDither(fDither); 6483f7c659461d602e498569dab63f04b1b578b742reed@google.com canvas->drawRect(r, paint); 6583f7c659461d602e498569dab63f04b1b578b742reed@google.com } 6683f7c659461d602e498569dab63f04b1b578b742reed@google.com 6783f7c659461d602e498569dab63f04b1b578b742reed@google.comprivate: 6883f7c659461d602e498569dab63f04b1b578b742reed@google.com MakeShaderProc fProc; 6983f7c659461d602e498569dab63f04b1b578b742reed@google.com SkString fName; 70063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita bool fDither; 7183f7c659461d602e498569dab63f04b1b578b742reed@google.com 7283f7c659461d602e498569dab63f04b1b578b742reed@google.com typedef skiagm::GM INHERITED; 7383f7c659461d602e498569dab63f04b1b578b742reed@google.com}; 7483f7c659461d602e498569dab63f04b1b578b742reed@google.com 7583f7c659461d602e498569dab63f04b1b578b742reed@google.com/////////////////////////////////////////////////////////////////////////////// 7683f7c659461d602e498569dab63f04b1b578b742reed@google.com 77063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_linear, "linear", true); ) 78063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_radial, "radial", true); ) 79063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_conical, "conical", true); ) 80063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_sweep, "sweep", true); ) 81063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalita 82063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_linear, "linear_nodither", false); ) 83063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_radial, "radial_nodither", false); ) 84063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_conical, "conical_nodither", false); ) 85063675ba374cb520fe58bbcdaf5afeea0aa0ad60fmalitaDEF_GM( return new ShallowGradientGM(shader_sweep, "sweep_nodither", false); ) 86