You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/08/05 23:20:53 UTC
[09/15] git commit: [flex-asjs] [refs/heads/develop] - get this
layout to work better
get this layout to work better
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/69f651c7
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/69f651c7
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/69f651c7
Branch: refs/heads/develop
Commit: 69f651c70d934d21a826e709e7cceca5ee11f41c
Parents: 1e0df0a
Author: Alex Harui <ah...@apache.org>
Authored: Wed Aug 5 11:16:15 2015 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Aug 5 12:28:50 2015 -0700
----------------------------------------------------------------------
.../layouts/OneFlexibleChildHorizontalLayout.as | 284 +++++--------------
1 file changed, 74 insertions(+), 210 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69f651c7/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
index 8ba9a96..24419c8 100644
--- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
+++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
@@ -29,6 +29,7 @@ package org.apache.flex.html.beads.layouts
import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.utils.CSSUtils;
/**
* The OneFlexibleChildHorizontalLayout class is a simple layout
@@ -159,12 +160,9 @@ package org.apache.flex.html.beads.layouts
maxHeight = 0;
var verticalMargins:Array = new Array(n);
- var ww:Number = layoutParent.resizableView.width;
- var padding:Object = determinePadding();
- if (isNaN(padding.paddingRight))
- padding.paddingRight = 0;
- ww -= padding.paddingLeft + padding.paddingRight;
- var xx:int = padding.paddingLeft;
+ var ww:Number = contentView.width;
+ var hh:Number = contentView.height;
+ var xx:int = 0;
var flexChildIndex:int;
var ml:Number;
var mr:Number;
@@ -173,6 +171,7 @@ package org.apache.flex.html.beads.layouts
var lastmr:Number;
var lastml:Number;
var valign:Object;
+ var hostSizedToContent:Boolean = host.isHeightSizedToContent();
for (var i:int = 0; i < n; i++)
{
@@ -183,56 +182,14 @@ package org.apache.flex.html.beads.layouts
break;
}
margin = ValuesManager.valuesImpl.getValue(child, "margin");
- if (margin is Array)
- {
- if (margin.length == 1)
- marginLeft = marginTop = marginRight = marginBottom = margin[0];
- else if (margin.length <= 3)
- {
- marginLeft = marginRight = margin[1];
- marginTop = marginBottom = margin[0];
- }
- else if (margin.length == 4)
- {
- marginLeft = margin[3];
- marginBottom = margin[2];
- marginRight = margin[1];
- marginTop = margin[0];
- }
- }
- else if (margin == null)
- {
- marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
- marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
- marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
- marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
- }
- else
- {
- marginLeft = marginTop = marginBottom = marginRight = margin;
- }
- mt = Number(marginTop);
- if (isNaN(mt))
- mt = 0;
- mb = Number(marginBottom);
- if (isNaN(mb))
- mb = 0;
- if (marginLeft == "auto")
- ml = 0;
- else
- {
- ml = Number(marginLeft);
- if (isNaN(ml))
- ml = 0;
- }
- if (marginRight == "auto")
- mr = 0;
- else
- {
- mr = Number(marginRight);
- if (isNaN(mr))
- mr = 0;
- }
+ marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
+ marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
+ marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
+ marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
+ mt = CSSUtils.getTopValue(marginTop, margin, hh);
+ mb = CSSUtils.getTopValue(marginBottom, margin, hh);
+ mr = CSSUtils.getRightValue(marginRight, margin, ww);
+ ml = CSSUtils.getLeftValue(marginLeft, margin, ww);
child.y = mt;
if (child is ILayoutChild)
{
@@ -254,56 +211,14 @@ package org.apache.flex.html.beads.layouts
{
child = contentView.getElementAt(i) as IUIBase;
margin = ValuesManager.valuesImpl.getValue(child, "margin");
- if (margin is Array)
- {
- if (margin.length == 1)
- marginLeft = marginTop = marginRight = marginBottom = margin[0];
- else if (margin.length <= 3)
- {
- marginLeft = marginRight = margin[1];
- marginTop = marginBottom = margin[0];
- }
- else if (margin.length == 4)
- {
- marginLeft = margin[3];
- marginBottom = margin[2];
- marginRight = margin[1];
- marginTop = margin[0];
- }
- }
- else if (margin == null)
- {
- marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
- marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
- marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
- marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
- }
- else
- {
- marginLeft = marginTop = marginBottom = marginRight = margin;
- }
- mt = Number(marginTop);
- if (isNaN(mt))
- mt = 0;
- mb = Number(marginBottom);
- if (isNaN(mb))
- mb = 0;
- if (marginLeft == "auto")
- ml = 0;
- else
- {
- ml = Number(marginLeft);
- if (isNaN(ml))
- ml = 0;
- }
- if (marginRight == "auto")
- mr = 0;
- else
- {
- mr = Number(marginRight);
- if (isNaN(mr))
- mr = 0;
- }
+ marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
+ marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
+ marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
+ marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
+ mt = CSSUtils.getTopValue(marginTop, margin, hh);
+ mb = CSSUtils.getTopValue(marginBottom, margin, hh);
+ mr = CSSUtils.getRightValue(marginRight, margin, ww);
+ ml = CSSUtils.getLeftValue(marginLeft, margin, ww);
child.y = mt;
if (child is ILayoutChild)
{
@@ -321,56 +236,14 @@ package org.apache.flex.html.beads.layouts
child = contentView.getElementAt(flexChildIndex) as IUIBase;
margin = ValuesManager.valuesImpl.getValue(child, "margin");
- if (margin is Array)
- {
- if (margin.length == 1)
- marginLeft = marginTop = marginRight = marginBottom = margin[0];
- else if (margin.length <= 3)
- {
- marginLeft = marginRight = margin[1];
- marginTop = marginBottom = margin[0];
- }
- else if (margin.length == 4)
- {
- marginLeft = margin[3];
- marginBottom = margin[2];
- marginRight = margin[1];
- marginTop = margin[0];
- }
- }
- else if (margin == null)
- {
- marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
- marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
- marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
- marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
- }
- else
- {
- marginLeft = marginTop = marginBottom = marginRight = margin;
- }
- mt = Number(marginTop);
- if (isNaN(mt))
- mt = 0;
- mb = Number(marginBottom);
- if (isNaN(mb))
- mb = 0;
- if (marginLeft == "auto")
- ml = 0;
- else
- {
- ml = Number(marginLeft);
- if (isNaN(ml))
- ml = 0;
- }
- if (marginRight == "auto")
- mr = 0;
- else
- {
- mr = Number(marginRight);
- if (isNaN(mr))
- mr = 0;
- }
+ marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
+ marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
+ marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
+ marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
+ mt = CSSUtils.getTopValue(marginTop, margin, hh);
+ mb = CSSUtils.getTopValue(marginBottom, margin, hh);
+ mr = CSSUtils.getRightValue(marginRight, margin, ww);
+ ml = CSSUtils.getLeftValue(marginLeft, margin, ww);
child.y = mt;
if (child is ILayoutChild)
{
@@ -384,79 +257,70 @@ package org.apache.flex.html.beads.layouts
valign = ValuesManager.valuesImpl.getValue(child, "vertical-align");
verticalMargins[flexChildIndex] = { marginTop: mt, marginBottom: mb, valign: valign };
}
+ if (hostSizedToContent)
+ ILayoutChild(contentView).setHeight(maxHeight, true);
for (i = 0; i < n; i++)
{
- var obj:Object = verticalMargins[0]
+ var obj:Object = verticalMargins[i]
child = contentView.getElementAt(i) as IUIBase;
- if (obj.valign == "center")
- child.y = (maxHeight - child.height) / 2;
- else if (obj.valign == "right")
- child.y = maxHeight - child.height - obj.marginBottom;
- else
- child.y = obj.marginTop;
+ setPositionAndHeight(child, obj.top, obj.marginTop,
+ obj.bottom, obj.marginBottom, maxHeight, obj.valign);
}
return true;
}
- // TODO (aharui): utility class or base class
- /**
- * Determines the top and left padding values, if any, as set by
- * padding style values. This includes "padding" for all padding values
- * as well as "padding-left" and "padding-top".
- *
- * Returns an object with paddingLeft and paddingTop properties.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- protected function determinePadding():Object
+ private function setPositionAndHeight(child:IUIBase, top:Number, mt:Number,
+ bottom:Number, mb:Number, h:Number, valign:String):void
{
- var paddingLeft:Object;
- var paddingTop:Object;
- var paddingRight:Object;
- var padding:Object = ValuesManager.valuesImpl.getValue(host, "padding");
- if (typeof(padding) == "Array")
+ var heightSet:Boolean = false; // if we've set the height in a way that gens a change event
+ var ySet:Boolean = false; // if we've set the y yet.
+
+ var hh:Number = h;
+ var ilc:ILayoutChild = child as ILayoutChild;
+ if (!isNaN(top))
+ {
+ child.y = top + mt;
+ ySet = true;
+ hh -= top + mt;
+ }
+ else
{
- if (padding.length == 1)
- paddingLeft = paddingTop = paddingRight = padding[0];
- else if (padding.length <= 3)
+ hh -= mt;
+ }
+ if (!isNaN(bottom))
+ {
+ if (!isNaN(top))
{
- paddingLeft = padding[1];
- paddingTop = padding[0];
- paddingRight = padding[1];
+ if (ilc)
+ ilc.setHeight(hh - bottom - mb, true);
+ else
+ {
+ child.height = hh - bottom - mb;
+ heightSet = true;
+ }
}
- else if (padding.length == 4)
+ else
{
- paddingLeft = padding[3];
- paddingTop = padding[0];
- paddingRight = padding[1];
+ child.y = h - bottom - mb - child.height;
+ ySet = true;
}
}
- else if (padding == null)
+ if (ilc)
{
- paddingLeft = ValuesManager.valuesImpl.getValue(host, "padding-left");
- paddingTop = ValuesManager.valuesImpl.getValue(host, "padding-top");
- paddingRight = ValuesManager.valuesImpl.getValue(host, "padding-right");
+ if (!isNaN(ilc.percentHeight))
+ ilc.setHeight(h * ilc.percentHeight / 100, true);
}
+ if (valign == "center")
+ child.y = (h - child.height) / 2;
+ else if (valign == "bottom")
+ child.y = h - child.height - mb;
else
- {
- paddingLeft = paddingTop = paddingRight = padding;
- }
- var pl:Number = Number(paddingLeft);
- var pt:Number = Number(paddingTop);
- var pr:Number = Number(paddingRight);
- if (isNaN(pl))
- pl = 0;
- if (isNaN(pr))
- pr = 0;
- if (isNaN(pt))
- pt = 0;
- return {paddingLeft:pl, paddingTop:pt, paddingRight:pr};
+ child.y = mt;
+ if (!heightSet)
+ child.dispatchEvent(new Event("sizeChanged"));
}
-
+
public function setDocument(document:Object, id:String = null):void
{
this.document = document;