Commit 663f028b authored by Fredrik Söderquist's avatar Fredrik Söderquist Committed by Commit Bot

Fix zoom-handling for <feTile> and <feImage>

Need to apply zoom to the destination rectangle in both cases, and
the source rectangle for the <feTile> case (since it reads from its
input).

Fixed: 1051526
Change-Id: I9b2376059bd2ceb95b94ff23132020bc43886e0e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2052123Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#741018}
parent a1e5b1b8
...@@ -143,7 +143,8 @@ WTF::TextStream& FEImage::ExternalRepresentation(WTF::TextStream& ts, ...@@ -143,7 +143,8 @@ WTF::TextStream& FEImage::ExternalRepresentation(WTF::TextStream& ts,
sk_sp<PaintFilter> FEImage::CreateImageFilterForLayoutObject( sk_sp<PaintFilter> FEImage::CreateImageFilterForLayoutObject(
const LayoutObject& layout_object) { const LayoutObject& layout_object) {
FloatRect dst_rect = FilterPrimitiveSubregion(); FloatRect dst_rect =
GetFilter()->MapLocalRectToAbsoluteRect(FilterPrimitiveSubregion());
AffineTransform transform; AffineTransform transform;
auto* context_node = To<SVGElement>(layout_object.GetNode()); auto* context_node = To<SVGElement>(layout_object.GetNode());
...@@ -190,7 +191,8 @@ sk_sp<PaintFilter> FEImage::CreateImageFilter() { ...@@ -190,7 +191,8 @@ sk_sp<PaintFilter> FEImage::CreateImageFilter() {
} }
FloatRect src_rect = FloatRect(FloatPoint(), FloatSize(image_->Size())); FloatRect src_rect = FloatRect(FloatPoint(), FloatSize(image_->Size()));
FloatRect dst_rect = FilterPrimitiveSubregion(); FloatRect dst_rect =
GetFilter()->MapLocalRectToAbsoluteRect(FilterPrimitiveSubregion());
preserve_aspect_ratio_->TransformRect(dst_rect, src_rect); preserve_aspect_ratio_->TransformRect(dst_rect, src_rect);
......
...@@ -34,18 +34,21 @@ FloatRect FETile::MapInputs(const FloatRect& rect) const { ...@@ -34,18 +34,21 @@ FloatRect FETile::MapInputs(const FloatRect& rect) const {
return AbsoluteBounds(); return AbsoluteBounds();
} }
FloatRect FETile::GetSourceRect() const {
const FilterEffect* input = InputEffect(0);
if (input->GetFilterEffectType() == kFilterEffectTypeSourceInput)
return GetFilter()->FilterRegion();
return input->FilterPrimitiveSubregion();
}
sk_sp<PaintFilter> FETile::CreateImageFilter() { sk_sp<PaintFilter> FETile::CreateImageFilter() {
sk_sp<PaintFilter> input(paint_filter_builder::Build( sk_sp<PaintFilter> input(paint_filter_builder::Build(
InputEffect(0), OperatingInterpolationSpace())); InputEffect(0), OperatingInterpolationSpace()));
if (!input) if (!input)
return nullptr; return nullptr;
FloatRect src_rect = GetFilter()->MapLocalRectToAbsoluteRect(GetSourceRect());
FloatRect src_rect; FloatRect dst_rect =
if (InputEffect(0)->GetFilterEffectType() == kFilterEffectTypeSourceInput) GetFilter()->MapLocalRectToAbsoluteRect(FilterPrimitiveSubregion());
src_rect = GetFilter()->FilterRegion();
else
src_rect = InputEffect(0)->FilterPrimitiveSubregion();
FloatRect dst_rect = FilterPrimitiveSubregion();
return sk_make_sp<TilePaintFilter>(src_rect, dst_rect, std::move(input)); return sk_make_sp<TilePaintFilter>(src_rect, dst_rect, std::move(input));
} }
......
...@@ -40,6 +40,7 @@ class PLATFORM_EXPORT FETile final : public FilterEffect { ...@@ -40,6 +40,7 @@ class PLATFORM_EXPORT FETile final : public FilterEffect {
} }
FloatRect MapInputs(const FloatRect&) const final; FloatRect MapInputs(const FloatRect&) const final;
FloatRect GetSourceRect() const;
sk_sp<PaintFilter> CreateImageFilter() override; sk_sp<PaintFilter> CreateImageFilter() override;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment