From b686539ab5270c66ab4994b4d6a8740143dec73a Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Tue, 9 Jul 2013 19:43:29 +0000 Subject: [PATCH] Added GM and Bench Added GM's and Bench Added GM file nate_gradients.cpp BUG= R=reed@google.com, bsalomon@google.com Author: dierk@google.com Review URL: https://chromiumcodereview.appspot.com/18259012 git-svn-id: http://skia.googlecode.com/svn/trunk@9938 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/GradientBench.cpp | 11 +--- gm/gradientDirtyLaundry.cpp | 111 ++++++++++++++++++++++++++++++++++++ gyp/gmslides.gypi | 1 + 3 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 gm/gradientDirtyLaundry.cpp diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp index 2787edbf0..02df14825 100644 --- a/bench/GradientBench.cpp +++ b/bench/GradientBench.cpp @@ -22,20 +22,11 @@ struct GradData { }; static const SkColor gColors[] = { - SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK -}; -static const SkScalar gPos0[] = { 0, SK_Scalar1 }; -static const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; -static const SkScalar gPos2[] = { - 0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1 + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, }; static const GradData gGradData[] = { { 2, gColors, NULL }, - { 2, gColors, gPos0 }, - { 2, gColors, gPos1 }, - { 5, gColors, NULL }, - { 5, gColors, gPos2 } }; /// Ignores scale diff --git a/gm/gradientDirtyLaundry.cpp b/gm/gradientDirtyLaundry.cpp new file mode 100644 index 000000000..adf59b6e9 --- /dev/null +++ b/gm/gradientDirtyLaundry.cpp @@ -0,0 +1,111 @@ + +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "gm.h" +#include "SkGradientShader.h" + +using namespace skiagm; + +struct GradData { + int fCount; + const SkColor* fColors; + const SkScalar* fPos; +}; + +static const SkColor gColors[] = { + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, +}; + +//static const SkScalar gPos[] = { SK_Scalar1*999/2000, SK_Scalar1*1001/2000 }; + +static const GradData gGradData[] = { + { 40, gColors, NULL }, + // { 2, gColors, gPos }, + // { 2, gCol2, NULL }, +}; + +static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, SkUnitMapper* mapper) { + return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, + data.fCount, tm, mapper); +} + +static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, SkUnitMapper* mapper) { + SkPoint center; + center.set(SkScalarAve(pts[0].fX, pts[1].fX), + SkScalarAve(pts[0].fY, pts[1].fY)); + return SkGradientShader::CreateRadial(center, center.fX, data.fColors, + data.fPos, data.fCount, tm, mapper); +} + +static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, + SkShader::TileMode, SkUnitMapper* mapper) { + SkPoint center; + center.set(SkScalarAve(pts[0].fX, pts[1].fX), + SkScalarAve(pts[0].fY, pts[1].fY)); + return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, + data.fPos, data.fCount, mapper); +} + + +typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, SkUnitMapper* mapper); +static const GradMaker gGradMakers[] = { + MakeLinear, MakeRadial, MakeSweep, +}; + +/////////////////////////////////////////////////////////////////////////////// + +class GradientsGM : public GM { +public: + GradientsGM() { + this->setBGColor(0xFFDDDDDD); + } + +protected: + SkString onShortName() SK_OVERRIDE { return SkString("gradient_dirty_laundry"); } + virtual SkISize onISize() SK_OVERRIDE { return make_isize(640, 615); } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + SkPoint pts[2] = { { 0, 0 }, + { SkIntToScalar(100), SkIntToScalar(100) } + }; + SkShader::TileMode tm = SkShader::kClamp_TileMode; + SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; + SkPaint paint; + paint.setAntiAlias(true); + + canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); + for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { + canvas->save(); + for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) { + SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, NULL); + paint.setShader(shader)->unref(); + canvas->drawRect(r, paint); + canvas->translate(0, SkIntToScalar(120)); + } + canvas->restore(); + canvas->translate(SkIntToScalar(120), 0); + } + } + +private: + typedef GM INHERITED; +}; + +/////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new GradientsGM; } +static GMRegistry reg(MyFactory); diff --git a/gyp/gmslides.gypi b/gyp/gmslides.gypi index 66f869f4f..480279a7f 100644 --- a/gyp/gmslides.gypi +++ b/gyp/gmslides.gypi @@ -50,6 +50,7 @@ '../gm/getpostextpath.cpp', '../gm/giantbitmap.cpp', '../gm/gradients.cpp', + '../gm/gradientDirtyLaundry.cpp', '../gm/gradient_matrix.cpp', '../gm/gradtext.cpp', '../gm/hairlines.cpp',