diff --git a/gm/bigtileimagefilter.cpp b/gm/bigtileimagefilter.cpp new file mode 100644 index 0000000000..97de0d2042 --- /dev/null +++ b/gm/bigtileimagefilter.cpp @@ -0,0 +1,76 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkBitmapSource.h" +#include "SkTileImageFilter.h" +#include "gm.h" + +namespace skiagm { + +class BigTileImageFilterGM : public GM { +public: + BigTileImageFilterGM() { + this->setBGColor(0xFF000000); + } + +protected: + + SkString onShortName() override { + return SkString("bigtileimagefilter"); + } + + SkISize onISize() override{ + return SkISize::Make(kWidth, kHeight); + } + + void onOnceBeforeDraw() override { + fBitmap.allocN32Pixels(kBitmapSize, kBitmapSize); + + SkCanvas canvas(fBitmap); + canvas.clear(0xFF000000); + + SkPaint paint; + paint.setColor(SK_ColorRED); + paint.setStrokeWidth(3); + paint.setStyle(SkPaint::kStroke_Style); + + canvas.drawCircle(SkScalarHalf(kBitmapSize), SkScalarHalf(kBitmapSize), + SkScalarHalf(kBitmapSize), paint); + } + + void onDraw(SkCanvas* canvas) override { + canvas->clear(SK_ColorBLACK); + + SkPaint p; + + SkAutoTUnref bms(SkBitmapSource::Create(fBitmap)); + SkAutoTUnref tif(SkTileImageFilter::Create( + SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize)), + SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(kHeight)), + bms)); + p.setImageFilter(tif); + + SkRect bound = SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(kHeight)); + canvas->saveLayer(&bound, &p); + canvas->restore(); + } + +private: + static const int kWidth = 512; + static const int kHeight = 512; + static const int kBitmapSize = 64; + + SkBitmap fBitmap; + + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM( return SkNEW(BigTileImageFilterGM); ) + +} diff --git a/gm/tileimagefilter.cpp b/gm/tileimagefilter.cpp index 2c4f6b2b2c..82393087b0 100644 --- a/gm/tileimagefilter.cpp +++ b/gm/tileimagefilter.cpp @@ -16,46 +16,48 @@ #define HEIGHT 100 #define MARGIN 12 +static SkBitmap make_bitmap() { + SkBitmap bitmap; + bitmap.allocN32Pixels(50, 50); + SkCanvas canvas(bitmap); + canvas.clear(0xFF000000); + SkPaint paint; + paint.setAntiAlias(true); + sk_tool_utils::set_portable_typeface(&paint); + paint.setColor(0xD000D000); + paint.setTextSize(SkIntToScalar(50)); + const char* str = "e"; + canvas.drawText(str, strlen(str), SkIntToScalar(10), SkIntToScalar(45), paint); + return bitmap; +} + + namespace skiagm { class TileImageFilterGM : public GM { public: - TileImageFilterGM() : fInitialized(false) { + TileImageFilterGM() { this->setBGColor(0xFF000000); } protected: - virtual SkString onShortName() { + SkString onShortName() override { return SkString("tileimagefilter"); } - void make_bitmap() { - fBitmap.allocN32Pixels(50, 50); - SkCanvas canvas(fBitmap); - canvas.clear(0xFF000000); - SkPaint paint; - paint.setAntiAlias(true); - sk_tool_utils::set_portable_typeface(&paint); - paint.setColor(0xD000D000); - paint.setTextSize(SkIntToScalar(50)); - const char* str = "e"; - canvas.drawText(str, strlen(str), SkIntToScalar(10), SkIntToScalar(45), paint); - } - - virtual SkISize onISize() { + SkISize onISize() override{ return SkISize::Make(WIDTH, HEIGHT); } - virtual void onDraw(SkCanvas* canvas) { - if (!fInitialized) { - make_bitmap(); + void onOnceBeforeDraw() override { + fBitmap = make_bitmap(); - fCheckerboard.allocN32Pixels(80, 80); - SkCanvas checkerboardCanvas(fCheckerboard); - sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0xFF404040, 8); + fCheckerboard.allocN32Pixels(80, 80); + SkCanvas checkerboardCanvas(fCheckerboard); + sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0xFF404040, 8); + } - fInitialized = true; - } + void onDraw(SkCanvas* canvas) override { canvas->clear(SK_ColorBLACK); int x = 0, y = 0; @@ -109,14 +111,14 @@ protected: canvas->restore(); } private: + SkBitmap fBitmap; + SkBitmap fCheckerboard; + typedef GM INHERITED; - SkBitmap fBitmap, fCheckerboard; - bool fInitialized; }; ////////////////////////////////////////////////////////////////////////////// -static GM* MyFactory(void*) { return new TileImageFilterGM; } -static GMRegistry reg(MyFactory); +DEF_GM( return SkNEW(TileImageFilterGM); ) } diff --git a/include/effects/SkTileImageFilter.h b/include/effects/SkTileImageFilter.h index a010205121..f695355675 100644 --- a/include/effects/SkTileImageFilter.h +++ b/include/effects/SkTileImageFilter.h @@ -22,10 +22,10 @@ public: static SkTileImageFilter* Create(const SkRect& srcRect, const SkRect& dstRect, SkImageFilter* input); - virtual bool onFilterImage(Proxy* proxy, const SkBitmap& src, const Context& ctx, - SkBitmap* dst, SkIPoint* offset) const override; - virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&, - SkIRect* dst) const override; + bool onFilterImage(Proxy* proxy, const SkBitmap& src, const Context& ctx, + SkBitmap* dst, SkIPoint* offset) const override; + bool onFilterBounds(const SkIRect& src, const SkMatrix&, + SkIRect* dst) const override; SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTileImageFilter) diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp index c5cf51871d..b2244b9629 100644 --- a/src/effects/SkTileImageFilter.cpp +++ b/src/effects/SkTileImageFilter.cpp @@ -110,6 +110,15 @@ void SkTileImageFilter::flatten(SkWriteBuffer& buffer) const { #ifndef SK_IGNORE_TO_STRING void SkTileImageFilter::toString(SkString* str) const { str->appendf("SkTileImageFilter: ("); + str->appendf("src: %.2f %.2f %.2f %.2f", + fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBottom); + str->appendf(" dst: %.2f %.2f %.2f %.2f", + fDstRect.fLeft, fDstRect.fTop, fDstRect.fRight, fDstRect.fBottom); + if (this->getInput(0)) { + str->appendf("input: ("); + this->getInput(0)->toString(str); + str->appendf(")"); + } str->append(")"); } #endif diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index f98247a2f4..599fd42b12 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -105,7 +105,18 @@ void SkXfermodeImageFilter::toString(SkString* str) const { if (fMode) { fMode->toString(str); } - str->append("))"); + str->append(")"); + if (this->getInput(0)) { + str->appendf("foreground: ("); + this->getInput(0)->toString(str); + str->appendf(")"); + } + if (this->getInput(1)) { + str->appendf("background: ("); + this->getInput(1)->toString(str); + str->appendf(")"); + } + str->append(")"); } #endif