From d5808bd35a08475c3f866418e9b548571a795a15 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Thu, 6 Feb 2014 16:53:25 +0000 Subject: add inital gm for colorfilters BUG=skia: R=djsollen@google.com Review URL: https://codereview.chromium.org/140393005 git-svn-id: http://skia.googlecode.com/svn/trunk@13346 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/colorfilters.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gyp/gmslides.gypi | 1 + 2 files changed, 89 insertions(+) create mode 100644 gm/colorfilters.cpp diff --git a/gm/colorfilters.cpp b/gm/colorfilters.cpp new file mode 100644 index 0000000000..4246d6968a --- /dev/null +++ b/gm/colorfilters.cpp @@ -0,0 +1,88 @@ +/* + * Copyright 2014 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 "SkCanvas.h" +#include "SkColorFilter.h" +#include "SkGradientShader.h" + +static SkShader* make_shader(const SkRect& bounds) { + const SkPoint pts[] = { + { bounds.left(), bounds.top() }, + { bounds.right(), bounds.bottom() }, + }; + const SkColor colors[] = { + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorBLACK, + SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW, + }; + return SkGradientShader::CreateLinear(pts, + colors, NULL, SK_ARRAY_COUNT(colors), + SkShader::kClamp_TileMode); +} + +typedef void (*InstallPaint)(SkPaint*, uint32_t, uint32_t); + +static void install_nothing(SkPaint* paint, uint32_t, uint32_t) { + paint->setColorFilter(NULL); +} + +static void install_lighting(SkPaint* paint, uint32_t mul, uint32_t add) { + paint->setColorFilter(SkColorFilter::CreateLightingFilter(mul, add))->unref(); +} + +class ColorFiltersGM : public skiagm::GM { +public: + ColorFiltersGM() { + fName.set("lightingcolorfilter"); + } + +protected: + virtual SkString onShortName() { + return fName; + } + + virtual SkISize onISize() { + return SkISize::Make(640, 480); + } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + SkPaint paint; + SkRect r; + r.setWH(600, 50); + paint.setShader(make_shader(r))->unref(); + + const struct { + InstallPaint fProc; + uint32_t fData0, fData1; + } rec[] = { + { install_nothing, 0, 0 }, + { install_lighting, 0xFF0000, 0 }, + { install_lighting, 0x00FF00, 0 }, + { install_lighting, 0x0000FF, 0 }, + { install_lighting, 0x000000, 0xFF0000 }, + { install_lighting, 0x000000, 0x00FF00 }, + { install_lighting, 0x000000, 0x0000FF }, + }; + + canvas->translate(10, 10); + for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { + rec[i].fProc(&paint, rec[i].fData0, rec[i].fData1); + canvas->drawRect(r, paint); + canvas->translate(0, r.height() + 10); + } + } + +private: + SkString fName; + typedef GM INHERITED; +}; + + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM( return SkNEW(ColorFiltersGM); ) + diff --git a/gyp/gmslides.gypi b/gyp/gmslides.gypi index 30fd5e6b30..ca3a7f6e66 100644 --- a/gyp/gmslides.gypi +++ b/gyp/gmslides.gypi @@ -43,6 +43,7 @@ '../gm/clippedbitmapshaders.cpp', '../gm/coloremoji.cpp', '../gm/colorfilterimagefilter.cpp', + '../gm/colorfilters.cpp', '../gm/colormatrix.cpp', '../gm/colortype.cpp', '../gm/complexclip.cpp', -- cgit v1.2.3