More layout adjustments.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/1f41c284 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/1f41c284 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/1f41c284 Branch: refs/heads/dual Commit: 1f41c284725236fdb4b42872341474ef604ca21f Parents: 087b870 Author: Peter Ent <p...@apache.org> Authored: Mon Apr 3 17:25:49 2017 -0400 Committer: Peter Ent <p...@apache.org> Committed: Mon Apr 3 17:25:49 2017 -0400 ---------------------------------------------------------------------- .../FlexibleFirstChildHorizontalLayout.as | 21 +++++++-- .../html/beads/layouts/HorizontalFlexLayout.as | 49 +++++++++++++------- 2 files changed, 48 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f41c284/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as index 6af7d8a..f276074 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as @@ -51,7 +51,7 @@ package org.apache.flex.html.beads.layouts * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class FlexibleFirstChildHorizontalLayout extends LayoutBase implements IBeadLayout + public class FlexibleFirstChildHorizontalLayout extends HorizontalLayout { /** * Constructor. @@ -122,6 +122,12 @@ package org.apache.flex.html.beads.layouts var n:Number = contentView.numElements; if (n == 0) return false; + + // if the layoutView has no width yet, this layout cannot + // be run successfully, so default to HorizontalLayout. + if (host.isWidthSizedToContent()) { + return super.layout(); + } var maxWidth:Number = 0; var maxHeight:Number = 0; @@ -135,8 +141,13 @@ package org.apache.flex.html.beads.layouts 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 xpos:Number = hostWidth - borderMetrics.right - paddingMetrics.right; + var xpos:Number = hostWidth + borderMetrics.left + paddingMetrics.left; var ypos:Number = borderMetrics.top + paddingMetrics.left; var adjustedWidth:Number = 0; @@ -154,16 +165,16 @@ package org.apache.flex.html.beads.layouts if (!hostSizedToContent) { var childHeight:Number = child.height; if (ilc != null && !isNaN(ilc.percentHeight)) { - childHeight = (hostHeight-borderMetrics.top-borderMetrics.bottom-paddingMetrics.top-paddingMetrics.bottom) * ilc.percentHeight/100.0; + childHeight = hostHeight * ilc.percentHeight/100.0; ilc.setHeight(childHeight); } // the following code middle-aligns the child - childYpos = hostHeight/2 - (childHeight + margins.top + margins.bottom)/2; + childYpos = hostHeight/2 - childHeight/2; } if (ilc) { if (!isNaN(ilc.percentWidth)) { - ilc.setWidth((contentView.width-borderMetrics.left-borderMetrics.right-paddingMetrics.left-paddingMetrics.right) * ilc.percentWidth / 100); + ilc.setWidth(hostWidth * ilc.percentWidth / 100); } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f41c284/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlexLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlexLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlexLayout.as index eb30512..cb820a6 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlexLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlexLayout.as @@ -20,6 +20,7 @@ package org.apache.flex.html.beads.layouts { // import org.apache.flex.html.beads.layouts.HorizontalLayout; + 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 HorizontalFlexLayout extends HorizontalLayout + public class HorizontalFlexLayout extends LayoutBase { /** * Constructor. @@ -114,12 +115,25 @@ package org.apache.flex.html.beads.layouts var maxWidth:Number = 0; var maxHeight:Number = 0; var growCount:Number = 0; - var remainingWidth:Number = contentView.width; 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 remainingWidth:Number = hostWidth; //trace("HorizontalFlexLayout for "+UIBase(host).id+" with remainingWidth: "+remainingWidth); @@ -133,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++; @@ -145,20 +161,19 @@ package org.apache.flex.html.beads.layouts 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 useHeight = contentView.height; + else if (!isNaN(ilc.percentHeight)) useHeight = hostHeight * (ilc.percentHeight/100.0); + else useHeight = hostHeight; } - if (useHeight > contentView.height) useHeight = contentView.height; + if (useHeight > hostHeight) useHeight = hostHeight; 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 if (!isNaN(ilc.percentWidth)) useWidth = hostWidth * (ilc.percentWidth/100.0); else useWidth = ilc.width; } - if (growValue == 0 && useWidth > 0) remainingWidth -= useWidth; - - var margins:Object = childMargins(child, contentView.width, contentView.height); + if (growValue == 0 && useWidth > 0) remainingWidth -= useWidth + margins.left + margins.right; + else remainingWidth -= margins.left + margins.right; if (maxWidth < useWidth) maxWidth = useWidth; if (maxHeight < useHeight) maxHeight = useHeight; @@ -168,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++) @@ -196,21 +211,21 @@ package org.apache.flex.html.beads.layouts if (ilc) { ilc.setX(xpos + data.ml); ilc.setY(ypos + data.mt); - ilc.setHeight(useHeight - data.mt - data.mb); + ilc.height = useHeight; //setHeight(useHeight); if (useWidth > 0) { - if (setWidth) ilc.setWidth(useWidth - data.ml - data.mr); + if (setWidth) ilc.setWidth(useWidth); else ilc.width = useWidth; } } else { child.x = xpos + data.ml; child.y = ypos + data.mt; - child.height = useHeight - data.mt - data.b; + child.height = useHeight; if (data.width > 0) { - child.width = useWidth - data.mr - data.ml; + child.width = useWidth; } } - xpos += useWidth + data.ml + data.mr; + xpos += useWidth + data.mr + data.ml; //trace("HorizontalFlexLayout: setting child "+i+" to "+child.width+" x "+child.height+" at "+child.x+", "+child.y); }