Updated Branches:
  refs/heads/develop 5c9baf119 -> 7cab71bb2

FIX - FLEX-33865 ConstraintLayout optimization


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

Branch: refs/heads/develop
Commit: 7cab71bb2192390dceaa4cc4c07eb45f49a4f5c7
Parents: 5c9baf1
Author: mamsellem <maurice.amsel...@systar.com>
Authored: Mon Nov 4 09:52:05 2013 +0100
Committer: mamsellem <maurice.amsel...@systar.com>
Committed: Mon Nov 4 09:52:05 2013 +0100

----------------------------------------------------------------------
 .../spark/src/spark/layouts/ConstraintLayout.as | 17 ++---
 .../supportClasses/LayoutElementHelper.as       | 78 ++++++++++++++++----
 2 files changed, 72 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/7cab71bb/frameworks/projects/spark/src/spark/layouts/ConstraintLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/layouts/ConstraintLayout.as 
b/frameworks/projects/spark/src/spark/layouts/ConstraintLayout.as
index c7d47a6..60ef4cd 100644
--- a/frameworks/projects/spark/src/spark/layouts/ConstraintLayout.as
+++ b/frameworks/projects/spark/src/spark/layouts/ConstraintLayout.as
@@ -605,7 +605,7 @@ public class ConstraintLayout extends LayoutBase
         if (value == null)
             return;
         
-        var constraintColumns:Vector.<ConstraintColumn> = 
this.constraintColumns;
+        var constraintColumns:Vector.<ConstraintColumn> = 
this._constraintColumns;
         var numCols:int = constraintColumns.length;
         var totalWidth:Number = 0;
         
@@ -626,7 +626,7 @@ public class ConstraintLayout extends LayoutBase
         if (value == null)
             return;
         
-        var constraintRows:Vector.<ConstraintRow> = this.constraintRows;
+        var constraintRows:Vector.<ConstraintRow> = this._constraintRows;
         var numRows:int = constraintRows.length;
         var totalHeight:Number = 0;
         
@@ -1669,24 +1669,23 @@ public class ConstraintLayout extends LayoutBase
         
         var message:String;
         
-        var temp:Array;
-        temp = LayoutElementHelper.parseConstraintExp(layoutElement.left);
+        var temp:Array = 
LayoutElementHelper.parseConstraintExp(layoutElement.left);
         left = temp[0];
         leftBoundary = temp[1];
         
-        temp = LayoutElementHelper.parseConstraintExp(layoutElement.right);
+        temp = LayoutElementHelper.parseConstraintExp(layoutElement.right, 
temp);
         right = temp[0];
         rightBoundary = temp[1];
         
-        temp = LayoutElementHelper.parseConstraintExp(layoutElement.top);
+        temp = LayoutElementHelper.parseConstraintExp(layoutElement.top, temp);
         top = temp[0];
         topBoundary = temp[1];
         
-        temp = LayoutElementHelper.parseConstraintExp(layoutElement.bottom);
+        temp = LayoutElementHelper.parseConstraintExp(layoutElement.bottom, 
temp);
         bottom = temp[0];
         bottomBoundary = temp[1];
         
-        temp = LayoutElementHelper.parseConstraintExp(layoutElement.baseline);
+        temp = LayoutElementHelper.parseConstraintExp(layoutElement.baseline, 
temp);
         baseline = temp[0];
         baselineBoundary = temp[1];
         
@@ -1938,4 +1937,4 @@ import mx.containers.utilityClasses.FlexChildInfo;
 class ConstraintRegionFlexChildInfo extends FlexChildInfo
 {
     public var index:int
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/7cab71bb/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
 
b/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
index baab217..d8eac93 100644
--- 
a/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
+++ 
b/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
@@ -19,6 +19,7 @@
 
 package spark.layouts.supportClasses
 {
+import mx.utils.StringUtil;
 
 [ExcludeClass]
 
@@ -79,28 +80,77 @@ public class LayoutElementHelper
      *  so that an array is returned where the first value is
      *  the offset (ie: 10) and the second value is 
      *  the boundary (ie: "col1")
+     *  @arg result :  optional Array to save an Array memory allocation
      */
-    public static function parseConstraintExp(val:Object):Array
+    public static function parseConstraintExp(val:Object, 
result:Array=null):Array
     {
-        if (val is Number)
-            return [Number(val), null];
-        
-        if (!val)
-            return [NaN, null];
-        // Replace colons with spaces
-        var temp:String = String(val).replace(/:/g, " ");
-        
-        // Split the string into an array 
-        var args:Array = temp.split(/\s+/);
+        // number
+        if (val is Number) {
+            if(result == null) {
+                return [val as Number, null];
+            }
+            else {
+                result[0] = val as Number;
+                result[1] = null;
+                return result;
+            }
+        }
+       // null
+        if (!val) {
+            if(result == null) {
+                return [NaN, null];
+            }
+            else {
+                result[0] = NaN;
+                result[1] = null;
+                return result;
+            }
+        }
+
+        // String case  : 2 sub-cases, number of constraint
+        var tmp:String = String(val);
+        var colonPos:int = tmp.indexOf(":");
         
         // If the val was a String object representing a single number (i.e. 
"100"),
         // then we'll hit this case:
-        if (args.length == 1)
-            return args;
+        if(colonPos == -1) {
+            return [StringUtil.trim(tmp)];
+        }
         
         // Return [offset, boundary]
-        return [args[1], args[0]];
+        if(result == null) {
+            result =[];
+        }
+        
+        //here we do not use StringUtil in order to avoid unnecessary memory 
allocations
+        var startIndex:int = 0;
+        while (StringUtil.isWhitespace(tmp.charAt(startIndex))) {
+            ++startIndex;
+        }
+        
+        var endIndex:int = tmp.length - 1;
+        while (StringUtil.isWhitespace(tmp.charAt(endIndex) )) {
+            --endIndex;
+        }
+        
+        var endIndexPart1:int = colonPos-1;
+        while (StringUtil.isWhitespace(tmp.charAt(endIndexPart1))) {
+            --endIndexPart1;
+        }
+        
+        var startIndexPart2:int = colonPos+1;
+        while (StringUtil.isWhitespace(tmp.charAt(startIndexPart2))) {
+            ++startIndexPart2;
+        }
+        
+        result[0] = tmp.substring(startIndexPart2, endIndex+1);
+        result[1] = tmp.substring(startIndex, endIndexPart1+1);
+        
+        return result;
     }
+
+
+
 }
 
 }

Reply via email to