Revert of Fix dst bound reported by SkTileImageFilter (patchset #3 id:40001 of https://codereview.chromium.org/1152553006/)
Reason for revert:
breaking tests
Original issue's description:
> Fix dst bound reported by SkTileImageFilter
>
> In the example from the bug we had the filter DAG:
>
> color filter (table)
> 0: xfermode filter (arith)
> 0: tile filter [0,80,34,114] -> [0,80,800,480]
> 0: color filter (table)
> 0: bitmap src 34x34 -> [0,80,34,114]
> 1: color filter (table)
> 0: picture filter [0, 80, 800, 480]
>
> computeFastBounds was coming out of the DAG with a bound of [0,80,34,114] which didn't represent the pixels that would be drawn.
>
> This CL updates SkTileImageFilter to correctly set the bound for the pixels it will hit.
>
> BUG=493783
>
> Committed: https://skia.googlesource.com/skia/+/05be93bbdf09576f7903130e3b106b0a8c7c4b4e
TBR=reed@google.com,senorblanco@google.com,senorblanco@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=493783
Review URL: https://codereview.chromium.org/1143083006
diff --git a/gm/bigtileimagefilter.cpp b/gm/bigtileimagefilter.cpp
deleted file mode 100644
index 97de0d2..0000000
--- a/gm/bigtileimagefilter.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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<SkBitmapSource> bms(SkBitmapSource::Create(fBitmap));
- SkAutoTUnref<SkTileImageFilter> 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 8239308..2c4f6b2 100644
--- a/gm/tileimagefilter.cpp
+++ b/gm/tileimagefilter.cpp
@@ -16,48 +16,46 @@
#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() {
+ TileImageFilterGM() : fInitialized(false) {
this->setBGColor(0xFF000000);
}
protected:
- SkString onShortName() override {
+ virtual SkString onShortName() {
return SkString("tileimagefilter");
}
- SkISize onISize() override{
+ 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() {
return SkISize::Make(WIDTH, HEIGHT);
}
- void onOnceBeforeDraw() override {
- fBitmap = make_bitmap();
+ virtual void onDraw(SkCanvas* canvas) {
+ if (!fInitialized) {
+ 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);
- void onDraw(SkCanvas* canvas) override {
+ fInitialized = true;
+ }
canvas->clear(SK_ColorBLACK);
int x = 0, y = 0;
@@ -111,14 +109,14 @@
canvas->restore();
}
private:
- SkBitmap fBitmap;
- SkBitmap fCheckerboard;
-
typedef GM INHERITED;
+ SkBitmap fBitmap, fCheckerboard;
+ bool fInitialized;
};
//////////////////////////////////////////////////////////////////////////////
-DEF_GM( return SkNEW(TileImageFilterGM); )
+static GM* MyFactory(void*) { return new TileImageFilterGM; }
+static GMRegistry reg(MyFactory);
}
diff --git a/include/effects/SkTileImageFilter.h b/include/effects/SkTileImageFilter.h
index 4dccf85..a010205 100644
--- a/include/effects/SkTileImageFilter.h
+++ b/include/effects/SkTileImageFilter.h
@@ -22,11 +22,10 @@
static SkTileImageFilter* Create(const SkRect& srcRect, const SkRect& dstRect,
SkImageFilter* input);
- 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;
- void computeFastBounds(const SkRect& src, SkRect* dst) const override;
+ 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;
SK_TO_STRING_OVERRIDE()
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTileImageFilter)
diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp
index 6acf9fd..c5cf518 100644
--- a/src/effects/SkTileImageFilter.cpp
+++ b/src/effects/SkTileImageFilter.cpp
@@ -82,10 +82,6 @@
return true;
}
-void SkTileImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const {
- *dst = fDstRect;
-}
-
bool SkTileImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
SkIRect* dst) const {
SkRect srcRect;
@@ -114,15 +110,6 @@
#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 599fd42..f98247a 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -105,18 +105,7 @@
if (fMode) {
fMode->toString(str);
}
- 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(")");
+ str->append("))");
}
#endif