aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/imageblur.cpp
diff options
context:
space:
mode:
authorGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-11-09 16:05:58 +0000
committerGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-11-09 16:05:58 +0000
commit60014ca38710d3fc265f4376b05c0fefd0e044cf (patch)
treee8d3a0d9228caccd4e0f704175f4340dc4302293 /gm/imageblur.cpp
parent82c7bd8f25682fcacfeea12ed899976504a767ff (diff)
Implement Gaussian blurs for images. The caller creates an an
SkBlurImageFilter, sets it on an SkPaint, passes that paint to saveLayer(), draws the primitives which are to be blurred, then calls restore(), which applies the blur. The blurs have separate sizes in the horizontal and vertical direction. This feature is GPU-only for now. NB: Due to the clipping change, there are slight pixel differences on the blurs_gpu and shadows_gpu tests, so those will require rebaselining on all platforms, as will some of the WebKit layout tests (TBD). Review URL: http://codereview.appspot.com/5322068/ git-svn-id: http://skia.googlecode.com/svn/trunk@2643 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/imageblur.cpp')
-rw-r--r--gm/imageblur.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/gm/imageblur.cpp b/gm/imageblur.cpp
new file mode 100644
index 0000000000..fe9d6c29ac
--- /dev/null
+++ b/gm/imageblur.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2011 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 "SkBlurImageFilter.h"
+
+namespace skiagm {
+
+class ImageBlurGM : public GM {
+public:
+ ImageBlurGM() {
+ this->setBGColor(0xFF000000);
+ }
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("imageblur");
+ }
+
+ virtual SkISize onISize() {
+ return make_isize(500, 500);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPaint paint;
+ paint.setImageFilter(new SkBlurImageFilter(24.0f, 0.0f))->unref();
+ canvas->saveLayer(NULL, &paint);
+ paint.setColor(0xFFFFFFFF);
+ paint.setTextSize(100);
+ paint.setAntiAlias(true);
+ const char* str = "The quick brown fox jumped over the lazy dog.";
+ srand(1234);
+ SkISize size = canvas->getDeviceSize();
+ for (int i = 0; i < 25; ++i) {
+ int x = rand() % size.fWidth;
+ int y = rand() % size.fHeight;
+ paint.setColor(rand() % 0x1000000 | 0xFF000000);
+ paint.setTextSize(rand() % 300);
+ canvas->drawText(str, strlen(str), x, y, paint);
+ }
+ canvas->restore();
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new ImageBlurGM; }
+static GMRegistry reg(MyFactory);
+
+}