| Index: src/effects/SkTileImageFilter.cpp
|
| diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp
|
| index 64e9a43f5a81804c070058fe9bc0719ad9e41ca9..2b7ed940d244ae9b333206b922ff6e7501931d77 100644
|
| --- a/src/effects/SkTileImageFilter.cpp
|
| +++ b/src/effects/SkTileImageFilter.cpp
|
| @@ -27,27 +27,19 @@
|
| bool SkTileImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| const Context& ctx,
|
| SkBitmap* dst, SkIPoint* offset) const {
|
| + SkBitmap source = src;
|
| + SkImageFilter* input = getInput(0);
|
| + SkIPoint srcOffset = SkIPoint::Make(0, 0);
|
| + if (input && !input->filterImage(proxy, src, ctx, &source, &srcOffset)) {
|
| + return false;
|
| + }
|
|
|
| SkRect dstRect;
|
| ctx.ctm().mapRect(&dstRect, fDstRect);
|
| const SkIRect dstIRect = dstRect.roundOut();
|
| - if (fSrcRect.isEmpty() || dstIRect.isEmpty()) {
|
| - return false;
|
| - }
|
| -
|
| - // TODO: the actual clip that needs to be applied to the src should be (roughly) determined by:
|
| - // intersect ctx.clip and dstIRect
|
| - // determine if that rect lies wholly inside fSrcRect
|
| - // if so pass it on as the clip
|
| - // if not pass the entire fSrcRect as the clip
|
| - // For now don't apply any clip to the source (since it is usually very small and all of it
|
| - // will be required anyway).
|
| - Context srcCtx(ctx.ctm(), SkIRect::MakeLargest(), ctx.cache());
|
| -
|
| - SkBitmap source = src;
|
| - SkImageFilter* input = this->getInput(0);
|
| - SkIPoint srcOffset = SkIPoint::Make(0, 0);
|
| - if (input && !input->filterImage(proxy, src, srcCtx, &source, &srcOffset)) {
|
| + int w = dstIRect.width();
|
| + int h = dstIRect.height();
|
| + if (!fSrcRect.width() || !fSrcRect.height() || !w || !h) {
|
| return false;
|
| }
|
|
|
| @@ -67,7 +59,7 @@
|
| return false;
|
| }
|
|
|
| - SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(dstIRect.width(), dstIRect.height()));
|
| + SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(w, h));
|
| if (NULL == device.get()) {
|
| return false;
|
| }
|
| @@ -124,13 +116,12 @@
|
| #ifndef SK_IGNORE_TO_STRING
|
| void SkTileImageFilter::toString(SkString* str) const {
|
| str->appendf("SkTileImageFilter: (");
|
| - this->getCropRect().toString(str);
|
| 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: (");
|
| + str->appendf("input: (");
|
| this->getInput(0)->toString(str);
|
| str->appendf(")");
|
| }
|
|
|