You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pe...@apache.org on 2017/04/11 16:00:36 UTC
[11/44] git commit: [flex-asjs] [refs/heads/develop] - Refactor
layout classes, moving common code into a base class (LayoutBase).
Refactor layout classes, moving common code into a base class (LayoutBase).
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/4f0765d0
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/4f0765d0
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/4f0765d0
Branch: refs/heads/develop
Commit: 4f0765d01e176de9d1057a4c6791dd3837d06557
Parents: d2fe8c1
Author: Peter Ent <pe...@apache.org>
Authored: Fri Mar 31 10:08:19 2017 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Fri Mar 31 10:08:19 2017 -0400
----------------------------------------------------------------------
.../flex/org/apache/flex/core/LayoutBase.as | 166 +++++++++++++++++++
.../flex/html/beads/layouts/BasicLayout.as | 104 ++++--------
.../flex/html/beads/layouts/ButtonBarLayout.as | 26 +--
.../FlexibleFirstChildHorizontalLayout.as | 66 ++------
.../html/beads/layouts/HorizontalFlexLayout.as | 44 +----
.../html/beads/layouts/HorizontalFlowLayout.as | 31 +---
.../flex/html/beads/layouts/HorizontalLayout.as | 56 ++-----
.../layouts/OneFlexibleChildHorizontalLayout.as | 61 +------
.../layouts/OneFlexibleChildVerticalLayout.as | 61 +------
.../flex/html/beads/layouts/TileLayout.as | 31 +---
.../html/beads/layouts/VerticalColumnLayout.as | 66 ++------
.../html/beads/layouts/VerticalFlexLayout.as | 40 +----
.../flex/html/beads/layouts/VerticalLayout.as | 65 ++------
13 files changed, 305 insertions(+), 512 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/LayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/LayoutBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/LayoutBase.as
new file mode 100644
index 0000000..dde6448
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/LayoutBase.as
@@ -0,0 +1,166 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core
+{
+
+ import org.apache.flex.core.IBeadLayout;
+ import org.apache.flex.core.ILayoutChild;
+ import org.apache.flex.core.ILayoutHost;
+ import org.apache.flex.core.ILayoutParent;
+ import org.apache.flex.core.ILayoutView;
+ import org.apache.flex.core.IParent;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.utils.CSSUtils;
+
+ /**
+ * This class is the base class for most, if not all, layouts.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ public class LayoutBase implements IBeadLayout
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ public function LayoutBase()
+ {
+ }
+
+ /**
+ * The strand/host container is also an ILayoutChild because
+ * it can have its size dictated by the host's parent which is
+ * important to know for layout optimization.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ protected var host:ILayoutChild;
+
+ /**
+ * @copy org.apache.flex.core.IBead#strand
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ *
+ * @flexjsignorecoercion org.apache.flex.core.ILayoutChild
+ */
+ public function set strand(value:IStrand):void
+ {
+ host = value as ILayoutChild;
+ }
+
+ /**
+ * Returns an object of margins for the given child.
+ *
+ * @param child Object The element whose margins are required.
+ * @param hostWidth Number The usable width dimension of the host.
+ * @param hostHeight Number The usable height dimension of the host.
+ *
+ * @return Object A structure of {top:Number, left:Number, bottom:Number, right:Number}
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ protected function childMargins(child:Object, hostWidth:Number, hostHeight:Number):Object
+ {
+ var margin:Object = ValuesManager.valuesImpl.getValue(child, "margin");
+ var marginLeft:Object = ValuesManager.valuesImpl.getValue(child, "margin-left");
+ var marginTop:Object = ValuesManager.valuesImpl.getValue(child, "margin-top");
+ var marginRight:Object = ValuesManager.valuesImpl.getValue(child, "margin-right");
+ var marginBottom:Object = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
+ var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
+ var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
+ var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
+ var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
+ if (marginLeft == "auto")
+ ml = 0;
+ if (marginRight == "auto")
+ mr = 0;
+
+ return {left:ml, top:mt, right:mr, bottom:mb};
+ }
+
+ /**
+ * Returns an object containing the child's positioning values.
+ *
+ * @param child Object The element whose positions are required.
+ *
+ * @return Object A structure of {top:Number, left:Number, bottom:Number, right:Number}
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ protected function childPositions(child:Object):Object
+ {
+ var left:Number = ValuesManager.valuesImpl.getValue(child, "left");
+ var right:Number = ValuesManager.valuesImpl.getValue(child, "right");
+ var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
+ var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
+
+ return {top:top, left:left, bottom:bottom, right:right};
+ }
+
+ /**
+ * Returns the ILayoutView for the host.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ *
+ * @flexjsignorecoercion org.apache.flex.core.ILayoutParent
+ */
+ protected function get layoutView():ILayoutView
+ {
+ var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
+ return viewBead.contentView;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.8
+ */
+ public function layout():Boolean
+ {
+ // override in subclass
+ return false;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as
index 3aad370..72c42d8 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as
@@ -18,7 +18,8 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
-
+ import org.apache.flex.core.LayoutBase;
+
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutHost;
@@ -44,7 +45,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class BasicLayout implements IBeadLayout
+ public class BasicLayout extends LayoutBase implements IBeadLayout
{
/**
* Constructor.
@@ -56,24 +57,7 @@ package org.apache.flex.html.beads.layouts
*/
public function BasicLayout()
{
- }
-
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- host = value as ILayoutChild;
+ super();
}
/**
@@ -81,12 +65,11 @@ package org.apache.flex.html.beads.layouts
* @flexjsignorecoercion org.apache.flex.core.ILayoutHost
* @flexjsignorecoercion org.apache.flex.core.UIBase
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
COMPILE::SWF
{
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent();
var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent();
@@ -96,111 +79,88 @@ package org.apache.flex.html.beads.layouts
var n:int = contentView.numElements;
- var gotMargin:Boolean;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
-
for (var i:int = 0; i < n; i++)
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
if (child == null || !child.visible) continue;
- var left:Number = ValuesManager.valuesImpl.getValue(child, "left");
- var right:Number = ValuesManager.valuesImpl.getValue(child, "right");
- var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
- var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
+ var positions:Object = childPositions(child);
+ var margins:Object = childMargins(child, contentView.width, contentView.height);
var ww:Number = w;
var hh:Number = h;
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, contentView.width);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, contentView.width);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, contentView.height);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, contentView.height);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
-
var ilc:ILayoutChild = child as ILayoutChild;
// set the top edge of the child
- if (!isNaN(left))
+ if (!isNaN(positions.left))
{
if (ilc)
- ilc.setX(left+ml);
+ ilc.setX(positions.left+margins.left);
else
- child.x = left+ml;
- ww -= left + ml;
+ child.x = positions.left+margins.left;
+ ww -= positions.left + margins.left;
}
// set the left edge of the child
- if (!isNaN(top))
+ if (!isNaN(positions.top))
{
if (ilc)
- ilc.setY(top+mt);
+ ilc.setY(positions.top+margins.top);
else
- child.y = top+mt;
- hh -= top + mt;
+ child.y = positions.top+margins.top;
+ hh -= positions.top + margins.top;
}
// set the right edge of the child
- if (!isNaN(right))
+ if (!isNaN(positions.right))
{
if (!hostWidthSizedToContent)
{
- if (!isNaN(left))
+ if (!isNaN(positions.left))
{
if (ilc)
- ilc.setWidth(ww - right - mr, false);
+ ilc.setWidth(ww - positions.right - margins.right, false);
else
- child.width = ww - right - mr;
+ child.width = ww - positions.right - margins.right;
}
else
{
if (ilc)
- ilc.setX( w - right - mr - child.width - mr);
+ ilc.setX( w - positions.right - margins.left - child.width - margins.right);
else
- child.x = w - right - mr - child.width - mr;
+ child.x = w - positions.right - margins.left - child.width - margins.right;
}
}
}
else if (ilc != null && !isNaN(ilc.percentWidth) && !hostWidthSizedToContent)
{
- ilc.setWidth((ww - mr - ml) * ilc.percentWidth/100, false);
+ ilc.setWidth((ww - margins.right - margins.left) * ilc.percentWidth/100, false);
}
// set the bottm edge of the child
- if (!isNaN(bottom))
+ if (!isNaN(positions.bottom))
{
if (!hostHeightSizedToContent)
{
- if (!isNaN(top))
+ if (!isNaN(positions.top))
{
if (ilc)
- ilc.setHeight(hh - bottom - mb, false);
+ ilc.setHeight(hh - positions.bottom - margins.bottom, false);
else
- child.height = hh - bottom - mb;
+ child.height = hh - positions.bottom - margins.bottom;
}
else
{
if (ilc)
- ilc.setY( h - bottom - child.height - mb);
+ ilc.setY( h - positions.bottom - child.height - margins.bottom);
else
- child.y = h - bottom - child.height - mb;
+ child.y = h - positions.bottom - child.height - margins.bottom;
}
}
}
else if (ilc != null && !isNaN(ilc.percentHeight) && !hostHeightSizedToContent)
{
- ilc.setHeight((hh - mt - mb) * ilc.percentHeight/100, false);
+ ilc.setHeight((hh - margins.top - margins.bottom) * ilc.percentHeight/100, false);
}
}
@@ -212,9 +172,7 @@ package org.apache.flex.html.beads.layouts
{
var i:int
var n:int;
-
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
n = contentView.numElements;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
index 4771942..75d1ee7 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.ILayoutHost;
import org.apache.flex.core.ILayoutView;
@@ -47,7 +48,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class ButtonBarLayout implements IBeadLayout
+ public class ButtonBarLayout extends LayoutBase implements IBeadLayout
{
/**
* constructor.
@@ -59,21 +60,7 @@ package org.apache.flex.html.beads.layouts
*/
public function ButtonBarLayout()
{
- }
-
- private var _strand:IStrand;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- _strand = value;
+ super();
}
private var _widthType:Number = ButtonBarModel.PIXEL_WIDTHS;
@@ -100,12 +87,11 @@ package org.apache.flex.html.beads.layouts
/**
* @copy org.apache.flex.core.IBeadLayout#layout
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
- var layoutHost:ILayoutHost = (_strand as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = layoutHost.contentView;
+ var contentView:ILayoutView = layoutView;
- var model:ButtonBarModel = _strand.getBeadByType(ButtonBarModel) as ButtonBarModel;
+ var model:ButtonBarModel = (host as IStrand).getBeadByType(ButtonBarModel) as ButtonBarModel;
if (model) {
buttonWidths = model.buttonWidths;
_widthType = model.widthType;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/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 c82cab5..6af7d8a 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
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutView;
@@ -50,7 +51,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class FlexibleFirstChildHorizontalLayout implements IBeadLayout
+ public class FlexibleFirstChildHorizontalLayout extends LayoutBase implements IBeadLayout
{
/**
* Constructor.
@@ -62,24 +63,7 @@ package org.apache.flex.html.beads.layouts
*/
public function FlexibleFirstChildHorizontalLayout()
{
- }
-
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- host = value as ILayoutChild;
+ super();
}
private var _maxWidth:Number;
@@ -132,10 +116,9 @@ package org.apache.flex.html.beads.layouts
* @copy org.apache.flex.core.IBeadLayout#layout
*/
COMPILE::SWF
- public function layout():Boolean
+ override public function layout():Boolean
{
- 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;
@@ -149,11 +132,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(host);
@@ -166,25 +144,12 @@ package org.apache.flex.html.beads.layouts
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
if (child == null || !child.visible) continue;
- var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
- var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
+ var positions:Object = childPositions(child);
+ var margins:Object = childMargins(child, hostWidth, hostHeight);
ilc = child as ILayoutChild;
- var childYpos:Number = ypos + mt; // default y position
+ var childYpos:Number = ypos + margins.top; // default y position
if (!hostSizedToContent) {
var childHeight:Number = child.height;
@@ -193,7 +158,7 @@ package org.apache.flex.html.beads.layouts
ilc.setHeight(childHeight);
}
// the following code middle-aligns the child
- childYpos = hostHeight/2 - (childHeight + mt + mb)/2;
+ childYpos = hostHeight/2 - (childHeight + margins.top + margins.bottom)/2;
}
if (ilc) {
@@ -203,11 +168,11 @@ package org.apache.flex.html.beads.layouts
}
if (i > 0) {
- xpos -= child.width + mr;
+ xpos -= child.width + margins.right;
adjustedWidth = child.width;
} else {
- adjustedWidth = xpos - (borderMetrics.left + paddingMetrics.left + ml + mr);
- xpos = borderMetrics.left + paddingMetrics.left + ml;
+ adjustedWidth = xpos - (borderMetrics.left + paddingMetrics.left + margins.left + margins.right);
+ xpos = borderMetrics.left + paddingMetrics.left + margins.left;
}
if (ilc) {
@@ -221,17 +186,16 @@ package org.apache.flex.html.beads.layouts
child.width = adjustedWidth;
}
- xpos -= ml;
+ xpos -= margins.left;
}
return true;
}
COMPILE::JS
- public function layout():Boolean
+ override public function layout():Boolean
{
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
// set the display on the contentView
contentView.element.style["display"] = "flex";
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/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 473bfe3..eb30512 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
@@ -18,7 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
- import org.apache.flex.html.beads.layouts.HorizontalLayout;
+// import org.apache.flex.html.beads.layouts.HorizontalLayout;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutHost;
@@ -53,17 +53,6 @@ package org.apache.flex.html.beads.layouts
super();
}
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
- override public function set strand(value:IStrand):void
- {
- super.strand = value;
- host = value as ILayoutChild;
- }
-
private var _grow:Number = -1;
/**
@@ -115,10 +104,7 @@ package org.apache.flex.html.beads.layouts
override public function layout():Boolean
{
COMPILE::SWF {
- //return super.layout();
- // this is where the layout is calculated
- 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;
@@ -134,11 +120,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
//trace("HorizontalFlexLayout for "+UIBase(host).id+" with remainingWidth: "+remainingWidth);
@@ -177,24 +158,14 @@ package org.apache.flex.html.beads.layouts
}
if (growValue == 0 && useWidth > 0) remainingWidth -= useWidth;
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, contentView.width);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, contentView.width);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, contentView.height);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, contentView.height);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
+ var margins:Object = childMargins(child, contentView.width, contentView.height);
if (maxWidth < useWidth) maxWidth = useWidth;
if (maxHeight < useHeight) maxHeight = useHeight;
- childData.push({width:useWidth, height:useHeight, mt:mt, ml:ml, mr:mr, mb:mb, grow:growValue, canAdjust:canAdjust});
+ childData.push({width:useWidth, height:useHeight,
+ mt:margins.top, ml:margins.left, mr:margins.right, mb:margins.bottom,
+ grow:growValue, canAdjust:canAdjust});
}
var xpos:Number = 0;
@@ -250,8 +221,7 @@ package org.apache.flex.html.beads.layouts
}
COMPILE::JS {
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
// set the display on the contentView
contentView.element.style["display"] = "flex";
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlowLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlowLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlowLayout.as
index 8209278..84484cb 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlowLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalFlowLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.ILayoutHost;
import org.apache.flex.core.ILayoutParent;
@@ -44,7 +45,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class HorizontalFlowLayout implements IBeadLayout
+ public class HorizontalFlowLayout extends LayoutBase implements IBeadLayout
{
/**
* constructor.
@@ -56,21 +57,7 @@ package org.apache.flex.html.beads.layouts
*/
public function HorizontalFlowLayout()
{
- }
-
- private var _strand:IStrand;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- _strand = value;
+ super();
}
private var _defaultColumnCount:Number = 4;
@@ -174,14 +161,11 @@ package org.apache.flex.html.beads.layouts
/**
* @copy org.apache.flex.core.IBeadLayout#layout
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
COMPILE::SWF
{
- // this is where the layout is calculated
- var host:UIBase = _strand as UIBase;
- var p:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var area:UIBase = p.contentView as UIBase;
+ var area:UIBase = layoutView as UIBase;
var n:Number = area.numElements;
if (n == 0) return false;
@@ -239,9 +223,8 @@ package org.apache.flex.html.beads.layouts
var useWidth:Number;
var useHeight:Number;
- var host:UIBase = _strand as UIBase;
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var area:IParentIUIBase = viewBead.contentView as IParentIUIBase;
+ var area:IParentIUIBase = layoutView as IParentIUIBase;
+
children = area.internalChildren();
n = children.length;
if (n === 0) return false;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as
index 44f60bd..b58497a 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as
@@ -18,6 +18,8 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
+
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IBeadModel;
import org.apache.flex.core.ILayoutChild;
@@ -51,7 +53,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class HorizontalLayout implements IBeadLayout
+ public class HorizontalLayout extends LayoutBase implements IBeadLayout
{
/**
* Constructor.
@@ -63,13 +65,9 @@ package org.apache.flex.html.beads.layouts
*/
public function HorizontalLayout()
{
+ super();
}
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
/**
* @copy org.apache.flex.core.IBead#strand
*
@@ -80,9 +78,10 @@ package org.apache.flex.html.beads.layouts
* @flexjsignorecoercion HTMLElement
* @flexjsignorecoercion org.apache.flex.core.IUIBase
*/
- public function set strand(value:IStrand):void
+ override public function set strand(value:IStrand):void
{
- host = value as ILayoutChild;
+ super.strand = value;
+
COMPILE::JS
{
var base:IUIBase = value as IUIBase;
@@ -97,12 +96,11 @@ package org.apache.flex.html.beads.layouts
* @flexjsignorecoercion org.apache.flex.core.ILayoutHost
* @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
*/
- public function layout():Boolean
+ 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;
@@ -116,11 +114,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(host);
@@ -133,33 +126,20 @@ package org.apache.flex.html.beads.layouts
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
if (child == null || !child.visible) continue;
- var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
- var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
+ var positions:Object = childPositions(child);
+ var margins:Object = childMargins(child, hostWidth, hostHeight);
ilc = child as ILayoutChild;
- xpos += ml;
+ xpos += margins.left;
- var childYpos:Number = ypos + mt; // default y position
+ var childYpos:Number = ypos + margins.top; // default y position
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;
- ilc.setHeight(childHeight - mt - mb);
+ ilc.setHeight(childHeight - margins.top - margins.bottom);
}
// the following code middle-aligns the child, but since HTML does not
// do this normally, this code is commented. (Use HorizontalFlexLayout for
@@ -173,7 +153,7 @@ package org.apache.flex.html.beads.layouts
if (!isNaN(ilc.percentWidth)) {
var newWidth:Number = (contentView.width-borderMetrics.left-borderMetrics.right-paddingMetrics.left-paddingMetrics.right) * ilc.percentWidth / 100;
- ilc.setWidth(newWidth - mr - ml);
+ ilc.setWidth(newWidth - margins.right - margins.left);
}
} else {
@@ -181,7 +161,7 @@ package org.apache.flex.html.beads.layouts
child.y = childYpos;
}
- xpos += child.width + mr;
+ xpos += child.width + margins.right;
}
return true;
@@ -192,9 +172,7 @@ package org.apache.flex.html.beads.layouts
var children:Array;
var i:int;
var n:int;
-
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:IParentIUIBase = viewBead.contentView as IParentIUIBase;
+ var contentView:IParentIUIBase = layoutView as IParentIUIBase;
contentView.element.style["white-space"] = "nowrap";
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
index c163807..5707428 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IDocument;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutHost;
@@ -46,7 +47,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class OneFlexibleChildHorizontalLayout implements IOneFlexibleChildLayout, IDocument
+ public class OneFlexibleChildHorizontalLayout extends LayoutBase implements IOneFlexibleChildLayout, IDocument
{
/**
* Constructor.
@@ -58,6 +59,7 @@ package org.apache.flex.html.beads.layouts
*/
public function OneFlexibleChildHorizontalLayout()
{
+ super();
}
@@ -65,11 +67,6 @@ package org.apache.flex.html.beads.layouts
private var actualChild:ILayoutChild;
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
/**
* @private
* The document.
@@ -97,19 +94,6 @@ package org.apache.flex.html.beads.layouts
_flexibleChild = value;
}
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- host = value as ILayoutChild;
- }
-
private var _maxWidth:Number;
/**
@@ -160,10 +144,9 @@ package org.apache.flex.html.beads.layouts
* @copy org.apache.flex.core.IBeadLayout#layout
*/
COMPILE::JS
- public function layout():Boolean
+ override public function layout():Boolean
{
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
actualChild = document[flexibleChild];
@@ -185,30 +168,9 @@ package org.apache.flex.html.beads.layouts
}
COMPILE::SWF
- protected function childMargins(child:Object, hostWidth:Number, hostHeight:Number):Object
- {
- var margin:Object = ValuesManager.valuesImpl.getValue(child, "margin");
- var marginLeft:Object = ValuesManager.valuesImpl.getValue(child, "margin-left");
- var marginTop:Object = ValuesManager.valuesImpl.getValue(child, "margin-top");
- var marginRight:Object = ValuesManager.valuesImpl.getValue(child, "margin-right");
- var marginBottom:Object = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
-
- return {left:ml, top:mt, right:mr, bottom:mb};
- }
-
- COMPILE::SWF
- public function layout():Boolean
+ override public function layout():Boolean
{
- var layoutHost:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = layoutHost.contentView;
+ var contentView:ILayoutView = layoutView;
var actualChild:IUIBase = document.hasOwnProperty(flexibleChild) ? document[flexibleChild] : null;
var n:Number = contentView.numElements;
@@ -223,15 +185,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
- var ml:Number;
- var mr:Number;
- var mt:Number;
- var mb:Number;
var margins:Object;
var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as
index 21d9059..a183cad 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IDocument;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutHost;
@@ -47,7 +48,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class OneFlexibleChildVerticalLayout implements IOneFlexibleChildLayout, IDocument
+ public class OneFlexibleChildVerticalLayout extends LayoutBase implements IOneFlexibleChildLayout, IDocument
{
/**
* Constructor.
@@ -59,6 +60,7 @@ package org.apache.flex.html.beads.layouts
*/
public function OneFlexibleChildVerticalLayout()
{
+ super();
}
@@ -66,11 +68,6 @@ package org.apache.flex.html.beads.layouts
private var actualChild:ILayoutChild;
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
/**
* @private
* The document.
@@ -98,19 +95,6 @@ package org.apache.flex.html.beads.layouts
_flexibleChild = value;
}
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- host = value as ILayoutChild;
- }
-
private var _maxWidth:Number;
/**
@@ -157,34 +141,13 @@ package org.apache.flex.html.beads.layouts
_maxHeight = value;
}
- COMPILE::SWF
- protected function childMargins(child:Object, hostWidth:Number, hostHeight:Number):Object
- {
- var margin:Object = ValuesManager.valuesImpl.getValue(child, "margin");
- var marginLeft:Object = ValuesManager.valuesImpl.getValue(child, "margin-left");
- var marginTop:Object = ValuesManager.valuesImpl.getValue(child, "margin-top");
- var marginRight:Object = ValuesManager.valuesImpl.getValue(child, "margin-right");
- var marginBottom:Object = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
-
- return {left:ml, top:mt, right:mr, bottom:mb};
- }
-
/**
* @copy org.apache.flex.core.IBeadLayout#layout
*/
COMPILE::JS
- public function layout():Boolean
+ override public function layout():Boolean
{
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
actualChild = document[flexibleChild];
@@ -206,10 +169,9 @@ package org.apache.flex.html.beads.layouts
}
COMPILE::SWF
- public function layout():Boolean
+ override public function layout():Boolean
{
- var layoutHost:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = layoutHost.contentView;
+ var contentView:ILayoutView = layoutView;
var actualChild:IUIBase = document.hasOwnProperty(flexibleChild) ? document[flexibleChild] : null;
var n:Number = contentView.numElements;
@@ -224,15 +186,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
- var ml:Number;
- var mr:Number;
- var mt:Number;
- var mb:Number;
var margins:Object;
var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as
index 8f3c265..773bc4f 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.ILayoutHost;
import org.apache.flex.core.ILayoutView;
@@ -41,7 +42,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class TileLayout implements IBeadLayout
+ public class TileLayout extends LayoutBase implements IBeadLayout
{
/**
* constructor.
@@ -53,21 +54,7 @@ package org.apache.flex.html.beads.layouts
*/
public function TileLayout()
{
- }
-
- private var _strand:IStrand;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- _strand = value;
+ super();
}
private var _numColumns:Number = 4;
@@ -132,14 +119,11 @@ package org.apache.flex.html.beads.layouts
/**
* @copy org.apache.flex.core.IBeadLayout#layout
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
COMPILE::SWF
{
- // this is where the layout is calculated
- var host:UIBase = _strand as UIBase;
- var p:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var area:UIBase = p.contentView as UIBase;
+ var area:UIBase = layoutView as UIBase;
var xpos:Number = 0;
var ypos:Number = 0;
@@ -207,9 +191,8 @@ package org.apache.flex.html.beads.layouts
var useWidth:Number;
var useHeight:Number;
- var host:UIBase = _strand as UIBase;
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:IParentIUIBase = viewBead.contentView as IParentIUIBase;
+ var contentView:IParentIUIBase = layoutView as IParentIUIBase;
+
children = contentView.internalChildren();
n = children.length;
if (n === 0) return false;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
index bac2dc8..e489d85 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
@@ -18,6 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IContainer;
import org.apache.flex.core.ILayoutHost;
@@ -45,7 +46,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class VerticalColumnLayout implements IBeadLayout
+ public class VerticalColumnLayout extends LayoutBase implements IBeadLayout
{
/**
* constructor
@@ -57,21 +58,7 @@ package org.apache.flex.html.beads.layouts
*/
public function VerticalColumnLayout()
{
- }
-
- private var _strand:IStrand;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- _strand = value;
+ super();
}
@@ -97,11 +84,10 @@ package org.apache.flex.html.beads.layouts
/**
* @copy org.apache.flex.core.IBeadLayout#layout
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
- var host:UIBase = UIBase(_strand);
- var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = layoutParent.contentView;
+ var contentView:ILayoutView = layoutView;
+
var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
var sw:Number = host.width;
var sh:Number = host.height;
@@ -117,15 +103,6 @@ package org.apache.flex.html.beads.layouts
for (i = 0; i < numColumns; i++)
columns[i] = 0;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
- var ml:Number;
- var mr:Number;
- var mt:Number;
- var mb:Number;
var n:int = contentView.numElements;
var rowData:Object = { rowHeight: 0 };
@@ -133,29 +110,22 @@ package org.apache.flex.html.beads.layouts
for (i = 0; i < n; i++) {
e = contentView.getElementAt(i) as IUIBase;
if (e == null || !e.visible) continue;
- margin = ValuesManager.valuesImpl.getValue(e, "margin");
- marginLeft = ValuesManager.valuesImpl.getValue(e, "margin-left");
- marginTop = ValuesManager.valuesImpl.getValue(e, "margin-top");
- marginRight = ValuesManager.valuesImpl.getValue(e, "margin-right");
- marginBottom = ValuesManager.valuesImpl.getValue(e, "margin-bottom");
- mt = CSSUtils.getTopValue(marginTop, margin, sh);
- mb = CSSUtils.getBottomValue(marginBottom, margin, sh);
- mr = CSSUtils.getRightValue(marginRight, margin, sw);
- ml = CSSUtils.getLeftValue(marginLeft, margin, sw);
- data.push({ mt: mt, mb: mb, mr: mr, ml: ml});
+ var margins:Object = childMargins(e, sw, sh);
+
+ data.push({ mt: margins.top, mb: margins.bottom, mr: margins.right, ml: margins.left});
var thisPrefWidth:int = 0;
if (e is IStrand)
{
var measure:IMeasurementBead = e.getBeadByType(IMeasurementBead) as IMeasurementBead;
if (measure)
- thisPrefWidth = measure.measuredWidth + ml + mr;
+ thisPrefWidth = measure.measuredWidth + margins.left + margins.right;
else
- thisPrefWidth = e.width + ml + mr;
+ thisPrefWidth = e.width + margins.left + margins.right;
}
else
- thisPrefWidth = e.width + ml + mr;
+ thisPrefWidth = e.width + margins.left + margins.right;
- rowData.rowHeight = Math.max(rowData.rowHeight, e.height + mt + mb);
+ rowData.rowHeight = Math.max(rowData.rowHeight, e.height + margins.top + margins.bottom);
columns[col] = Math.max(columns[col], thisPrefWidth);
col = col + 1;
if (col == numColumns)
@@ -176,7 +146,7 @@ package org.apache.flex.html.beads.layouts
{
e = contentView.getElementAt(i) as IUIBase;
if (e == null || !e.visible) continue;
- e.x = curx + ml;
+ e.x = curx + data[i].ml;
e.y = cury + data[i].mt;
curx += columns[col++];
maxHeight = Math.max(maxHeight, e.y + e.height + data[i].mb);
@@ -189,14 +159,6 @@ package org.apache.flex.html.beads.layouts
curx = padding.left;
}
}
- if (!hasWidth && n > 0 && !isNaN(maxWidth))
- {
- UIBase(contentView).setWidth(maxWidth, true);
- }
- if (!hasHeight && n > 0 && !isNaN(maxHeight))
- {
- UIBase(contentView).setHeight(maxHeight, true);
- }
return true;
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/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 e8d9a41..d98e300 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
@@ -18,7 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
- import org.apache.flex.html.beads.layouts.VerticalLayout;
+ //import org.apache.flex.html.beads.layouts.VerticalLayout;
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutHost;
@@ -53,17 +53,6 @@ package org.apache.flex.html.beads.layouts
super();
}
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
- override public function set strand(value:IStrand):void
- {
- super.strand = value;
- host = value as ILayoutChild;
- }
-
private var _grow:Number = -1;
/**
@@ -115,7 +104,6 @@ package org.apache.flex.html.beads.layouts
override public function layout():Boolean
{
COMPILE::SWF {
- //return super.layout();
var layoutHost:ILayoutHost = (host as ILayoutParent).getLayoutHost();
var contentView:ILayoutView = layoutHost.contentView;
@@ -133,11 +121,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
//trace("VerticalFlexLayout for "+UIBase(host).id+" with remainingHeight: "+remainingHeight);
@@ -176,24 +159,14 @@ package org.apache.flex.html.beads.layouts
}
if (growValue == 0 && useHeight > 0) remainingHeight -= useHeight;
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, contentView.width);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, contentView.width);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, contentView.height);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, contentView.height);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
+ var margins:Object = childMargins(child, contentView.width, contentView.height);
if (maxWidth < useWidth) maxWidth = useWidth;
if (maxHeight < useHeight) maxHeight = useHeight;
- childData.push({width:useWidth, height:useHeight, mt:mt, ml:ml, mr:mr, mb:mb, grow:growValue, canAdjust:canAdjust});
+ childData.push({width:useWidth, height:useHeight,
+ mt:margins.top, ml:margins.left, mr:margins.right, mb:margins.bottom,
+ grow:growValue, canAdjust:canAdjust});
}
var xpos:Number = 0;
@@ -249,8 +222,7 @@ package org.apache.flex.html.beads.layouts
}
COMPILE::JS {
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:ILayoutView = viewBead.contentView;
+ var contentView:ILayoutView = layoutView;
contentView.element.style["display"] = "flex";
contentView.element.style["flex-flow"] = "column";
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4f0765d0/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
index ca442d9..c4279a4 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as
@@ -18,6 +18,8 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads.layouts
{
+ import org.apache.flex.core.LayoutBase;
+
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IBeadModel;
import org.apache.flex.core.ILayoutChild;
@@ -49,7 +51,7 @@ package org.apache.flex.html.beads.layouts
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class VerticalLayout implements IBeadLayout
+ public class VerticalLayout extends LayoutBase implements IBeadLayout
{
/**
* Constructor.
@@ -61,24 +63,7 @@ package org.apache.flex.html.beads.layouts
*/
public function VerticalLayout()
{
- }
-
- // the strand/host container is also an ILayoutChild because
- // can have its size dictated by the host's parent which is
- // important to know for layout optimization
- private var host:ILayoutChild;
-
- /**
- * @copy org.apache.flex.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function set strand(value:IStrand):void
- {
- host = value as ILayoutChild;
+ super();
}
/**
@@ -90,12 +75,11 @@ package org.apache.flex.html.beads.layouts
* @productversion FlexJS 0.0
* @flexjsignorecoercion org.apache.flex.core.ILayoutHost
*/
- public function layout():Boolean
+ 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;
@@ -109,11 +93,6 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild;
var data:Object;
var canAdjust:Boolean = false;
- var marginLeft:Object;
- var marginRight:Object;
- var marginTop:Object;
- var marginBottom:Object;
- var margin:Object;
var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host);
var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(host);
@@ -126,33 +105,20 @@ package org.apache.flex.html.beads.layouts
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
if (child == null || !child.visible) continue;
- var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
- var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
- margin = ValuesManager.valuesImpl.getValue(child, "margin");
- 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");
- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, hostWidth);
- var mr:Number = CSSUtils.getRightValue(marginRight, margin, hostWidth);
- var mt:Number = CSSUtils.getTopValue(marginTop, margin, hostHeight);
- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, hostHeight);
- if (marginLeft == "auto")
- ml = 0;
- if (marginRight == "auto")
- mr = 0;
+ var positions:Object = childPositions(child);
+ var margins:Object = childMargins(child, hostWidth, hostHeight);
ilc = child as ILayoutChild;
- ypos += mt;
+ ypos += margins.top;
- var childXpos:Number = xpos + ml; // default x position
+ var childXpos:Number = xpos + margins.left; // default x position
if (!hostSizedToContent) {
var childWidth:Number = child.width;
if (ilc != null && !isNaN(ilc.percentWidth)) {
childWidth = (hostWidth-borderMetrics.left-borderMetrics.right-paddingMetrics.left-paddingMetrics.right) * ilc.percentWidth/100.0;
- ilc.setWidth(childWidth - mr - ml);
+ ilc.setWidth(childWidth - margins.right - margins.left);
}
// the following code center-aligns the child, but since HTML does not
// do this normally, this code is commented. (Use VerticalFlexLayout for
@@ -166,7 +132,7 @@ package org.apache.flex.html.beads.layouts
if (!isNaN(ilc.percentHeight)) {
var newHeight:Number = (contentView.height-borderMetrics.top-borderMetrics.bottom-paddingMetrics.top-paddingMetrics.bottom) * ilc.percentHeight / 100;
- ilc.setHeight(newHeight - mt - mb);
+ ilc.setHeight(newHeight - margins.top - margins.bottom);
}
} else {
@@ -174,7 +140,7 @@ package org.apache.flex.html.beads.layouts
child.y = ypos;
}
- ypos += child.height + mb;
+ ypos += child.height + margins.bottom;
}
return true;
@@ -184,9 +150,8 @@ package org.apache.flex.html.beads.layouts
var children:Array;
var i:int;
var n:int;
-
- var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost();
- var contentView:IParentIUIBase = viewBead.contentView as IParentIUIBase;
+ var contentView:IParentIUIBase = layoutView as IParentIUIBase;
+
children = contentView.internalChildren();
n = children.length;
for (i = 0; i < n; i++)