13d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com/* 23d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com * Copyright 2013 Google Inc. 33d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com * 43d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com * Use of this source code is governed by a BSD-style license that can be 53d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com * found in the LICENSE file. 63d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com */ 73d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 83d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com#include "gm.h" 93d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com#include "SkCanvas.h" 103d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com#include "SkGradientShader.h" 113d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 123d3a860d0ba878adb905512a45c500a67532b0a3reed@google.comclass AlphaGradientsGM : public skiagm::GM { 133d3a860d0ba878adb905512a45c500a67532b0a3reed@google.compublic: 143d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com AlphaGradientsGM() {} 153d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 163d3a860d0ba878adb905512a45c500a67532b0a3reed@google.comprotected: 173d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com virtual SkString onShortName() SK_OVERRIDE { 183d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com return SkString("alphagradients"); 193d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 203d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 213d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com virtual SkISize onISize() SK_OVERRIDE { 223d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com return SkISize::Make(640, 480); 233d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 243d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 253d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com static void draw_grad(SkCanvas* canvas, const SkRect& r, 263d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkColor c0, SkColor c1, bool doPreMul) { 273d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkColor colors[] = { c0, c1 }; 283d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkPoint pts[] = { { r.fLeft, r.fTop }, { r.fRight, r.fBottom } }; 293d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkPaint paint; 303d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com uint32_t flags = doPreMul ? SkGradientShader::kInterpolateColorsInPremul_Flag : 0; 313d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, 3283f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::kClamp_TileMode, flags, NULL); 333d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com paint.setShader(s)->unref(); 343d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->drawRect(r, paint); 35454ae46814541cb10ee72217ef4102869254f7ebskia.committer@gmail.com 363d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com paint.setShader(NULL); 373d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com paint.setStyle(SkPaint::kStroke_Style); 383d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->drawRect(r, paint); 393d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 403d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 413d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 423d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com static const struct { 433d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkColor fColor0; 443d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkColor fColor1; 453d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } gRec[] = { 463d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFFFFFF, 0x00000000 }, 473d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFFFFFF, 0x00FF0000 }, 483d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFFFFFF, 0x00FFFF00 }, 493d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFFFFFF, 0x00FFFFFF }, 503d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFF0000, 0x00000000 }, 513d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFF0000, 0x00FF0000 }, 523d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFF0000, 0x00FFFF00 }, 533d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFFFF0000, 0x00FFFFFF }, 543d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFF0000FF, 0x00000000 }, 553d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFF0000FF, 0x00FF0000 }, 563d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFF0000FF, 0x00FFFF00 }, 573d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com { 0xFF0000FF, 0x00FFFFFF }, 583d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com }; 59454ae46814541cb10ee72217ef4102869254f7ebskia.committer@gmail.com 603d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com SkRect r = SkRect::MakeWH(300, 30); 61454ae46814541cb10ee72217ef4102869254f7ebskia.committer@gmail.com 623d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->translate(10, 10); 633d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 643d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com for (int doPreMul = 0; doPreMul <= 1; ++doPreMul) { 653d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->save(); 663d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 673d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com draw_grad(canvas, r, gRec[i].fColor0, gRec[i].fColor1, SkToBool(doPreMul)); 683d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->translate(0, r.height() + 8); 693d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 703d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->restore(); 713d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com canvas->translate(r.width() + 10, 0); 723d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 733d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com } 743d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 75a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const { return kSkipPipe_Flag | kSkipTiled_Flag; } 763d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 773d3a860d0ba878adb905512a45c500a67532b0a3reed@google.comprivate: 783d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com typedef skiagm::GM INHERITED; 793d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com}; 803d3a860d0ba878adb905512a45c500a67532b0a3reed@google.com 813d3a860d0ba878adb905512a45c500a67532b0a3reed@google.comDEF_GM( return SkNEW(AlphaGradientsGM); ) 82