Chromium Code Reviews| Index: src/effects/SkTileImageFilter.cpp |
| diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp |
| index 8d158013879a7bf23097c75a2ce241f49816bad6..883efd4137912c3863340f32ca01898ea9dee085 100644 |
| --- a/src/effects/SkTileImageFilter.cpp |
| +++ b/src/effects/SkTileImageFilter.cpp |
| @@ -54,15 +54,30 @@ bool SkTileImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src, |
| srcRect.roundOut(&srcIRect); |
| srcIRect.offset(-srcOffset); |
| SkBitmap subset; |
| - SkIRect bounds; |
| - source.getBounds(&bounds); |
| + SkIRect srcBounds; |
| + source.getBounds(&srcBounds); |
| - if (!srcIRect.intersect(bounds)) { |
| + if (!SkIRect::Intersects(srcIRect, srcBounds)) { |
| offset->fX = offset->fY = 0; |
| return true; |
| - } else if (!source.extractSubset(&subset, srcIRect)) { |
| - return false; |
| } |
| + if (srcBounds.contains(srcIRect)) { |
| + if (!source.extractSubset(&subset, srcIRect)) { |
| + return false; |
| + } |
| + } else { |
|
robertphillips
2016/01/11 13:31:54
\n somewhere ?
Maybe "static bool kWillTiledResult
Stephen White
2016/01/11 16:20:30
Done.
|
| + SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(srcIRect.width(), srcIRect.height(), true)); |
| + if (!device) { |
| + return false; |
| + } |
| + SkCanvas canvas(device); |
| + canvas.clear(0x0); |
|
reed1
2016/01/10 02:25:02
is the clear needed? I thought our devices were al
Stephen White
2016/01/11 16:20:30
I wasn't sure either. Removed and the tests seem o
|
| + canvas.drawBitmap(src, SkIntToScalar(srcOffset.x()), |
| + SkIntToScalar(srcOffset.y())); |
| + subset = device->accessBitmap(false); |
| + } |
| + SkASSERT(subset.width() == srcIRect.width()); |
| + SkASSERT(subset.height() == srcIRect.height()); |
| SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(w, h)); |
| if (nullptr == device.get()) { |
| @@ -72,12 +87,8 @@ bool SkTileImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src, |
| SkPaint paint; |
| paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| - SkMatrix shaderMatrix; |
| - shaderMatrix.setTranslate(SkIntToScalar(srcOffset.fX), |
| - SkIntToScalar(srcOffset.fY)); |
| SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(subset, |
| - SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, |
| - &shaderMatrix)); |
| + SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode)); |
| paint.setShader(shader); |
| canvas.translate(-dstRect.fLeft, -dstRect.fTop); |
| canvas.drawRect(dstRect, paint); |