add gm: colorwheel

BUG=skia:3061

Review URL: https://codereview.chromium.org/680533002
This commit is contained in:
halcanary 2014-10-26 05:23:53 -07:00 committed by Commit bot
parent 86217d831d
commit 30b83d45a3
5 changed files with 88 additions and 1 deletions

57
gm/colorwheel.cpp Normal file
View File

@ -0,0 +1,57 @@
/*
* 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 "Resources.h"
#include "SkData.h"
#include "SkDecodingImageGenerator.h"
#include "gm.h"
static void checkerboard(
SkCanvas* canvas, int w, int h, int size, SkColor c1, SkColor c2) {
SkAutoCanvasRestore autoCanvasRestore(canvas, true);
canvas->clipRect(SkRect::MakeWH(SkIntToScalar(w), SkIntToScalar(h)));
canvas->drawColor(c1);
SkPaint paint;
paint.setColor(c2);
SkScalar s = SkIntToScalar(size);
for (int y = 0; y < h; y += size) {
SkScalar ty = SkIntToScalar(y);
bool oddRow = (y % (2 * size)) != 0;
for (int x = oddRow ? size : 0; x < w; x += (2 * size)) {
SkScalar tx = SkIntToScalar(x);
canvas->drawRect(SkRect::MakeXYWH(tx, ty, s, s), paint);
}
}
}
static void draw_bitmap(SkCanvas* canvas, const char* resource, int x, int y) {
SkBitmap bitmap;
if (GetResourceAsBitmap(resource, &bitmap)) {
canvas->drawBitmap(bitmap, SkIntToScalar(x), SkIntToScalar(y));
} else {
SkDebugf("\nCould not decode file '%s'. Did you forget"
" to set the resourcePath?\n", resource);
}
}
/*
This GM tests whether the image decoders properly decode each color
channel. Four copies of the same image should appear in the GM, and
the letter R should be red, B should be blue, G green, C cyan, M
magenta, Y yellow, and K black. In all but the JPEG version of the
image, the letters should be on a white disc on a transparent
background (rendered as a checkerboard). The JPEG image has a grey
background and compression artifacts.
*/
DEF_SIMPLE_GM(colorwheel, canvas, 256, 256) {
canvas->clear(SK_ColorWHITE);
checkerboard(canvas, 256, 556, 8, 0xFF999999, 0xFF666666);
draw_bitmap(canvas, "color_wheel.png", 0, 0); // top left
draw_bitmap(canvas, "color_wheel.gif", 128, 0); // top right
draw_bitmap(canvas, "color_wheel.webp", 0, 128); // bottom left
draw_bitmap(canvas, "color_wheel.jpg", 128, 128); // bottom right
}

14
gm/gm.h
View File

@ -24,6 +24,20 @@
static skiagm::GM* SK_MACRO_APPEND_LINE(F_)(void*) { code; } \ static skiagm::GM* SK_MACRO_APPEND_LINE(F_)(void*) { code; } \
static skiagm::GMRegistry SK_MACRO_APPEND_LINE(R_)(SK_MACRO_APPEND_LINE(F_)); static skiagm::GMRegistry SK_MACRO_APPEND_LINE(R_)(SK_MACRO_APPEND_LINE(F_));
// See colorwheel.cpp for example usage.
#define DEF_SIMPLE_GM(NAME, CANVAS, W, H) \
class SK_MACRO_CONCAT(NAME, _GM) : public skiagm::GM { \
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE; \
virtual SkISize onISize() SK_OVERRIDE { \
return SkISize::Make((W), (H)); \
} \
virtual SkString onShortName() SK_OVERRIDE { \
return SkString(#NAME); \
} \
}; \
DEF_GM( return SkNEW(SK_MACRO_CONCAT(NAME, _GM)); ) \
void SK_MACRO_CONCAT(NAME, _GM)::onDraw(SkCanvas* CANVAS)
namespace skiagm { namespace skiagm {
class GM { class GM {

View File

@ -49,6 +49,7 @@
'../gm/colorfilters.cpp', '../gm/colorfilters.cpp',
'../gm/colormatrix.cpp', '../gm/colormatrix.cpp',
'../gm/colortype.cpp', '../gm/colortype.cpp',
'../gm/colorwheel.cpp',
'../gm/complexclip.cpp', '../gm/complexclip.cpp',
'../gm/complexclip2.cpp', '../gm/complexclip2.cpp',
'../gm/composeshader.cpp', '../gm/composeshader.cpp',

View File

@ -6,8 +6,10 @@
*/ */
#include "Resources.h" #include "Resources.h"
#include "SkBitmap.h"
#include "SkCommandLineFlags.h" #include "SkCommandLineFlags.h"
#include "SkData.h"
#include "SkDecodingImageGenerator.h"
#include "SkOSFile.h" #include "SkOSFile.h"
DEFINE_string2(resourcePath, i, "resources", "Directory with test resources: images, fonts, etc."); DEFINE_string2(resourcePath, i, "resources", "Directory with test resources: images, fonts, etc.");
@ -19,3 +21,12 @@ SkString GetResourcePath(const char* resource) {
void SetResourcePath(const char* resource) { void SetResourcePath(const char* resource) {
FLAGS_resourcePath.set(0, resource); FLAGS_resourcePath.set(0, resource);
} }
bool GetResourceAsBitmap(const char* resource, SkBitmap* dst) {
SkString resourcePath = GetResourcePath(resource);
SkAutoTUnref<SkData> resourceData(
SkData::NewFromFileName(resourcePath.c_str()));
return resourceData && SkInstallDiscardablePixelRef(
SkDecodingImageGenerator::Create(
resourceData, SkDecodingImageGenerator::Options()), dst);
}

View File

@ -10,7 +10,11 @@
#include "SkString.h" #include "SkString.h"
class SkBitmap;
SkString GetResourcePath(const char* resource = ""); SkString GetResourcePath(const char* resource = "");
void SetResourcePath(const char* ); void SetResourcePath(const char* );
bool GetResourceAsBitmap(const char* resource, SkBitmap* dst);
#endif // Resources_DEFINED #endif // Resources_DEFINED