Repository: flex-asjs
Updated Branches:
  refs/heads/develop 6913fa1cd -> ed7f71b1f


getBoundingClientRect() is unreliable, so add option to give original bounds as 
an argument.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/ed7f71b1
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/ed7f71b1
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/ed7f71b1

Branch: refs/heads/develop
Commit: ed7f71b1f6ebc63073822fd1787f97d3dcb3ec1a
Parents: 6913fa1
Author: yishayw <yishayj...@hotmail.com>
Authored: Mon Jan 9 11:24:56 2017 +0200
Committer: yishayw <yishayj...@hotmail.com>
Committed: Mon Jan 9 11:24:56 2017 +0200

----------------------------------------------------------------------
 .../flex/org/apache/flex/utils/DisplayUtils.as  | 51 +++++++++++++++++---
 1 file changed, 44 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/ed7f71b1/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 4e08ffd..586b6da 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
@@ -18,13 +18,19 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.utils
 {
+       
        import org.apache.flex.core.IUIBase;
+       import org.apache.flex.geom.Matrix;
        import org.apache.flex.geom.Rectangle;
 
+       COMPILE::SWF
+       {
+               import flash.geom.Matrix;
+       }
+       
        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;
        }
@@ -52,7 +58,7 @@ package org.apache.flex.utils
          *  @flexjsignorecoercion HTMLElement
          *  @flexjsignorecoercion ITransformHost
                 */
-               public static function 
getScreenBoundingRect(obj:IUIBase):Rectangle
+               public static function getScreenBoundingRect(obj:IUIBase, 
boundsBeforeTransform:Rectangle=null):Rectangle
                {
                        COMPILE::SWF
                        {
@@ -61,15 +67,17 @@ package org.apache.flex.utils
 
                        COMPILE::JS
                        {
-                               var r:Object = (obj.element as 
HTMLElement).getBoundingClientRect();
-                               var bounds:Rectangle = new Rectangle(r.left, 
r.top, r.right - r.left, r.bottom - r.top);
+                               var bounds:Rectangle = boundsBeforeTransform;
+                               if (bounds == null)
+                               {
+                                       var r:Object = (obj.element as 
HTMLElement).getBoundingClientRect();
+                                       bounds = new Rectangle(r.left, r.top, 
r.right - r.left, r.bottom - r.top);
+                               }
                                bounds.x -= window.pageXOffset;
                                bounds.y -= window.pageYOffset;
                                if (obj.element instanceof SVGElement)
                                {
-                                       var svgElement:Object = (obj as 
ITransformHost).transformElement as Object;
-                                       var sm:SVGMatrix = 
svgElement.getScreenCTM();
-                                       var m:Matrix = new 
Matrix(sm.a,sm.b,sm.c,sm.d,sm.e,sm.f);
+                                       var m:org.apache.flex.geom.Matrix = 
getTransormMatrix(obj);
                                        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));
@@ -86,6 +94,35 @@ package org.apache.flex.utils
                                return bounds;
                        }
                }
+               
+               /**
+                *  Gets a composition all transform matrices applied to an 
IUIBase. Currently only works for SVG on JS side.
+                * 
+                *  @param obj The object to test.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                *  @flexjsignorecoercion HTMLElement
+                *  @flexjsignorecoercion ITransformHost
+                */
+               public static function 
getTransormMatrix(obj:IUIBase):org.apache.flex.geom.Matrix
+               {
+                       COMPILE::SWF
+                       {
+                               var m:flash.geom.Matrix = 
obj.$displayObject.transform.matrix;
+                               return new org.apache.flex.geom.Matrix(m.a, 
m.b, m.c, m.d, m.tx, m.ty);
+                       }
+                       COMPILE::JS
+                       {
+                               // currently only works for SVG elements
+                               var svgElement:Object = (obj as 
ITransformHost).transformElement as Object;
+                               var sm:SVGMatrix = svgElement.getScreenCTM();
+                               return new 
org.apache.flex.geom.Matrix(sm.a,sm.b,sm.c,sm.d,sm.e,sm.f);
+                       }
+                       
+               }
 
                /**
                 *  Evaluates the bounding box of two objects to see if thier 
bounding boxes overlap.

Reply via email to