flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com.INVALID>
Subject Re: [07/13] git commit: [flex-asjs] [refs/heads/release0.8.0] - 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 wi...
Date Mon, 31 Jul 2017 04:35:53 GMT
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.lists@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, aharui@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 <aharui@apache.org>
>> Authored: Mon May 22 10:12:02 2017 -0700
>> Committer: Alex Harui <aharui@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" />
>> 
>

Mime
View raw message