The only example I found was the ASDoc app. I switched it and it appears to work. (I pushed my changes.)
> On Jul 31, 2017, at 7:35 AM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > It will either work in the examples that use it or it won't. Try it and > find out. > > -Alex > > On 7/30/17, 3:04 AM, "Harbs" <harbs.li...@gmail.com> wrote: > >> 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://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodepen.i >> o%2Fjpdevries%2Fpen%2FoXxPOP&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4d73 >> 2638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&sdat >> a=tSTNYANFFiQ4DMGYbAZaz0dJ9qYDYpcwP2ZoSYRIcG8%3D&reserved=0 >> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcodepen. >> io%2Fjpdevries%2Fpen%2FoXxPOP&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4d7 >> 32638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511&sda >> ta=tSTNYANFFiQ4DMGYbAZaz0dJ9qYDYpcwP2ZoSYRIcG8%3D&reserved=0> >> >> 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: >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Frepo&data=02%7C01%7C%7C699bbb170 >>> b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6363 >>> 70058818766511&sdata=P%2FMkfZAwCYwpQEoCe5UGx8tW0mZaIZsMdDg6VxlaKWA%3D&res >>> erved=0 >>> Commit: >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fcommit%2Fbdd34d2e&data=02%7C01%7 >>> C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7 >>> C0%7C0%7C636370058818766511&sdata=QosBAau8lE4nCS7c%2F8B6GDc%2Bqa%2BpSkoP5 >>> 5x3oji5FnI%3D&reserved=0 >>> Tree: >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Ftree%2Fbdd34d2e&data=02%7C01%7C% >>> 7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0 >>> %7C0%7C636370058818766511&sdata=T4CCqwtn%2FgFTmAnaI%2BuCXqtX0P75ebpKVZOxf >>> XOTbIE%3D&reserved=0 >>> Diff: >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fdiff%2Fbdd34d2e&data=02%7C01%7C% >>> 7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0 >>> %7C0%7C636370058818766511&sdata=f8WVJXc81KrLMuUgRckULYCfglNL7d%2BfdjSbBBU >>> 0fRo%3D&reserved=0 >>> >>> 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(-) >>> ---------------------------------------------------------------------- >>> >>> >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp >>> rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads% >>> 2Flayouts%2FOneFlexibleChildHorizontalLayoutForOverflow.as&data=02%7C01%7 >>> C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7 >>> C0%7C0%7C636370058818766511&sdata=L7BjG%2BM7nTwguX%2BNaE5Op6BIT7XZrEqKFop >>> 0D%2Frc0Aw%3D&reserved=0 >>> ---------------------------------------------------------------------- >>> diff --git >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildHorizontalLayoutForOverflow.as >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildHorizontalLayoutForOverflow.as >>> new file mode 100644 >>> index 0000000..c6abc22 >>> --- /dev/null >>> +++ >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/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 >>> +// >>> +// >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach >>> e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4 >>> d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511& >>> sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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; >>> + } >>> + >>> + } >>> + >>> +} >>> >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp >>> rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads% >>> 2Flayouts%2FOneFlexibleChildHorizontalLayoutLockChildHeight.as&data=02%7C >>> 01%7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178dece >>> e1%7C0%7C0%7C636370058818766511&sdata=Ir1Siye21IUzzijpvWA1XmQN0AbHktLu%2F >>> u3h%2BRtBZT0%3D&reserved=0 >>> ---------------------------------------------------------------------- >>> diff --git >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildHorizontalLayoutLockChildHeight.as >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildHorizontalLayoutLockChildHeight.as >>> deleted file mode 100644 >>> index d170d23..0000000 >>> --- >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/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 >>> -// >>> -// >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach >>> e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4 >>> d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511& >>> sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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; >>> - } >>> - >>> - } >>> - >>> -} >>> >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp >>> rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads% >>> 2Flayouts%2FOneFlexibleChildVerticalLayoutForOverflow.as&data=02%7C01%7C% >>> 7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0 >>> %7C0%7C636370058818766511&sdata=WdJnx6IGbPwIxUibKB3UqfKTHgHugWIleqBVsqJ5f >>> eE%3D&reserved=0 >>> ---------------------------------------------------------------------- >>> diff --git >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildVerticalLayoutForOverflow.as >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildVerticalLayoutForOverflow.as >>> new file mode 100644 >>> index 0000000..5679f80 >>> --- /dev/null >>> +++ >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/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 >>> +// >>> +// >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach >>> e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4 >>> d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511& >>> sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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; >>> + } >>> + } >>> + >>> +} >>> >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp >>> rojects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fhtml%2Fbeads% >>> 2Flayouts%2FOneFlexibleChildVerticalLayoutLockChildWidth.as&data=02%7C01% >>> 7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee1% >>> 7C0%7C0%7C636370058818766511&sdata=4Q4bkts0dp4wvvLUtu2yTYNg%2Fr7jS8bRt4co >>> 3nYbPKc%3D&reserved=0 >>> ---------------------------------------------------------------------- >>> diff --git >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildVerticalLayoutLockChildWidth.as >>> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/OneFlexibleChildVerticalLayoutLockChildWidth.as >>> deleted file mode 100644 >>> index 7415299..0000000 >>> --- >>> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layo >>> uts/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 >>> -// >>> -// >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apach >>> e.org%2Flicenses%2FLICENSE-2.0&data=02%7C01%7C%7C699bbb170b2c4f0bf3ae08d4 >>> d732638a%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636370058818766511& >>> sdata=bButr5xXaczhl741iZvjXub0l1B72d%2FvImajqD7mvyA%3D&reserved=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; >>> - } >>> - >>> - } >>> - >>> -} >>> >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-u >>> s.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2Fbdd34d2e%2Fframeworks%2Fp >>> rojects%2FBasic%2Fsrc%2Fmain%2Fresources%2Fbasic-manifest.xml&data=02%7C0 >>> 1%7C%7C699bbb170b2c4f0bf3ae08d4d732638a%7Cfa7b1b5a7b34438794aed2c178decee >>> 1%7C0%7C0%7C636370058818766511&sdata=mPldYCuDfp%2BxQ4QROdu4BWSl3Dh7HP19VX >>> BR3B3IXOg%3D&reserved=0 >>> ---------------------------------------------------------------------- >>> 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.FlexibleFirstChildHorizontalLay >>> out"/> >>> <component id="OneFlexibleChildVerticalLayout" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayout" >>> /> >>> <component id="OneFlexibleChildHorizontalLayout" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou >>> t"/> >>> - <component id="OneFlexibleChildVerticalLayoutLockChildWidth" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutL >>> ockChildWidth"/> >>> - <component id="OneFlexibleChildHorizontalLayoutLockChildHeight" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou >>> tLockChildHeight"/> >>> + <component id="OneFlexibleChildVerticalLayoutForOverflow" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildVerticalLayoutF >>> orOverflow"/> >>> + <component id="OneFlexibleChildHorizontalLayoutForOverflow" >>> class="org.apache.flex.html.beads.layouts.OneFlexibleChildHorizontalLayou >>> tForOverflow"/> >>> <component id="MXMLBeadView" >>> class="org.apache.flex.html.MXMLBeadView"/> >>> >>> <component id="SubAppLoader" >>> class="org.apache.flex.html.SubAppLoader" /> >>> >> >