Take rotations into account, but Chrome and FF still seem to have a problem with getBoundingClientRect() for SVGs...
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/a006bbe8 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/a006bbe8 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/a006bbe8 Branch: refs/heads/feature/fontawesome Commit: a006bbe894878ceda80df4939be43c0e9c510643 Parents: 010e4c5 Author: yishayw <yishayj...@hotmail.com> Authored: Sun Jan 8 14:15:05 2017 +0200 Committer: yishayw <yishayj...@hotmail.com> Committed: Sun Jan 8 14:15:05 2017 +0200 ---------------------------------------------------------------------- .../main/flex/org/apache/flex/utils/DisplayUtils.as | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a006bbe8/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/DisplayUtils.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/DisplayUtils.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/DisplayUtils.as index ac66a19..4e08ffd 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/DisplayUtils.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/DisplayUtils.as @@ -23,6 +23,7 @@ package org.apache.flex.utils COMPILE::JS { + import org.apache.flex.geom.Point; import org.apache.flex.geom.Matrix; import org.apache.flex.geom.Point; import org.apache.flex.core.ITransformHost; @@ -70,11 +71,17 @@ package org.apache.flex.utils var sm:SVGMatrix = svgElement.getScreenCTM(); var m:Matrix = new Matrix(sm.a,sm.b,sm.c,sm.d,sm.e,sm.f); var tl:Point = m.transformPoint(bounds.topLeft); + var tr:Point = m.transformPoint(new Point(bounds.right, bounds.top)); + var bl:Point = m.transformPoint(new Point(bounds.left, bounds.bottom)); var br:Point = m.transformPoint(bounds.bottomRight); - bounds.top = tl.y; - bounds.left = tl.x; - bounds.bottom = br.y; - bounds.right = br.x; + var leftX:Number = Math.min(tl.x, tr.x, bl.x, br.x); + var topY:Number = Math.min(tl.y, tr.y, bl.y, br.y); + var rightX:Number = Math.max(tl.x, tr.x, bl.x, br.x); + var bottomY:Number = Math.max(tl.y, tr.y, bl.y, br.y); + bounds.top = topY; + bounds.left = leftX; + bounds.bottom = bottomY; + bounds.right = rightX; } return bounds; }