| Index: third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp b/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| index 2325bb9190dc9028716bb811fcab63499840e4bc..ad855b30357fd27c6c27472a620226cd8403b55d 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| @@ -110,11 +110,11 @@ sk_sp<SkImageFilter> TransformInterpolationSpace(
|
| }
|
|
|
| void BuildSourceGraphic(FilterEffect* source_graphic,
|
| - sk_sp<PaintRecord> record,
|
| - const FloatRect& record_bounds) {
|
| + sk_sp<PaintRecord> record) {
|
| DCHECK(record);
|
| + SkRect cull_rect = record->cullRect();
|
| sk_sp<SkImageFilter> filter =
|
| - SkPictureImageFilter::Make(ToSkPicture(record, record_bounds));
|
| + SkPictureImageFilter::Make(ToSkPicture(record), cull_rect);
|
| PopulateSourceGraphicImageFilters(
|
| source_graphic, std::move(filter),
|
| source_graphic->OperatingInterpolationSpace());
|
| @@ -131,35 +131,34 @@ sk_sp<SkImageFilter> BuildBoxReflectFilter(const BoxReflection& reflection,
|
| // raster the mask to a bitmap, then encode it in an SkImageSource, which
|
| // can be serialized.
|
| SkBitmap bitmap;
|
| - const SkRect mask_record_bounds = reflection.MaskBounds();
|
| - if (mask_record_bounds.width() * mask_record_bounds.height() <
|
| + const SkRect cull_rect = mask_record->cullRect();
|
| + if (static_cast<float>(cull_rect.width()) *
|
| + static_cast<float>(cull_rect.height()) <
|
| kMaxMaskBufferSize) {
|
| - bitmap.allocPixels(SkImageInfo::MakeN32Premul(
|
| - mask_record_bounds.width(), mask_record_bounds.height()));
|
| + bitmap.allocPixels(
|
| + SkImageInfo::MakeN32Premul(cull_rect.width(), cull_rect.height()));
|
| SkiaPaintCanvas canvas(bitmap);
|
| canvas.clear(SK_ColorTRANSPARENT);
|
| - canvas.translate(-mask_record_bounds.x(), -mask_record_bounds.y());
|
| + canvas.translate(-cull_rect.x(), -cull_rect.y());
|
| canvas.drawPicture(mask_record);
|
| sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap);
|
|
|
| // SkXfermodeImageFilter can choose an excessively large size if the
|
| // mask is smaller than the filtered contents (due to overflow).
|
| // http://skbug.com/5210
|
| - SkImageFilter::CropRect crop_rect(mask_record_bounds);
|
| + SkImageFilter::CropRect crop_rect(mask_record->cullRect());
|
| masked_input = SkXfermodeImageFilter::Make(
|
| SkBlendMode::kSrcIn,
|
| - SkOffsetImageFilter::Make(mask_record_bounds.x(),
|
| - mask_record_bounds.y(),
|
| + SkOffsetImageFilter::Make(cull_rect.x(), cull_rect.y(),
|
| SkImageSource::Make(image)),
|
| input, &crop_rect);
|
| } else {
|
| // If the buffer is excessively big, give up and make an
|
| // SkPictureImageFilter anyway, even if it might not render.
|
| - SkImageFilter::CropRect crop_rect(mask_record_bounds);
|
| + SkImageFilter::CropRect crop_rect(mask_record->cullRect());
|
| masked_input = SkXfermodeImageFilter::Make(
|
| SkBlendMode::kSrcOver,
|
| - SkPictureImageFilter::Make(
|
| - ToSkPicture(std::move(mask_record), mask_record_bounds)),
|
| + SkPictureImageFilter::Make(ToSkPicture(std::move(mask_record))),
|
| input, &crop_rect);
|
| }
|
| } else {
|
|
|