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