From 1a4fb70c8a04db2d92ec821555f91218a989031d Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Thu, 26 Sep 2013 16:09:28 +0000 Subject: Moving 4 SkImageFilter derived classes from blink to skia There were 4 classes in blink that derived from SkImageFilter : - TileImageFilter -> SkTileImageFilter - OffsetImageFilter -> SkOffsetImageFilter (already existed) - FloodImageFilter -> SkFloodImageFilter - CompositeImageFilter -> SkCompositeImageFilter All functions were copied as is, without modification (except for warnings fixes), except for the offset filter, which was merged into the existing SkOffsetImageFilter class, as a special case when a crop rect is provided. Since the names won't clash with the names in blink, it should be easy to integrate them in blink later and fix issues, if needed. BUG= R=senorblanco@google.com, senorblanco@chromium.org, bsalomon@google.com, reed@google.com, mtklein@google.com Author: sugoi@chromium.org Review URL: https://chromiumcodereview.appspot.com/24157005 git-svn-id: http://skia.googlecode.com/svn/trunk@11475 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/offsetimagefilter.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 gm/offsetimagefilter.cpp (limited to 'gm/offsetimagefilter.cpp') diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp new file mode 100644 index 0000000000..ee4ae35b43 --- /dev/null +++ b/gm/offsetimagefilter.cpp @@ -0,0 +1,120 @@ +/* + * 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 "SkOffsetImageFilter.h" +#include "SkBitmapSource.h" + +#define WIDTH 400 +#define HEIGHT 100 +#define MARGIN 12 + +namespace skiagm { + +class OffsetImageFilterGM : public GM { +public: + OffsetImageFilterGM() : fInitialized(false) { + this->setBGColor(0xFF000000); + } + +protected: + virtual SkString onShortName() { + return SkString("offsetimagefilter"); + } + + void make_bitmap() { + fBitmap.setConfig(SkBitmap::kARGB_8888_Config, 80, 80); + fBitmap.allocPixels(); + SkBitmapDevice device(fBitmap); + SkCanvas canvas(&device); + canvas.clear(0x00000000); + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(0xD000D000); + paint.setTextSize(SkIntToScalar(96)); + const char* str = "e"; + canvas.drawText(str, strlen(str), SkIntToScalar(15), SkIntToScalar(65), paint); + } + + void make_checkerboard() { + fCheckerboard.setConfig(SkBitmap::kARGB_8888_Config, 80, 80); + fCheckerboard.allocPixels(); + SkBitmapDevice device(fCheckerboard); + SkCanvas canvas(&device); + canvas.clear(0x00000000); + SkPaint darkPaint; + darkPaint.setColor(0xFF404040); + SkPaint lightPaint; + lightPaint.setColor(0xFFA0A0A0); + for (int y = 0; y < 80; y += 16) { + for (int x = 0; x < 80; x += 16) { + canvas.save(); + canvas.translate(SkIntToScalar(x), SkIntToScalar(y)); + canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint); + canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint); + canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint); + canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint); + canvas.restore(); + } + } + } + + virtual SkISize onISize() { + return make_isize(WIDTH, HEIGHT); + } + + void drawClippedBitmap(SkCanvas* canvas, const SkBitmap& bitmap, const SkPaint& paint, + SkScalar x, SkScalar y) { + canvas->save(); + canvas->clipRect(SkRect::MakeXYWH(x, y, + SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height()))); + canvas->drawBitmap(bitmap, x, y, &paint); + canvas->restore(); + } + + virtual void onDraw(SkCanvas* canvas) { + if (!fInitialized) { + make_bitmap(); + make_checkerboard(); + fInitialized = true; + } + canvas->clear(0x00000000); + SkPaint paint; + + int x = 0, y = 0; + for (size_t i = 0; i < 4; i++) { + SkBitmap* bitmap = (i & 0x01) ? &fCheckerboard : &fBitmap; + SkIRect cropRect = SkIRect::MakeXYWH(x + i * 12, + y + i * 8, + bitmap->width() - i * 8, + bitmap->height() - i * 12); + SkAutoTUnref tileInput(SkNEW_ARGS(SkBitmapSource, (*bitmap))); + SkScalar dx = SkIntToScalar(i*5); + SkScalar dy = SkIntToScalar(i*10); + SkAutoTUnref filter(SkNEW_ARGS( + SkOffsetImageFilter, (dx, dy, tileInput, &cropRect))); + paint.setImageFilter(filter); + drawClippedBitmap(canvas, *bitmap, paint, SkIntToScalar(x), SkIntToScalar(y)); + x += bitmap->width() + MARGIN; + if (x + bitmap->width() > WIDTH) { + x = 0; + y += bitmap->height() + MARGIN; + } + } + } +private: + typedef GM INHERITED; + SkBitmap fBitmap, fCheckerboard; + bool fInitialized; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new OffsetImageFilterGM; } +static GMRegistry reg(MyFactory); + +} -- cgit v1.2.3