Fix for VerticalFlexLayout.

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

Branch: refs/heads/dual
Commit: 09a2c06f36b074bfc46ae63b652e82cdb3d551e8
Parents: 750cdae
Author: Peter Ent <p...@apache.org>
Authored: Tue Apr 4 09:50:50 2017 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Tue Apr 4 09:50:50 2017 -0400

----------------------------------------------------------------------
 .../html/beads/layouts/VerticalFlexLayout.as    | 46 +++++++++++++-------
 1 file changed, 30 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/09a2c06f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
index d98e300..0bc9dcc 100644
--- 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as
@@ -20,6 +20,7 @@ package org.apache.flex.html.beads.layouts
 {
        //import org.apache.flex.html.beads.layouts.VerticalLayout;
 
+       import org.apache.flex.core.LayoutBase;
        import org.apache.flex.core.ILayoutChild;
        import org.apache.flex.core.ILayoutHost;
        import org.apache.flex.core.ILayoutView;
@@ -38,7 +39,7 @@ package org.apache.flex.html.beads.layouts
                import org.apache.flex.utils.CSSContainerUtils;
        }
 
-       public class VerticalFlexLayout extends VerticalLayout
+       public class VerticalFlexLayout extends LayoutBase
        {
                /**
                 * Constructor.
@@ -104,8 +105,7 @@ package org.apache.flex.html.beads.layouts
                override public function layout():Boolean
                {
                        COMPILE::SWF {
-                               var layoutHost:ILayoutHost = (host as 
ILayoutParent).getLayoutHost();
-                               var contentView:ILayoutView = 
layoutHost.contentView;
+                               var contentView:ILayoutView = layoutView;
 
                                var n:Number = contentView.numElements;
                                if (n == 0) return false;
@@ -115,12 +115,25 @@ package org.apache.flex.html.beads.layouts
                                var maxWidth:Number = 0;
                                var maxHeight:Number = 0;
                                var growCount:Number = 0;
-                               var remainingHeight:Number = contentView.height;
                                var childData:Array = [];
+                               var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
+                               var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
+                               var hostWidth:Number = hostWidthSizedToContent 
? 0 : contentView.width;
+                               var hostHeight:Number = 
hostHeightSizedToContent ? 0 : contentView.height;
 
                                var ilc:ILayoutChild;
                                var data:Object;
                                var canAdjust:Boolean = false;
+                               
+                               var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
+                               var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
+                               
+                               // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
+                               // resulting adjusted value may be less than 
zero.
+                               hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
+                               hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
+                               
+                               var remainingHeight:Number = hostHeight;
 
                                //trace("VerticalFlexLayout for 
"+UIBase(host).id+" with remainingHeight: "+remainingHeight);
 
@@ -134,9 +147,11 @@ package org.apache.flex.html.beads.layouts
                                        }
 
                                        ilc = child as ILayoutChild;
+                                       
+                                       var margins:Object = 
childMargins(child, hostWidth, hostHeight);
 
                                        var flexGrow:Object = 
ValuesManager.valuesImpl.getValue(child, "flex-grow");
-                                       var growValue:Number = -1;
+                                       var growValue:Number = 0;
                                        if (flexGrow != null) {
                                                growValue = Number(flexGrow);
                                                if (!isNaN(growValue) && 
growValue > 0) growCount++;
@@ -146,20 +161,19 @@ package org.apache.flex.html.beads.layouts
                                        var useWidth:Number = -1;
                                        if (ilc) {
                                                if (!isNaN(ilc.explicitWidth)) 
useWidth = ilc.explicitWidth;
-                                               else if 
(!isNaN(ilc.percentWidth)) useWidth = contentView.width * 
(ilc.percentWidth/100.0);
-                                               else useWidth = 
contentView.width;
+                                               else if 
(!isNaN(ilc.percentWidth)) useWidth = hostWidth * (ilc.percentWidth/100.0);
+                                               else useWidth = hostWidth;
                                        }
-                                       if (useWidth > contentView.width) 
useWidth = contentView.width;
+                                       if (useWidth > hostWidth) useWidth = 
hostWidth;
 
                                        var useHeight:Number = -1;
                                        if (ilc) {
                                                if (!isNaN(ilc.explicitHeight)) 
useHeight = ilc.explicitHeight;
-                                               else if 
(!isNaN(ilc.percentHeight)) useHeight = contentView.height * 
(ilc.percentHeight/100.0);
+                                               else if 
(!isNaN(ilc.percentHeight)) useHeight = hostHeight * (ilc.percentHeight/100.0);
                                                else useHeight = ilc.height;
                                        }
-                                       if (growValue == 0 && useHeight > 0) 
remainingHeight -= useHeight;
-
-                                       var margins:Object = 
childMargins(child, contentView.width, contentView.height);
+                                       if (growValue == 0 && useHeight > 0) 
remainingHeight -= useHeight + margins.top + margins.bottom;
+                                       else remainingHeight -= margins.top + 
margins.bottom;
 
                                        if (maxWidth < useWidth) maxWidth = 
useWidth;
                                        if (maxHeight < useHeight) maxHeight = 
useHeight;
@@ -169,8 +183,8 @@ package org.apache.flex.html.beads.layouts
                                                                        
grow:growValue, canAdjust:canAdjust});
                                }
 
-                               var xpos:Number = 0;
-                               var ypos:Number = 0;
+                               var xpos:Number = borderMetrics.left + 
paddingMetrics.left;
+                               var ypos:Number = borderMetrics.top + 
paddingMetrics.top;
 
                                // Second pass sizes and positions the children 
based on the data gathered.
                                for(i=0; i < n; i++)
@@ -197,7 +211,7 @@ package org.apache.flex.html.beads.layouts
                                        if (ilc) {
                                                ilc.setX(xpos + data.ml);
                                                ilc.setY(ypos + data.mt);
-                                               ilc.setWidth(useWidth - data.ml 
- data.mr);
+                                               ilc.width = useWidth; 
//setWidth(useWidth);
                                                if (useHeight > 0) {
                                                        if (setHeight) 
ilc.setHeight(useHeight);
                                                        else ilc.height = 
useHeight;
@@ -205,7 +219,7 @@ package org.apache.flex.html.beads.layouts
                                        } else {
                                                child.x = xpos + data.ml;
                                                child.y = ypos + data.mt;
-                                               child.width = useWidth - 
data.ml - data.mr;
+                                               child.width = useWidth;
                                                if (useHeight > 0) {
                                                        child.height = 
useHeight;
                                                }

Reply via email to