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

Make LayoutSVGResource*::ResourceBoundingBox uniform

The LayoutSVGResourceFilter and LayoutSVGResourceMasker versions was
taking const LayoutObject* while the one on LayoutSVGResourceClipper
took a const FloatRect&. Align the two former with the later - thus
eliminating unnecessary dependencies on the client.

Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I26dcfb5ba9d164e4c5f97b9063cac8b6281cd6e6
Reviewed-on: https://chromium-review.googlesource.com/1243193
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594051}
parent ab28cbdc
......@@ -85,10 +85,10 @@ bool LayoutSVGResourceFilter::RemoveClientFromCache(SVGResourceClient& client) {
}
FloatRect LayoutSVGResourceFilter::ResourceBoundingBox(
const LayoutObject* object) {
const FloatRect& reference_box) const {
const auto* filter_element = ToSVGFilterElement(GetElement());
return SVGLengthContext::ResolveRectangle(filter_element, FilterUnits(),
object->ObjectBoundingBox());
reference_box);
}
SVGUnitTypes::SVGUnitType LayoutSVGResourceFilter::FilterUnits() const {
......
......@@ -82,7 +82,7 @@ class LayoutSVGResourceFilter final : public LayoutSVGResourceContainer {
void RemoveAllClientsFromCache(bool mark_for_invalidation = true) override;
bool RemoveClientFromCache(SVGResourceClient&) override;
FloatRect ResourceBoundingBox(const LayoutObject*);
FloatRect ResourceBoundingBox(const FloatRect& reference_box) const;
SVGUnitTypes::SVGUnitType FilterUnits() const;
SVGUnitTypes::SVGUnitType PrimitiveUnits() const;
......
......@@ -110,13 +110,12 @@ SVGUnitTypes::SVGUnitType LayoutSVGResourceMasker::MaskContentUnits() const {
}
FloatRect LayoutSVGResourceMasker::ResourceBoundingBox(
const LayoutObject* object) {
const FloatRect& reference_box) {
SVGMaskElement* mask_element = ToSVGMaskElement(GetElement());
DCHECK(mask_element);
FloatRect object_bounding_box = object->ObjectBoundingBox();
FloatRect mask_boundaries = SVGLengthContext::ResolveRectangle(
mask_element, MaskUnits(), object_bounding_box);
mask_element, MaskUnits(), reference_box);
// Resource was not layouted yet. Give back clipping rect of the mask.
if (SelfNeedsLayout())
......@@ -128,9 +127,8 @@ FloatRect LayoutSVGResourceMasker::ResourceBoundingBox(
FloatRect mask_rect = mask_content_boundaries_;
if (MaskContentUnits() == SVGUnitTypes::kSvgUnitTypeObjectboundingbox) {
AffineTransform transform;
transform.Translate(object_bounding_box.X(), object_bounding_box.Y());
transform.ScaleNonUniform(object_bounding_box.Width(),
object_bounding_box.Height());
transform.Translate(reference_box.X(), reference_box.Y());
transform.ScaleNonUniform(reference_box.Width(), reference_box.Height());
mask_rect = transform.MapRect(mask_rect);
}
......
......@@ -40,7 +40,7 @@ class LayoutSVGResourceMasker final : public LayoutSVGResourceContainer {
void RemoveAllClientsFromCache(bool mark_for_invalidation = true) override;
FloatRect ResourceBoundingBox(const LayoutObject*);
FloatRect ResourceBoundingBox(const FloatRect& reference_box);
SVGUnitTypes::SVGUnitType MaskUnits() const;
SVGUnitTypes::SVGUnitType MaskContentUnits() const;
......
......@@ -392,16 +392,20 @@ void SVGLayoutSupport::AdjustVisualRectWithResources(
if (!resources)
return;
if (LayoutSVGResourceFilter* filter = resources->Filter())
visual_rect = filter->ResourceBoundingBox(&layout_object);
if (LayoutSVGResourceFilter* filter = resources->Filter()) {
visual_rect =
filter->ResourceBoundingBox(layout_object.ObjectBoundingBox());
}
if (LayoutSVGResourceClipper* clipper = resources->Clipper()) {
visual_rect.Intersect(
clipper->ResourceBoundingBox(layout_object.ObjectBoundingBox()));
}
if (LayoutSVGResourceMasker* masker = resources->Masker())
visual_rect.Intersect(masker->ResourceBoundingBox(&layout_object));
if (LayoutSVGResourceMasker* masker = resources->Masker()) {
visual_rect.Intersect(
masker->ResourceBoundingBox(layout_object.ObjectBoundingBox()));
}
}
bool SVGLayoutSupport::HasFilterResource(const LayoutObject& object) {
......
......@@ -735,6 +735,7 @@ void WriteResources(WTF::TextStream& ts,
SVGResourcesCache::CachedResourcesForLayoutObject(object);
if (!resources)
return;
const FloatRect reference_box = object.ObjectBoundingBox();
const ComputedStyle& style = object.StyleRef();
TreeScope& tree_scope = object.GetDocument();
if (LayoutSVGResourceMasker* masker = resources->Masker()) {
......@@ -744,7 +745,7 @@ void WriteResources(WTF::TextStream& ts,
tree_scope);
ts << " ";
WriteStandardPrefix(ts, *masker, 0);
ts << " " << masker->ResourceBoundingBox(&object) << "\n";
ts << " " << masker->ResourceBoundingBox(reference_box) << "\n";
}
if (LayoutSVGResourceClipper* clipper = resources->Clipper()) {
DCHECK(style.ClipPath());
......@@ -758,8 +759,7 @@ void WriteResources(WTF::TextStream& ts,
WriteNameAndQuotedValue(ts, "clipPath", id);
ts << " ";
WriteStandardPrefix(ts, *clipper, 0);
ts << " " << clipper->ResourceBoundingBox(object.ObjectBoundingBox())
<< "\n";
ts << " " << clipper->ResourceBoundingBox(reference_box) << "\n";
}
if (LayoutSVGResourceFilter* filter = resources->Filter()) {
DCHECK(style.HasFilter());
......@@ -775,7 +775,7 @@ void WriteResources(WTF::TextStream& ts,
WriteNameAndQuotedValue(ts, "filter", id);
ts << " ";
WriteStandardPrefix(ts, *filter, 0);
ts << " " << filter->ResourceBoundingBox(&object) << "\n";
ts << " " << filter->ResourceBoundingBox(reference_box) << "\n";
}
}
......
......@@ -22,8 +22,10 @@ base::Optional<IntRect> CSSMaskPainter::MaskBoundingBox(
SVGResources* resources =
SVGResourcesCache::CachedResourcesForLayoutObject(object);
LayoutSVGResourceMasker* masker = resources ? resources->Masker() : nullptr;
if (masker)
return EnclosingIntRect(masker->ResourceBoundingBox(&object));
if (masker) {
return EnclosingIntRect(
masker->ResourceBoundingBox(object.ObjectBoundingBox()));
}
}
if (object.IsSVGChild() && !object.IsSVGForeignObject())
......
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