Commit db41bb45 authored by pdr's avatar pdr Committed by Commit bot

Clarify how LayoutSVGResourceMarker's m_viewport interacts with refX/refY

Because refX and refY are in the coordinate space of each marker instance,
they are included in markerTransformation() instead of being part of the
marker viewport. As a result, only a viewport size is maintained in
LayoutSVGResourceMarker. This patch makes this distinction a little
clearer by refactoring m_viewport to m_viewportSize, as well as adding
some comments.

No new tests; no change in behavior.

Review-Url: https://codereview.chromium.org/2567853002
Cr-Commit-Position: refs/heads/master@{#437803}
parent 13170195
...@@ -73,8 +73,7 @@ FloatRect LayoutSVGResourceMarker::markerBoundaries( ...@@ -73,8 +73,7 @@ FloatRect LayoutSVGResourceMarker::markerBoundaries(
} }
AffineTransform LayoutSVGResourceMarker::localToSVGParentTransform() const { AffineTransform LayoutSVGResourceMarker::localToSVGParentTransform() const {
return AffineTransform::translation(m_viewport.x(), m_viewport.y()) * return viewportTransform();
viewportTransform();
} }
FloatPoint LayoutSVGResourceMarker::referencePoint() const { FloatPoint LayoutSVGResourceMarker::referencePoint() const {
...@@ -117,8 +116,8 @@ AffineTransform LayoutSVGResourceMarker::markerTransformation( ...@@ -117,8 +116,8 @@ AffineTransform LayoutSVGResourceMarker::markerTransformation(
transform.rotate(orientType() == SVGMarkerOrientAngle ? angle() : autoAngle); transform.rotate(orientType() == SVGMarkerOrientAngle ? angle() : autoAngle);
transform.scale(markerScale); transform.scale(markerScale);
// The 'origin' coordinate maps to SVGs refX/refY, given in coordinates // The reference point (refX, refY) is in the coordinate space of the marker's
// relative to the viewport established by the marker. // contents so we include the value in each marker's transform.
FloatPoint mappedReferencePoint = FloatPoint mappedReferencePoint =
viewportTransform().mapPoint(referencePoint()); viewportTransform().mapPoint(referencePoint());
transform.translate(-mappedReferencePoint.x(), -mappedReferencePoint.y()); transform.translate(-mappedReferencePoint.x(), -mappedReferencePoint.y());
...@@ -138,8 +137,8 @@ AffineTransform LayoutSVGResourceMarker::viewportTransform() const { ...@@ -138,8 +137,8 @@ AffineTransform LayoutSVGResourceMarker::viewportTransform() const {
SVGMarkerElement* marker = toSVGMarkerElement(element()); SVGMarkerElement* marker = toSVGMarkerElement(element());
ASSERT(marker); ASSERT(marker);
return marker->viewBoxToViewTransform(m_viewport.width(), return marker->viewBoxToViewTransform(m_viewportSize.width(),
m_viewport.height()); m_viewportSize.height());
} }
void LayoutSVGResourceMarker::calcViewport() { void LayoutSVGResourceMarker::calcViewport() {
...@@ -150,9 +149,9 @@ void LayoutSVGResourceMarker::calcViewport() { ...@@ -150,9 +149,9 @@ void LayoutSVGResourceMarker::calcViewport() {
ASSERT(marker); ASSERT(marker);
SVGLengthContext lengthContext(marker); SVGLengthContext lengthContext(marker);
float w = marker->markerWidth()->currentValue()->value(lengthContext); float width = marker->markerWidth()->currentValue()->value(lengthContext);
float h = marker->markerHeight()->currentValue()->value(lengthContext); float height = marker->markerHeight()->currentValue()->value(lengthContext);
m_viewport = FloatRect(0, 0, w, h); m_viewportSize = FloatSize(width, height);
} }
SVGTransformChange LayoutSVGResourceMarker::calculateLocalTransform() { SVGTransformChange LayoutSVGResourceMarker::calculateLocalTransform() {
......
...@@ -54,7 +54,9 @@ class LayoutSVGResourceMarker final : public LayoutSVGResourceContainer { ...@@ -54,7 +54,9 @@ class LayoutSVGResourceMarker final : public LayoutSVGResourceContainer {
SVGMarkerUnitsType markerUnits() const; SVGMarkerUnitsType markerUnits() const;
SVGMarkerOrientType orientType() const; SVGMarkerOrientType orientType() const;
const FloatRect& viewport() const { return m_viewport; } // The viewport origin is (0,0) and not the reference point because each
// marker instance includes the reference in markerTransformation().
FloatRect viewport() const { return FloatRect(FloatPoint(), m_viewportSize); }
static const LayoutSVGResourceType s_resourceType = MarkerResourceType; static const LayoutSVGResourceType s_resourceType = MarkerResourceType;
LayoutSVGResourceType resourceType() const override { return s_resourceType; } LayoutSVGResourceType resourceType() const override { return s_resourceType; }
...@@ -66,7 +68,7 @@ class LayoutSVGResourceMarker final : public LayoutSVGResourceContainer { ...@@ -66,7 +68,7 @@ class LayoutSVGResourceMarker final : public LayoutSVGResourceContainer {
AffineTransform viewportTransform() const; AffineTransform viewportTransform() const;
FloatRect m_viewport; FloatSize m_viewportSize;
}; };
DEFINE_LAYOUT_SVG_RESOURCE_TYPE_CASTS(LayoutSVGResourceMarker, DEFINE_LAYOUT_SVG_RESOURCE_TYPE_CASTS(LayoutSVGResourceMarker,
......
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