be smarter about when ContentArea is resized
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/904ec201 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/904ec201 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/904ec201 Branch: refs/heads/develop Commit: 904ec20175c2406cd169dbed0f6ab2e93aaa57d4 Parents: 6989ccf Author: Alex Harui <[email protected]> Authored: Tue Oct 28 09:48:16 2014 -0700 Committer: Alex Harui <[email protected]> Committed: Wed Oct 29 11:15:43 2014 -0700 ---------------------------------------------------------------------- .../org/apache/flex/html/beads/ContainerView.as | 86 ++++++++++++++------ 1 file changed, 59 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/904ec201/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ContainerView.as ---------------------------------------------------------------------- diff --git a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ContainerView.as b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ContainerView.as index b934e94..d6b587b 100644 --- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ContainerView.as +++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ContainerView.as @@ -81,10 +81,62 @@ package org.apache.flex.html.beads override public function set strand(value:IStrand):void { super.strand = value; - changeHandler(null); - IEventDispatcher(_strand).addEventListener("childrenAdded", changeHandler); - IEventDispatcher(_strand).addEventListener("widthChanged", changeHandler); - IEventDispatcher(_strand).addEventListener("heightChanged", changeHandler); + + var host:UIBase = value as UIBase; + + if (_strand.getBeadByType(IBeadLayout) == null) + { + var c:Class = ValuesManager.valuesImpl.getValue(host, "iBeadLayout"); + if (c) + { + var layout:IBeadLayout = new c() as IBeadLayout; + _strand.addBead(layout); + } + } + + if (host.isWidthSizedToContent() && host.isHeightSizedToContent()) + { + host.addEventListener("childrenAdded", changeHandler); + checkActualParent(); + } + else + { + host.addEventListener("widthChanged", changeHandler); + host.addEventListener("heightChanged", changeHandler); + host.addEventListener("sizeChanged", sizeChangeHandler); + if (!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight)) + sizeChangeHandler(null); + else + checkActualParent(); + } + } + + private function checkActualParent():Boolean + { + var host:UIBase = UIBase(_strand); + if (contentAreaNeeded()) + { + if (actualParent == null || actualParent == host) + { + actualParent = new ContainerContentArea(); + host.addElement(actualParent); + Container(host).setActualParent(actualParent); + } + return true; + } + else + { + actualParent = host; + } + return false; + } + + private function sizeChangeHandler(event:Event):void + { + var host:UIBase = UIBase(_strand); + host.addEventListener("childrenAdded", changeHandler); + host.addEventListener("layoutNeeded", changeHandler); + changeHandler(event); } private var inChangeHandler:Boolean; @@ -107,14 +159,8 @@ package org.apache.flex.html.beads var padding:Object = determinePadding(); - if (contentAreaNeeded()) + if (checkActualParent()) { - if (actualParent == null || actualParent == host) - { - actualParent = new ContainerContentArea(); - host.addElement(actualParent); - Container(host).setActualParent(actualParent); - } actualParent.x = padding.paddingLeft; actualParent.y = padding.paddingTop; var pb:Number = padding.paddingBottom; @@ -124,19 +170,15 @@ package org.apache.flex.html.beads if (isNaN(pr)) pr = 0; if (!isNaN(host.explicitWidth) || !isNaN(host.percentWidth)) - actualParent.width = host.width - padding.paddingLeft - pr; + actualParent.setWidth(host.width - padding.paddingLeft - pr); else host.dispatchEvent(new Event("widthChanged")); if (!isNaN(host.explicitHeight) || !isNaN(host.percentHeight)) - actualParent.height = host.height - padding.paddingTop - pb; + actualParent.setHeight(host.height - padding.paddingTop - pb); else host.dispatchEvent(new Event("heightChanged")); } - else - { - actualParent = host; - } var backgroundColor:Object = ValuesManager.valuesImpl.getValue(host, "background-color"); var backgroundImage:Object = ValuesManager.valuesImpl.getValue(host, "background-image"); @@ -162,16 +204,6 @@ package org.apache.flex.html.beads host.addBead(new (ValuesManager.valuesImpl.getValue(host, "iBorderBead")) as IBead); } - if (_strand.getBeadByType(IBeadLayout) == null) - { - var c:Class = ValuesManager.valuesImpl.getValue(host, "iBeadLayout"); - if (c) - { - var mapper:IBeadLayout = new c() as IBeadLayout; - _strand.addBead(mapper); - } - } - inChangeHandler = false; }
