I think I just ran into the same issue.

This layout seems to more-or-less do the job, but it’s kind of heavy.

I did some research into flexbox and it appear that setting flex-basis to 0 
does the job. It needs to be set on ONLY the one flexible child.

Here’s a codepen which shows a use case.
https://codepen.io/jpdevries/pen/oXxPOP 
<https://codepen.io/jpdevries/pen/oXxPOP>

I noticed that the OneFlexibleLayouts have code which set the flex-basis of the 
children if a percentage value is set. When setting the size of the one 
flexible child to 0% this causes the flex-basis to be set to 0 and then the one 
flexible child will fit the remaining space even if it might overflow because 
of its children.

I have wasted quite a bit of time before I discovered this. I’m not sure 
whether the OneFlexibleLayout classes should be changed, or maybe we need 
documentation that to fit content that might overflow, the percentage should be 
set to 0. It could be there are cases where the entire OnFlexibleLayout should 
be fit when smaller and expand (and not scroll) when bigger. In that case, the 
current behavior might be correct.

Thoughts?
Harbs

> On May 23, 2017, at 10:16 AM, aha...@apache.org wrote:
> 
> give up on trying to use FlexBox for full-screen 3-pane views.  FlexBox seems 
> more happy stretching to content size instead of clipping at the computed 
> flex-ed size.  These custom layouts will do the proper sizing
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/bdd34d2e
> Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/bdd34d2e
> Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/bdd34d2e
> 
> Branch: refs/heads/release0.8.0
> Commit: bdd34d2ef4d8117fa1b222ac470482a42dbea9eb
> Parents: c505d67
> Author: Alex Harui <aha...@apache.org>
> Authored: Mon May 22 10:12:02 2017 -0700
> Committer: Alex Harui <aha...@apache.org>
> Committed: Tue May 23 00:15:56 2017 -0700
> 
> ----------------------------------------------------------------------
> ...eFlexibleChildHorizontalLayoutForOverflow.as | 290 ++++++++++++++++++
> ...xibleChildHorizontalLayoutLockChildHeight.as |  91 ------
> ...OneFlexibleChildVerticalLayoutForOverflow.as | 291 +++++++++++++++++++
> ...FlexibleChildVerticalLayoutLockChildWidth.as |  93 ------
> .../Basic/src/main/resources/basic-manifest.xml |   4 +-
> 5 files changed, 583 insertions(+), 186 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/bdd34d2e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutForOverflow.as
> ----------------------------------------------------------------------
> diff --git 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutForOverflow.as
>  
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutForOverflow.as
> new file mode 100644
> index 0000000..c6abc22
> --- /dev/null
> +++ 
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutForOverflow.as
> @@ -0,0 +1,290 @@
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +//  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.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;
> +     import org.apache.flex.core.ILayoutView;
> +     import org.apache.flex.core.ILayoutParent;
> +     import org.apache.flex.core.IParentIUIBase;
> +     import org.apache.flex.core.IStrand;
> +     import org.apache.flex.core.IUIBase;
> +     import org.apache.flex.core.ValuesManager;
> +     import org.apache.flex.core.UIBase;
> +     import org.apache.flex.events.Event;
> +     import org.apache.flex.geom.Rectangle;
> +     import org.apache.flex.utils.CSSContainerUtils;
> +     import org.apache.flex.utils.CSSUtils;
> +
> +    /**
> +     *  The OneFlexibleChildHorizontalLayoutForOverflowis 
> +      *  intended for building apps that clip
> +      *  and/or scroll the overflow, especially in a 
> +      *  3-pane view like the ASDoc examples.  It does not use
> +      *  FlexBox because FlexBox wants to grow to the size
> +      *  of the content without specifying width/height on
> +      *  the flexible child.  But then the children in
> +      *  the flexible child cannot use % sizing.
> +      *  This layout presumes the parent is a known size.
> +      *
> +     *  @langversion 3.0
> +     *  @playerversion Flash 10.2
> +     *  @playerversion AIR 2.6
> +     *  @productversion FlexJS 0.0
> +     */
> +     public class OneFlexibleChildHorizontalLayoutForOverflow extends 
> LayoutBase implements IOneFlexibleChildLayout, IDocument
> +     {
> +        /**
> +         *  Constructor.
> +         *
> +         *  @langversion 3.0
> +         *  @playerversion Flash 10.2
> +         *  @playerversion AIR 2.6
> +         *  @productversion FlexJS 0.0
> +         */
> +             public function OneFlexibleChildHorizontalLayoutForOverflow()
> +             {
> +                     super();
> +             }
> +
> +        private var _flexibleChild:String;
> +
> +        protected var actualChild:ILayoutChild;
> +
> +        /**
> +         *  @private
> +         *  The document.
> +         */
> +        private var document:Object;
> +
> +             /**
> +              *  The id of the flexible child
> +              *
> +              *  @langversion 3.0
> +              *  @playerversion Flash 10.2
> +              *  @playerversion AIR 2.6
> +              *  @productversion FlexJS 0.0
> +              */
> +             public function get flexibleChild():String
> +             {
> +                     return _flexibleChild;
> +             }
> +
> +             /**
> +              * @private
> +              */
> +             public function set flexibleChild(value:String):void
> +             {
> +                     _flexibleChild = value;
> +             }
> +
> +        /**
> +         * @copy org.apache.flex.core.IBeadLayout#layout
> +         */
> +             COMPILE::JS
> +             override public function layout():Boolean
> +             {
> +                     var contentView:ILayoutView = layoutView;
> +
> +                     actualChild = document[flexibleChild];
> +
> +                     var n:int = contentView.numElements;
> +                     if (n == 0) return false;
> +
> +                     for(var i:int=0; i < n; i++) {
> +                             var child:UIBase = contentView.getElementAt(i) 
> as UIBase;
> +                             if (child.element.style["display"] != 
> "inline-flex" && child.element.style["display"] != "none")
> +                                     child.element.style["display"] = 
> "inline-block";
> +                     }
> +
> +                     var w:Number = host.width;
> +                     for(i=0; i < n; i++) {
> +                             child = contentView.getElementAt(i) as UIBase;
> +                             if (child != actualChild)
> +                                     w -= child.width;
> +                     }
> +                     actualChild.width = w;
> +                                     
> +                     return true;
> +             }
> +
> +             COMPILE::SWF
> +             override public function layout():Boolean
> +             {
> +                     var contentView:ILayoutView = layoutView;
> +                     actualChild = document.hasOwnProperty(flexibleChild) ? 
> document[flexibleChild] : null;
> +
> +                     var n:Number = contentView.numElements;
> +                     if (n == 0) return false;
> +                     
> +                     var maxWidth:Number = 0;
> +                     var maxHeight:Number = 0;
> +                     var hostSizedToContent:Boolean = 
> host.isHeightSizedToContent();
> +                     var hostWidth:Number = host.width;
> +                     var hostHeight:Number = host.height;
> +
> +                     var ilc:ILayoutChild;
> +                     var data:Object;
> +                     var canAdjust:Boolean = false;
> +                     var margins:Object;
> +
> +                     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 = borderMetrics.left + 
> paddingMetrics.left;
> +                     var ypos:Number = borderMetrics.top + 
> paddingMetrics.left;
> +                     var child:IUIBase;
> +                     var childHeight:Number;
> +                     var i:int;
> +                     var childYpos:Number;
> +                     var adjustLeft:Number = 0;
> +                     var adjustRight:Number = hostWidth + borderMetrics.left 
> + paddingMetrics.left;
> +
> +                     // first work from left to right
> +                     for(i=0; i < n; i++)
> +                     {
> +                             child = contentView.getElementAt(i) as IUIBase;
> +                             if (child == null || !child.visible) continue;
> +                             if (child == actualChild) break;
> +
> +                             margins = childMargins(child, hostWidth, 
> hostHeight);
> +                             ilc = child as ILayoutChild;
> +
> +                             xpos += margins.left;
> +
> +                             childYpos = ypos + margins.top; // default y 
> position
> +
> +                             childHeight = child.height;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentHeight)) {
> +                                             childHeight = host.height * 
> ilc.percentHeight/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitHeight)) {
> +                                             childHeight = host.height;
> +                                     }
> +                                     ilc.setHeight(childHeight);
> +                             }
> +
> +                             if (ilc) {
> +                                     ilc.setX(xpos);
> +                                     ilc.setY(childYpos);
> +
> +                                     if (!isNaN(ilc.percentWidth)) {
> +                                             ilc.setWidth(hostWidth * 
> ilc.percentWidth / 100);
> +                                     }
> +
> +                             } else {
> +                                     child.x = xpos;
> +                                     child.y = childYpos;
> +                             }
> +
> +                             xpos += child.width + margins.right;
> +                             adjustLeft = xpos;
> +                     }
> +
> +                     // then work from right to left
> +                     xpos = hostWidth + borderMetrics.left + 
> paddingMetrics.left;
> +
> +                     for(i=(n-1); actualChild != null && i >= 0; i--)
> +                     {
> +                             child = contentView.getElementAt(i) as IUIBase;
> +                             if (child == null || !child.visible) continue;
> +                             if (child == actualChild) break;
> +
> +                             margins = childMargins(child, hostWidth, 
> hostHeight);
> +                             ilc = child as ILayoutChild;
> +
> +                             childYpos = ypos + margins.top; // default y 
> position
> +
> +                             childHeight = child.height;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentHeight)) {
> +                                             childHeight = host.height * 
> ilc.percentHeight/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitHeight)) {
> +                                             childHeight = host.height;
> +                                     }
> +                                     ilc.setHeight(childHeight);
> +                             }
> +
> +                             if (ilc) {
> +                                     if (!isNaN(ilc.percentWidth)) {
> +                                             ilc.setWidth(hostWidth * 
> ilc.percentWidth / 100);
> +                                     }
> +                             }
> +
> +                             xpos -= child.width + margins.right;
> +
> +                             if (ilc) {
> +                                     ilc.setX(xpos);
> +                                     ilc.setY(childYpos);
> +                             } else {
> +                                     child.x = xpos;
> +                                     child.y = childYpos;
> +                             }
> +
> +                             xpos -= margins.left;
> +                             adjustRight = xpos;
> +                     }
> +
> +                     // now adjust the actualChild to fill the space.
> +                     if (actualChild != null) {
> +                             margins = childMargins(actualChild, hostWidth, 
> hostHeight);
> +                             ilc = actualChild as ILayoutChild;
> +                             childHeight = actualChild.height;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentHeight)) {
> +                                             childHeight = host.height * 
> ilc.percentHeight/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitHeight)) {
> +                                             childHeight = host.height;
> +                                     }
> +                                     ilc.setHeight(childHeight);
> +                             }
> +                             childYpos = ypos + margins.top;
> +                             actualChild.x = adjustLeft + margins.left;
> +                             actualChild.y = childYpos;
> +                             if (ilc) {
> +                                     
> ilc.setWidth((adjustRight-margins.right) - (adjustLeft+margins.left));
> +                             } else {
> +                                     actualChild.width = 
> (adjustRight-margins.right) - (adjustLeft+margins.left);
> +                             }
> +                     }
> +
> +            return true;
> +             }
> +
> +        public function setDocument(document:Object, id:String = null):void
> +        {
> +            this.document = document;
> +        }
> +
> +    }
> +
> +}
> 
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/bdd34d2e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
> ----------------------------------------------------------------------
> diff --git 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
>  
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
> deleted file mode 100644
> index d170d23..0000000
> --- 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayoutLockChildHeight.as
> +++ /dev/null
> @@ -1,91 +0,0 @@
> -////////////////////////////////////////////////////////////////////////////////
> -//
> -//  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.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;
> -     import org.apache.flex.core.ILayoutView;
> -     import org.apache.flex.core.ILayoutParent;
> -     import org.apache.flex.core.IParentIUIBase;
> -     import org.apache.flex.core.IStrand;
> -     import org.apache.flex.core.IUIBase;
> -     import org.apache.flex.core.ValuesManager;
> -     import org.apache.flex.core.UIBase;
> -     import org.apache.flex.events.Event;
> -     import org.apache.flex.geom.Rectangle;
> -     import org.apache.flex.utils.CSSContainerUtils;
> -     import org.apache.flex.utils.CSSUtils;
> -
> -    /**
> -     *  The OneFlexibleChildHorizontalLayoutLockChildHeight 
> -      *  is a subclass of OneFlexibleChildHorizontalLayout
> -      *  that sets the flexible child's height to be the height
> -      *  of the host container.  This is useful when you
> -      *  don't want the actual child's height to dictate the
> -      *  height of the container in order to force
> -      *  scrollbars
> -     *
> -     *  @langversion 3.0
> -     *  @playerversion Flash 10.2
> -     *  @playerversion AIR 2.6
> -     *  @productversion FlexJS 0.0
> -     */
> -     public class OneFlexibleChildHorizontalLayoutLockChildHeight extends 
> OneFlexibleChildHorizontalLayout
> -     {
> -        /**
> -         *  Constructor.
> -         *
> -         *  @langversion 3.0
> -         *  @playerversion Flash 10.2
> -         *  @playerversion AIR 2.6
> -         *  @productversion FlexJS 0.0
> -         */
> -             public function 
> OneFlexibleChildHorizontalLayoutLockChildHeight()
> -             {
> -                     super();
> -             }
> -
> -        /**
> -         * @copy org.apache.flex.core.IBeadLayout#layout
> -         */
> -             override public function layout():Boolean
> -             {
> -                     var ret:Boolean = super.layout();
> -                     if (ret)
> -                     {
> -                             var contentView:ILayoutView = layoutView;
> -     
> -                             var n:int = contentView.numElements;
> -
> -                             var h:Number = host.height;
> -                             for(var i:int=0; i < n; i++) {
> -                                     var child:UIBase = 
> contentView.getElementAt(i) as UIBase;
> -                                     if (child != actualChild)
> -                                             h = child.height;
> -                             }
> -                             actualChild.setHeight(h); 
> -                     }
> -                     return ret;
> -             }
> -
> -    }
> -
> -}
> 
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/bdd34d2e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutForOverflow.as
> ----------------------------------------------------------------------
> diff --git 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutForOverflow.as
>  
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutForOverflow.as
> new file mode 100644
> index 0000000..5679f80
> --- /dev/null
> +++ 
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutForOverflow.as
> @@ -0,0 +1,291 @@
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +//  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.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;
> +     import org.apache.flex.core.ILayoutView;
> +     import org.apache.flex.core.ILayoutParent;
> +     import org.apache.flex.core.IParentIUIBase;
> +     import org.apache.flex.core.IStrand;
> +     import org.apache.flex.core.IStyleableObject;
> +     import org.apache.flex.core.IUIBase;
> +     import org.apache.flex.core.ValuesManager;
> +     import org.apache.flex.core.UIBase;
> +     import org.apache.flex.events.Event;
> +     import org.apache.flex.geom.Rectangle;
> +     import org.apache.flex.utils.CSSContainerUtils;
> +     import org.apache.flex.utils.CSSUtils;
> +
> +    /**
> +     *  The OneFlexibleChildVerticalLayoutForOverflow is 
> +      *  intended for building apps that clip
> +      *  and/or scroll the overflow, especially in a 
> +      *  3-pane view like the ASDoc examples.  It does not use
> +      *  FlexBox because FlexBox wants to grow to the size
> +      *  of the content without specifying width/height on
> +      *  the flexible child.  But then the children in
> +      *  the flexible child cannot use % sizing.
> +      *  This layout presumes the parent is a known size.
> +     *
> +     *  @langversion 3.0
> +     *  @playerversion Flash 10.2
> +     *  @playerversion AIR 2.6
> +     *  @productversion FlexJS 0.0
> +     */
> +     public class OneFlexibleChildVerticalLayoutForOverflow extends 
> LayoutBase implements IOneFlexibleChildLayout, IDocument
> +     {
> +        /**
> +         *  Constructor.
> +         *
> +         *  @langversion 3.0
> +         *  @playerversion Flash 10.2
> +         *  @playerversion AIR 2.6
> +         *  @productversion FlexJS 0.0
> +         */
> +             public function OneFlexibleChildVerticalLayoutForOverflow()
> +             {
> +                     super();
> +             }
> +
> +        private var _flexibleChild:String;
> +
> +        protected var actualChild:ILayoutChild;
> +
> +        /**
> +         *  @private
> +         *  The document.
> +         */
> +        private var document:Object;
> +
> +             /**
> +              *  The id of the flexible child
> +              *
> +              *  @langversion 3.0
> +              *  @playerversion Flash 10.2
> +              *  @playerversion AIR 2.6
> +              *  @productversion FlexJS 0.0
> +              */
> +             public function get flexibleChild():String
> +             {
> +                     return _flexibleChild;
> +             }
> +
> +             /**
> +              * @private
> +              */
> +             public function set flexibleChild(value:String):void
> +             {
> +                     _flexibleChild = value;
> +             }
> +
> +        /**
> +         * @copy org.apache.flex.core.IBeadLayout#layout
> +         */
> +             COMPILE::JS
> +             override public function layout():Boolean
> +             {
> +                     var contentView:ILayoutView = layoutView;
> +
> +                     actualChild = document[flexibleChild];
> +
> +                     var n:int = contentView.numElements;
> +                     if (n == 0) return false;
> +
> +                     for(var i:int=0; i < n; i++) {
> +                             var child:UIBase = contentView.getElementAt(i) 
> as UIBase;
> +                             if (child.element.style["display"] != "flex" && 
> child.element.style["display"] != "none")
> +                                     child.element.style["display"] = 
> "block";
> +                     }
> +
> +                     var h:Number = host.height;
> +                     for(i=0; i < n; i++) {
> +                             child = contentView.getElementAt(i) as UIBase;
> +                             if (child != actualChild)
> +                                     h -= child.height;
> +                     }
> +                     actualChild.height = h;
> +                                     
> +                     return true;
> +             }
> +
> +             COMPILE::SWF
> +             override public function layout():Boolean
> +             {
> +                     var contentView:ILayoutView = layoutView;
> +                     actualChild = document.hasOwnProperty(flexibleChild) ? 
> document[flexibleChild] : null;
> +
> +                     var n:Number = contentView.numElements;
> +                     if (n == 0) return false;
> +                     
> +                     var maxWidth:Number = 0;
> +                     var maxHeight:Number = 0;
> +                     var hostSizedToContent:Boolean = 
> host.isWidthSizedToContent();
> +                     var hostWidth:Number = host.width;
> +                     var hostHeight:Number = host.height;
> +
> +                     var ilc:ILayoutChild;
> +                     var data:Object;
> +                     var canAdjust:Boolean = false;
> +                     var margins:Object;
> +
> +                     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 = borderMetrics.left + 
> paddingMetrics.left;
> +                     var ypos:Number = borderMetrics.top + 
> paddingMetrics.left;
> +                     var child:IUIBase;
> +                     var childWidth:Number;
> +                     var i:int;
> +                     var childXpos:Number;
> +                     var adjustTop:Number = 0;
> +                     var adjustBottom:Number = hostHeight + 
> borderMetrics.top + paddingMetrics.top;
> +
> +                     // first work from top to bottom
> +                     for(i=0; i < n; i++)
> +                     {
> +                             child = contentView.getElementAt(i) as IUIBase;
> +                             if (child == null || !child.visible) continue;
> +                             if (child == actualChild) break;
> +
> +                             margins = childMargins(child, hostWidth, 
> hostHeight);
> +                             ilc = child as ILayoutChild;
> +
> +                             ypos += margins.top;
> +
> +                             childXpos = xpos + margins.left; // default x 
> position
> +
> +                             childWidth = child.width;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentWidth)) {
> +                                             childWidth = hostWidth * 
> ilc.percentWidth/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitWidth)) {
> +                                             childWidth = hostWidth;
> +                                     }
> +                                     ilc.setWidth(childWidth);
> +                             }
> +
> +                             if (ilc) {
> +                                     ilc.setX(childXpos);
> +                                     ilc.setY(ypos);
> +
> +                                     if (!isNaN(ilc.percentHeight)) {
> +                                             ilc.setHeight(hostHeight * 
> ilc.percentHeight / 100);
> +                                     }
> +
> +                             } else {
> +                                     child.x = childXpos;
> +                                     child.y = ypos;
> +                             }
> +
> +                             ypos += child.height + margins.bottom;
> +                             adjustTop = ypos;
> +                     }
> +
> +                     // then work from bottom to top
> +                     ypos = hostHeight + borderMetrics.top + 
> paddingMetrics.top;
> +
> +                     for(i=(n-1); actualChild != null && i >= 0; i--)
> +                     {
> +                             child = contentView.getElementAt(i) as IUIBase;
> +                             if (child == null || !child.visible) continue;
> +                             if (child == actualChild) break;
> +
> +                             margins = childMargins(child, hostWidth, 
> hostHeight);
> +                             ilc = child as ILayoutChild;
> +
> +                             childXpos = xpos + margins.left; // default x 
> position
> +
> +                             childWidth = child.width;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentWidth)) {
> +                                             childWidth = hostWidth * 
> ilc.percentWidth/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitWidth)) {
> +                                             childWidth = hostWidth;
> +                                     }
> +                                     ilc.setWidth(childWidth);
> +                             }
> +
> +                             if (ilc) {
> +                                     if (!isNaN(ilc.percentHeight)) {
> +                                             ilc.setHeight(hostHeight * 
> ilc.percentHeight / 100);
> +                                     }
> +                             }
> +
> +                             ypos -= child.height + margins.bottom;
> +
> +                             if (ilc) {
> +                                     ilc.setX(childXpos);
> +                                     ilc.setY(ypos);
> +                             } else {
> +                                     child.x = childXpos;
> +                                     child.y = ypos;
> +                             }
> +
> +                             ypos -= margins.top;
> +                             adjustBottom = ypos;
> +                     }
> +
> +                     // now adjust the actualChild to fill the space.
> +                     if (actualChild != null) {
> +                             margins = childMargins(actualChild, hostWidth, 
> hostHeight);
> +                             ilc = actualChild as ILayoutChild;
> +                             childWidth = actualChild.width;
> +                             if (ilc != null)
> +                             {
> +                                     if (!isNaN(ilc.percentWidth)) {
> +                                             childWidth = hostWidth * 
> ilc.percentWidth/100.0;
> +                                     }
> +                                     else if (isNaN(ilc.explicitWidth)) {
> +                                             childWidth = hostWidth;
> +                                     }
> +                                     ilc.setWidth(childWidth);
> +                             }
> +                             childXpos = xpos + margins.left;
> +                                     
> +                             actualChild.x = childXpos
> +                             actualChild.y = adjustTop + margins.top;
> +                             if (ilc) {
> +                                     
> ilc.setHeight((adjustBottom-margins.bottom) - (adjustTop+margins.top));
> +                             } else {
> +                                     actualChild.height = 
> (adjustBottom-margins.bottom) - (adjustTop+margins.top);
> +                             }
> +                     }
> +
> +                     return true;
> +             }
> +
> +        public function setDocument(document:Object, id:String = null):void
> +        {
> +            this.document = document;
> +        }
> +    }
> +
> +}
> 
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/bdd34d2e/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutLockChildWidth.as
> ----------------------------------------------------------------------
> diff --git 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutLockChildWidth.as
>  
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutLockChildWidth.as
> deleted file mode 100644
> index 7415299..0000000
> --- 
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayoutLockChildWidth.as
> +++ /dev/null
> @@ -1,93 +0,0 @@
> -////////////////////////////////////////////////////////////////////////////////
> -//
> -//  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.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;
> -     import org.apache.flex.core.ILayoutView;
> -     import org.apache.flex.core.ILayoutParent;
> -     import org.apache.flex.core.IParentIUIBase;
> -     import org.apache.flex.core.IStrand;
> -     import org.apache.flex.core.IStyleableObject;
> -     import org.apache.flex.core.IUIBase;
> -     import org.apache.flex.core.ValuesManager;
> -     import org.apache.flex.core.UIBase;
> -     import org.apache.flex.events.Event;
> -     import org.apache.flex.geom.Rectangle;
> -     import org.apache.flex.utils.CSSContainerUtils;
> -     import org.apache.flex.utils.CSSUtils;
> -
> -    /**
> -     *  The OneFlexibleChildHorizontalLayoutLockChildHeight 
> -      *  is a subclass of OneFlexibleChildHorizontalLayout
> -      *  that sets the flexible child's height to be the height
> -      *  of the host container.  This is useful when you
> -      *  don't want the actual child's height to dictate the
> -      *  height of the container in order to force
> -      *  scrollbars or line wrapping.
> -     *
> -     *  @langversion 3.0
> -     *  @playerversion Flash 10.2
> -     *  @playerversion AIR 2.6
> -     *  @productversion FlexJS 0.0
> -     */
> -     public class OneFlexibleChildVerticalLayoutLockChildWidth extends 
> OneFlexibleChildVerticalLayout
> -     {
> -        /**
> -         *  Constructor.
> -         *
> -         *  @langversion 3.0
> -         *  @playerversion Flash 10.2
> -         *  @playerversion AIR 2.6
> -         *  @productversion FlexJS 0.0
> -         */
> -             public function OneFlexibleChildVerticalLayoutLockChildWidth()
> -             {
> -                     super();
> -             }
> -
> -        /**
> -         * @copy org.apache.flex.core.IBeadLayout#layout
> -         */
> -             override public function layout():Boolean
> -             {
> -                     var ret:Boolean = super.layout();
> -                     if (ret)
> -                     {
> -                             var contentView:ILayoutView = layoutView;
> -     
> -                             var n:int = contentView.numElements;
> -
> -                             var w:Number = host.width;
> -                             for(var i:int=0; i < n; i++) {
> -                                     var child:UIBase = 
> contentView.getElementAt(i) as UIBase;
> -                                     if (child != actualChild)
> -                                             w = child.width;
> -                             }
> -                             
> -                             actualChild.setWidth(w); 
> -                     }
> -                     return ret;
> -             }
> -
> -    }
> -
> -}
> 
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/bdd34d2e/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
> ----------------------------------------------------------------------
> diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
> b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
> index 7cbc05d..09bb1a3 100644
> --- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
> +++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
> @@ -150,8 +150,8 @@
>     <component id="FlexibleFirstChildHorizontalLayout" 
> class="org.apache.flex.html.beads.layouts.FlexibleFirstChildHorizontalLayout"/>
>     <component id="OneFlexibleChildVerticalLayout" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayout"/>
>     <component id="OneFlexibleChildHorizontalLayout" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayout"/>
> -    <component id="OneFlexibleChildVerticalLayoutLockChildWidth" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutLockChildWidth"/>
> -    <component id="OneFlexibleChildHorizontalLayoutLockChildHeight" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayoutLockChildHeight"/>
> +    <component id="OneFlexibleChildVerticalLayoutForOverflow" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutForOverflow"/>
> +    <component id="OneFlexibleChildHorizontalLayoutForOverflow" 
> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayoutForOverflow"/>
>     <component id="MXMLBeadView" class="org.apache.flex.html.MXMLBeadView"/>
> 
>     <component id="SubAppLoader" class="org.apache.flex.html.SubAppLoader" />
> 

Reply via email to