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,
sk_sp<PaintFilter> FEImage::CreateImageFilterForLayoutObject(
const LayoutObject& layout_object) {
FloatRect dst_rect = FilterPrimitiveSubregion();
FloatRect dst_rect =
GetFilter()->MapLocalRectToAbsoluteRect(FilterPrimitiveSubregion());
AffineTransform transform;
auto* context_node = To<SVGElement>(layout_object.GetNode());
......@@ -190,7 +191,8 @@ sk_sp<PaintFilter> FEImage::CreateImageFilter() {
}
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);
......
......@@ -34,18 +34,21 @@ FloatRect FETile::MapInputs(const FloatRect& rect) const {
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> input(paint_filter_builder::Build(
InputEffect(0), OperatingInterpolationSpace()));
if (!input)
return nullptr;
FloatRect src_rect;
if (InputEffect(0)->GetFilterEffectType() == kFilterEffectTypeSourceInput)
src_rect = GetFilter()->FilterRegion();
else
src_rect = InputEffect(0)->FilterPrimitiveSubregion();
FloatRect dst_rect = FilterPrimitiveSubregion();
FloatRect src_rect = GetFilter()->MapLocalRectToAbsoluteRect(GetSourceRect());
FloatRect dst_rect =
GetFilter()->MapLocalRectToAbsoluteRect(FilterPrimitiveSubregion());
return sk_make_sp<TilePaintFilter>(src_rect, dst_rect, std::move(input));
}
......
......@@ -40,6 +40,7 @@ class PLATFORM_EXPORT FETile final : public FilterEffect {
}
FloatRect MapInputs(const FloatRect&) const final;
FloatRect GetSourceRect() const;
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