You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/09/03 15:02:43 UTC
[2/4] git commit: [flex-asjs] [refs/heads/develop] - next incarnation
of layout. Padding is now the responsibility of the layouts (layouts still
need upgrading to handle padding correctly). ViewportModel is only used by
ContainerViews and not layouts.
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
index 2d6eae7..fbd22ac 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
@@ -21,19 +21,21 @@ package org.apache.flex.html.beads
import flash.display.Sprite;
import org.apache.flex.core.IBeadView;
+ import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IUIBase;
import org.apache.flex.core.IViewportModel;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.UIMetrics;
- import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
+ import org.apache.flex.geom.Size;
import org.apache.flex.html.Container;
import org.apache.flex.html.Panel;
import org.apache.flex.html.TitleBar;
- import org.apache.flex.utils.BeadMetrics;
- import org.apache.flex.utils.CSSUtils;
+ import org.apache.flex.utils.CSSContainerUtils;
+ import org.apache.flex.utils.CSSUtils;
/**
* The Panel class creates the visual elements of the org.apache.flex.html.Panel
@@ -115,74 +117,53 @@ package org.apache.flex.html.beads
super.completeSetup();
}
- override protected function adjustSizeBeforeLayout():void
+ /**
+ * Calculate the space taken up by non-content children like a TItleBar in a Panel.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override protected function getChromeMetrics():Rectangle
{
- var metrics:UIMetrics = BeadMetrics.getMetrics(host);
-
- viewportModel.contentWidth = Math.max(host.width - metrics.left - metrics.right, 0);
- viewportModel.contentHeight = Math.max(host.height - titleBar.height - metrics.top - metrics.bottom, 0);
- viewportModel.contentX = metrics.left;
- viewportModel.contentY = metrics.top;
-
- contentView.x = viewportModel.contentX;
- contentView.y = viewportModel.contentY;
- contentView.width = viewportModel.contentWidth;
- contentView.height = viewportModel.contentHeight;
+ return new Rectangle(0, titleBar.height, 0, 0);
+ }
+
+ override protected function layoutViewBeforeContentLayout():void
+ {
+ var vm:IViewportModel = viewportModel;
+ var host:ILayoutChild = this.host as ILayoutChild;
+ vm.borderMetrics = CSSContainerUtils.getBorderMetrics(host);
+ titleBar.x = vm.borderMetrics.left;
+ titleBar.y = vm.borderMetrics.top;
+ if (!host.isWidthSizedToContent())
+ titleBar.width = host.width - vm.borderMetrics.left - vm.borderMetrics.right;
+ vm.chromeMetrics = getChromeMetrics();
+ viewport.setPosition(vm.borderMetrics.left + vm.chromeMetrics.left,
+ vm.borderMetrics.top + vm.chromeMetrics.top);
+ viewport.layoutViewportBeforeContentLayout(
+ !host.isWidthSizedToContent() ?
+ host.width - vm.borderMetrics.left - vm.borderMetrics.right -
+ vm.chromeMetrics.left - vm.chromeMetrics.right : NaN,
+ !host.isHeightSizedToContent() ?
+ host.height - vm.borderMetrics.top - vm.borderMetrics.bottom -
+ vm.chromeMetrics.top - vm.chromeMetrics.bottom : NaN);
}
- override protected function layoutContainer(widthSizedToContent:Boolean, heightSizedToContent:Boolean):void
+ override protected function layoutViewAfterContentLayout():void
{
- var borderThickness:Object = ValuesManager.valuesImpl.getValue(host,"border-width");
- var borderStyle:Object = ValuesManager.valuesImpl.getValue(host,"border-style");
- var border:Object = ValuesManager.valuesImpl.getValue(host,"border");
- var borderOffset:Number;
- if (borderStyle == "none")
- borderOffset = 0;
- else if (borderThickness != null)
- {
- if (borderThickness is String)
- borderOffset = CSSUtils.toNumber(borderThickness as String, host.width);
- else
- borderOffset = Number(borderThickness);
- if( isNaN(borderOffset) ) borderOffset = 0;
- }
- else // no style and/or no width
- {
- border = ValuesManager.valuesImpl.getValue(host,"border");
- if (border != null)
- {
- if (border is Array)
- {
- borderOffset = CSSUtils.toNumber(border[0], host.width);
- borderStyle = border[1];
- }
- else if (border == "none")
- borderOffset = 0;
- else if (border is String)
- borderOffset = CSSUtils.toNumber(border as String, host.width);
- else
- borderOffset = Number(border);
- }
- else // no border style set at all so default to none
- borderOffset = 0;
- }
-
- titleBar.x = borderOffset;
- titleBar.y = borderOffset;
- titleBar.width = host.width - 2 * borderOffset;
- titleBar.dispatchEvent( new Event("layoutNeeded") ); // this shouldn't be needed
-
- if (heightSizedToContent) {
- host.height = viewportModel.contentHeight + titleBar.height + 2 * borderOffset;
- }
- if (widthSizedToContent) {
- host.width = viewportModel + 2 * borderOffset;
+ var vm:IViewportModel = viewportModel;
+ var viewportSize:Size = this.viewport.layoutViewportAfterContentLayout();
+ var host:ILayoutChild = this.host as ILayoutChild;
+ var hasWidth:Boolean = !host.isWidthSizedToContent();
+ var hasHeight:Boolean = !host.isHeightSizedToContent();
+ if (!hasWidth) {
+ titleBar.width = viewportSize.width; // should get titlebar to layout and get new height
+ vm.chromeMetrics = this.getChromeMetrics();
+ vm.chromeMetrics.top = titleBar.height;
}
-
- viewportModel.viewportHeight = host.height - titleBar.height - 2 * borderOffset;
- viewportModel.viewportWidth = host.width - 2 * borderOffset;
- viewportModel.viewportX = borderOffset;
- viewportModel.viewportY = titleBar.height + borderOffset;
+ super.layoutViewAfterContentLayout();
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
index 0731cee..c0c7c02 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelWithControlBarView.as
@@ -21,19 +21,21 @@ package org.apache.flex.html.beads
import flash.display.Sprite;
import org.apache.flex.core.IBeadView;
- import org.apache.flex.core.IPanelModel;
- import org.apache.flex.core.ITitleBarModel;
+ import org.apache.flex.core.ILayoutChild;
+ import org.apache.flex.core.IPanelModel;
import org.apache.flex.core.IStrand;
+ import org.apache.flex.core.ITitleBarModel;
import org.apache.flex.core.IUIBase;
import org.apache.flex.core.IViewportModel;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
+ import org.apache.flex.geom.Size;
import org.apache.flex.html.Container;
import org.apache.flex.html.ControlBar;
import org.apache.flex.html.TitleBar;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The Panel class creates the visual elements of the org.apache.flex.html.Panel
@@ -138,30 +140,67 @@ package org.apache.flex.html.beads
}
}
- override protected function layoutContainer(widthSizedToContent:Boolean, heightSizedToContent:Boolean):void
- {
- var adjustHeight:Number = titleBar.height;
-
- titleBar.x = 0;
- titleBar.y = 0;
- titleBar.width = host.width;
- titleBar.dispatchEvent( new Event("layoutNeeded") );
-
- if (controlBar) {
- controlBar.width = host.width;
- controlBar.dispatchEvent( new Event("layoutNeeded") );
- controlBar.y = host.height - controlBar.height;
- adjustHeight += controlBar.height;
- }
-
- if (heightSizedToContent) {
- host.height = host.height + adjustHeight;
- }
-
- viewportModel.viewportHeight = host.height - adjustHeight;
- viewportModel.viewportWidth = host.width;
- viewportModel.viewportX = 0;
- viewportModel.viewportY = titleBar.height;
- }
+ /**
+ * Calculate the space taken up by non-content children like a TItleBar in a Panel.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override protected function getChromeMetrics():Rectangle
+ {
+ return new Rectangle(0, titleBar.height, 0, titleBar.height + controlBar.height);
+ }
+
+ override protected function layoutViewBeforeContentLayout():void
+ {
+ var vm:IViewportModel = viewportModel;
+ var host:ILayoutChild = this.host as ILayoutChild;
+ var hasHeight:Boolean = !host.isHeightSizedToContent();
+ var hasWidth:Boolean = !host.isWidthSizedToContent();
+ vm.borderMetrics = CSSContainerUtils.getBorderMetrics(host);
+ titleBar.x = vm.borderMetrics.left;
+ titleBar.y = vm.borderMetrics.top;
+ if (hasWidth)
+ {
+ titleBar.width = host.width - vm.borderMetrics.left - vm.borderMetrics.right;
+ controlBar.width = host.width - vm.borderMetrics.left - vm.borderMetrics.right;
+ }
+ vm.chromeMetrics = getChromeMetrics();
+ controlBar.x = vm.borderMetrics.left;
+ if (hasHeight && hasWidth)
+ controlBar.y = host.height - vm.borderMetrics.bottom - controlBar.height;
+
+ viewport.setPosition(vm.borderMetrics.left + vm.chromeMetrics.left,
+ vm.borderMetrics.top + vm.chromeMetrics.top);
+ viewport.layoutViewportBeforeContentLayout(
+ hasWidth ?
+ host.width - vm.borderMetrics.left - vm.borderMetrics.right -
+ vm.chromeMetrics.left - vm.chromeMetrics.right : NaN,
+ hasHeight ?
+ host.height - vm.borderMetrics.top - vm.borderMetrics.bottom -
+ vm.chromeMetrics.top - vm.chromeMetrics.bottom : NaN);
+ }
+
+ override protected function layoutViewAfterContentLayout():void
+ {
+ var vm:IViewportModel = viewportModel;
+ var viewportSize:Size = this.viewport.layoutViewportAfterContentLayout();
+ var host:ILayoutChild = this.host as ILayoutChild;
+ var hasWidth:Boolean = !host.isWidthSizedToContent();
+ var hasHeight:Boolean = !host.isHeightSizedToContent();
+ if (!hasWidth) {
+ titleBar.width = viewportSize.width; // should get titlebar to layout and get new height
+ vm.chromeMetrics = this.getChromeMetrics();
+ vm.chromeMetrics.top = titleBar.height;
+ controlBar.width = viewportSize.width; // should get controlbar to layout and get new height
+ vm.chromeMetrics.bottom = controlBar.height;
+ }
+ super.layoutViewAfterContentLayout();
+ if (!hasHeight) {
+ controlBar.y = host.height - vm.borderMetrics.bottom - controlBar.height;
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SimpleAlertView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SimpleAlertView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SimpleAlertView.as
index 019023b..949f9c9 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SimpleAlertView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SimpleAlertView.as
@@ -26,13 +26,13 @@ package org.apache.flex.html.beads
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IParent;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.Label;
import org.apache.flex.html.TextButton;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The SimpleAlertView class creates the visual elements of the
@@ -124,7 +124,7 @@ package org.apache.flex.html.beads
}
var maxWidth:Number = Math.max(UIBase(_strand).width,ruler.measuredWidth);
- var metrics:UIMetrics = BeadMetrics.getMetrics(_strand);
+ var metrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(_strand);
messageLabel.x = metrics.left;
messageLabel.y = metrics.top;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputView.as
index 7c3ee2f..a6f1438 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputView.as
@@ -22,10 +22,10 @@ package org.apache.flex.html.beads
import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.IStrand;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.geom.Rectangle;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The TextInputView class is the view for
@@ -72,11 +72,11 @@ package org.apache.flex.html.beads
var w:Number;
var h:Number;
- var uiMetrics:UIMetrics;
+ var uiMetrics:Rectangle;
var ilc:ILayoutChild = host as ILayoutChild;
if (ilc.isWidthSizedToContent())
{
- uiMetrics = BeadMetrics.getMetrics(host);
+ uiMetrics = CSSContainerUtils.getBorderAndPaddingMetrics(host);
// use default width of 20
var s:String = textField.text;
textField.text = "0";
@@ -88,7 +88,7 @@ package org.apache.flex.html.beads
if (ilc.isHeightSizedToContent())
{
if (!uiMetrics)
- uiMetrics = BeadMetrics.getMetrics(host);
+ uiMetrics = CSSContainerUtils.getBorderAndPaddingMetrics(host);
if (isNaN(h))
{
s = textField.text;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputWithBorderView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputWithBorderView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputWithBorderView.as
index 2c7bf21..fbab13e 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputWithBorderView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/TextInputWithBorderView.as
@@ -26,11 +26,11 @@ package org.apache.flex.html.beads
import org.apache.flex.core.IParent;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.ValuesManager;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.supportClasses.Border;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The TextInputWithBorderView class is the default view for
@@ -77,7 +77,7 @@ package org.apache.flex.html.beads
{
textField.autoSize = "none";
autoWidth = false;
- var uiMetrics:UIMetrics = BeadMetrics.getMetrics(host);
+ var uiMetrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(host);
textField.width = host.width - uiMetrics.left - uiMetrics.right;
textField.x = uiMetrics.left;
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
index 4cbd567..f7bf57d 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
@@ -22,7 +22,7 @@ package org.apache.flex.html.beads.layouts
import org.apache.flex.core.IItemRendererClassFactory;
import org.apache.flex.core.IItemRendererParent;
import org.apache.flex.core.ILayoutParent;
- import org.apache.flex.core.IParent;
+ import org.apache.flex.core.IParentIUIBase;
import org.apache.flex.core.ISelectableItemRenderer;
import org.apache.flex.core.ISelectionModel;
import org.apache.flex.core.IStrand;
@@ -101,7 +101,7 @@ package org.apache.flex.html.beads.layouts
public function layout():Boolean
{
var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
- var contentView:IParent = layoutParent.contentView;
+ var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase;
var itemRendererParent:IItemRendererParent = contentView as IItemRendererParent;
var viewportModel:IViewportModel = (layoutParent as ButtonBarView).viewportModel;
@@ -115,8 +115,8 @@ package org.apache.flex.html.beads.layouts
}
var xpos:Number = 0;
- var useWidth:Number = viewportModel.contentWidth / realN;
- var useHeight:Number = viewportModel.contentHeight;
+ var useWidth:Number = contentView.width / realN;
+ var useHeight:Number = contentView.height;
for (var i:int=0; i < n; i++)
{
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HScrollBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HScrollBarLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HScrollBarLayout.as
index 751c5a8..38b97ec 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HScrollBarLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HScrollBarLayout.as
@@ -23,11 +23,11 @@ package org.apache.flex.html.beads.layouts
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IScrollBarModel;
import org.apache.flex.core.IStrand;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.beads.IScrollBarView;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The HScrollBarLayout class is a layout
@@ -81,7 +81,7 @@ package org.apache.flex.html.beads.layouts
if (!sbModel)
sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel
- var metrics:UIMetrics = BeadMetrics.getMetrics(_strand);
+ var metrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(_strand);
var w:Number = DisplayObject(_strand).width + metrics.left + metrics.right;
var increment:DisplayObject = sbView.increment;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
index 00c53b3..612519a 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
@@ -23,12 +23,12 @@ package org.apache.flex.html.beads.layouts
import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IScrollBarModel;
import org.apache.flex.core.IStrand;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.beads.IScrollBarView;
import org.apache.flex.html.beads.ScrollBarView;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The VScrollBarLayout class is a layout
@@ -82,7 +82,7 @@ package org.apache.flex.html.beads.layouts
if (!sbModel)
sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel
- var metrics:UIMetrics = BeadMetrics.getMetrics(_strand);
+ var metrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(_strand);
var h:Number = DisplayObject(_strand).height + metrics.top + metrics.bottom;
var increment:DisplayObject = sbView.increment;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/models/ViewportModel.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/models/ViewportModel.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/models/ViewportModel.as
index 5fa88a4..c15c5d8 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/models/ViewportModel.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/models/ViewportModel.as
@@ -23,7 +23,11 @@ package org.apache.flex.html.beads.models
import org.apache.flex.core.IViewportModel;
import org.apache.flex.events.Event;
import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.geom.Rectangle;
+ /**
+ * @copy org.apache.flex.core.IViewportModel
+ */
public class ViewportModel extends EventDispatcher implements IViewportModel
{
public function ViewportModel()
@@ -31,131 +35,35 @@ package org.apache.flex.html.beads.models
super();
}
- private var _contentIsHost:Boolean = false;
- private var _contentArea:IUIBase;
- private var _contentWidth:Number = 0;
- private var _contentHeight:Number = 0;
- private var _contentX:Number = 0;
- private var _contentY:Number = 0;
- private var _viewportWidth:Number = 0;
- private var _viewportHeight:Number = 0;
- private var _viewportX:Number = 0;
- private var _viewportY:Number = 0;
- private var _verticalScrollPosition:Number = 0;
- private var _horizontalScrollPosition:Number = 0;
-
- public function get contentArea():IUIBase
- {
- return _contentArea;
- }
- public function set contentArea(value:IUIBase):void
- {
- _contentArea = value;
- dispatchEvent( new Event("contentAreaChanged") );
- }
-
- public function get contentIsHost():Boolean
- {
- return _contentIsHost;
- }
- public function set contentIsHost(value:Boolean):void
- {
- _contentIsHost = value;
- }
-
- public function get viewportWidth():Number
- {
- return _viewportWidth;
- }
- public function set viewportWidth(value:Number):void
- {
- _viewportWidth = value;
- }
-
- public function get viewportHeight():Number
- {
- return _viewportHeight;
- }
- public function set viewportHeight(value:Number):void
- {
- _viewportHeight = value;
- }
-
- public function get viewportX():Number
- {
- return _viewportX;
- }
- public function set viewportX(value:Number):void
- {
- _viewportX = value;
- }
-
- public function get viewportY():Number
- {
- return _viewportY;
- }
- public function set viewportY(value:Number):void
- {
- _viewportY = value;
- }
-
- public function get contentWidth():Number
- {
- return _contentWidth;
- }
- public function set contentWidth(value:Number):void
- {
- _contentWidth = value;
- }
-
- public function get contentHeight():Number
- {
- return _contentHeight;
- }
- public function set contentHeight(value:Number):void
- {
- _contentHeight = value;
- }
-
- public function get contentX():Number
- {
- return _contentX;
- }
- public function set contentX(value:Number):void
- {
- _contentX = value;
- }
-
- public function get contentY():Number
- {
- return _contentY;
- }
- public function set contentY(value:Number):void
- {
- _contentY = value;
- }
-
- public function get verticalScrollPosition():Number
- {
- return _verticalScrollPosition;
- }
- public function set verticalScrollPosition(value:Number):void
- {
- _verticalScrollPosition = value;
- dispatchEvent( new Event("verticalScrollPositionChanged") );
- }
-
- public function get horizontalScrollPosition():Number
- {
- return _horizontalScrollPosition;
- }
- public function set horizontalScrollPosition(value:Number):void
- {
- _horizontalScrollPosition = value;
- }
+ private var _borderMetrics:Rectangle;
+ private var _chromeMetrics:Rectangle;
private var _strand:IStrand;
+ /**
+ * @copy org.apache.flex.core.IViewportModel
+ */
+ public function get borderMetrics():Rectangle
+ {
+ return _borderMetrics;
+ }
+ public function set borderMetrics(value:Rectangle):void
+ {
+ _borderMetrics = value;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IViewportModel
+ */
+ public function get chromeMetrics():Rectangle
+ {
+ return _chromeMetrics;
+ }
+ public function set chromeMetrics(value:Rectangle):void
+ {
+ _chromeMetrics = value;
+ }
+
public function set strand(value:IStrand):void
{
_strand = value;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
index b7a3832..8c8fb76 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/ScrollingViewport.as
@@ -21,6 +21,7 @@ package org.apache.flex.html.supportClasses
import flash.geom.Rectangle;
import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IParentIUIBase;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IUIBase;
@@ -28,44 +29,17 @@ package org.apache.flex.html.supportClasses
import org.apache.flex.core.IViewportModel;
import org.apache.flex.core.IViewportScroller;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.events.Event;
+ import org.apache.flex.geom.Size;
import org.apache.flex.html.beads.ScrollBarView;
import org.apache.flex.html.beads.models.ScrollBarModel;
- import org.apache.flex.utils.BeadMetrics;
- public class ScrollingViewport implements IBead, IViewport
+ public class ScrollingViewport extends Viewport implements IBead, IViewport
{
public function ScrollingViewport()
{
}
-
- private var contentArea:UIBase;
-
- private var _strand:IStrand;
-
- public function set strand(value:IStrand):void
- {
- _strand = value;
- }
-
- private var _model:IViewportModel;
-
- public function set model(value:IViewportModel):void
- {
- _model = value;
-
- if (model.contentArea) contentArea = model.contentArea as UIBase;
-
- model.addEventListener("contentAreaChanged", handleContentChange);
- model.addEventListener("verticalScrollPositionChanged", handleVerticalScrollChange);
- model.addEventListener("horizontalScrollPositionChanged", handleHorizontalScrollChange);
- }
- public function get model():IViewportModel
- {
- return _model;
- }
-
+
private var _verticalScroller:ScrollBar;
public function get verticalScroller():IViewportScroller
{
@@ -78,204 +52,151 @@ package org.apache.flex.html.supportClasses
return _horizontalScroller;
}
+ private var _verticalScrollPosition:Number = 0;
public function get verticalScrollPosition():Number
{
- return _model.verticalScrollPosition;
+ return _verticalScrollPosition;
}
public function set verticalScrollPosition(value:Number):void
{
- _model.verticalScrollPosition = value;
+ _verticalScrollPosition = value;
+ handleVerticalScrollChange();
}
+ private var _horizontalScrollPosition:Number = 0;
public function get horizontalScrollPosition():Number
{
- return _model.horizontalScrollPosition;
+ return _horizontalScrollPosition;
}
public function set horizontalScrollPosition(value:Number):void
{
- _model.horizontalScrollPosition = value;
+ _horizontalScrollPosition = value;
+ handleHorizontalScrollChange();
}
- /**
- * Invoke this function to reshape and set the contentArea being managed by
- * this viewport. If scrollers are present this will update them as well to
- * reflect the current location of the visible portion of the contentArea
- * within the viewport.
- */
- public function updateContentAreaSize():void
- {
- var host:UIBase = UIBase(_strand);
- var rect:Rectangle;
- var vbarAdjustHeightBy:Number = 0;
- var hbarAdjustWidthBy:Number = 0;
-
- if (_verticalScroller) {
- ScrollBarModel(_verticalScroller.model).maximum = model.contentHeight;
- _verticalScroller.x = model.viewportWidth - _verticalScroller.width + 1;
- _verticalScroller.y = model.viewportY;
-
- rect = contentArea.scrollRect;
- rect.y = ScrollBarModel(_verticalScroller.model).value;
- contentArea.scrollRect = rect;
-
- hbarAdjustWidthBy = _verticalScroller.width + 1;
- }
-
- if (_horizontalScroller) {
- ScrollBarModel(_horizontalScroller.model).maximum = model.contentWidth;
- _horizontalScroller.x = model.viewportX;
- _horizontalScroller.y = model.viewportHeight - _horizontalScroller.height + 1;
-
- rect = contentArea.scrollRect;
- rect.x = ScrollBarModel(_horizontalScroller.model).value;
- contentArea.scrollRect = rect;
-
- vbarAdjustHeightBy = _horizontalScroller.height + 1;
- }
-
- if (_verticalScroller) {
- _verticalScroller.setHeight(model.viewportHeight - vbarAdjustHeightBy, false);
- }
- if (_horizontalScroller) {
- _horizontalScroller.setWidth(model.viewportWidth - hbarAdjustWidthBy, false);
- }
-
- if (!model.contentIsHost) {
- contentArea.x = model.contentX;
- contentArea.y = model.contentY;
- }
- contentArea.setWidthAndHeight(model.contentWidth, model.contentHeight, true);
- }
-
- public function updateSize():void
- {
- var metrics:UIMetrics = BeadMetrics.getMetrics(_strand);
- var host:UIBase = UIBase(_strand);
- var addVbar:Boolean = false;
- var addHbar:Boolean = false;
-
- if (model.viewportHeight >= model.contentHeight) {
- if (_verticalScroller) {
- host.removeElement(_verticalScroller);
- _verticalScroller = null;
- }
- }
- else if (model.contentHeight > model.viewportHeight) {
- if (_verticalScroller == null) {
- addVbar = true;
- }
- }
-
- if (model.viewportWidth >= model.contentWidth) {
- if (_horizontalScroller) {
- host.removeElement(_horizontalScroller);
- _horizontalScroller = null;
- }
- }
- else if (model.contentWidth > model.viewportWidth) {
- if (_horizontalScroller == null) {
- addHbar = true;
- }
- }
-
- if (addVbar) needsVerticalScroller();
- if (_verticalScroller) {
- ScrollBarModel(_verticalScroller.model).maximum = model.contentHeight;
- ScrollBarModel(_verticalScroller.model).pageSize = model.viewportHeight;
- ScrollBarModel(_verticalScroller.model).pageStepSize = model.viewportHeight;
- }
-
- if (addHbar) needsHorizontalScroller();
- if (_horizontalScroller) {
- ScrollBarModel(_horizontalScroller.model).maximum = model.contentWidth;
- ScrollBarModel(_horizontalScroller.model).pageSize = model.viewportWidth;
- ScrollBarModel(_horizontalScroller.model).pageStepSize = model.viewportWidth;
- }
-
- var rect:Rectangle = contentArea.scrollRect;
- if (rect) {
- rect.x = model.viewportX;//0;
- rect.y = model.viewportY;//0;
- rect.width = model.viewportWidth - metrics.left;
- rect.height = model.viewportHeight - 2*metrics.top;
- contentArea.scrollRect = rect;
- }
- }
-
- /**
- * Call this function when at least one scroller is needed to view the entire
- * contentArea.
- */
- public function needsScrollers():void
- {
- needsVerticalScroller();
- needsHorizontalScroller();
- }
-
- /**
- * Call this function when only a vertical scroller is needed
- */
- public function needsVerticalScroller():void
- {
- var host:UIBase = UIBase(_strand);
-
- var needVertical:Boolean = model.contentHeight > model.viewportHeight;
-
- if (needVertical && _verticalScroller == null) {
- _verticalScroller = createVerticalScrollBar();
- var vMetrics:UIMetrics = BeadMetrics.getMetrics(_verticalScroller);
- _verticalScroller.visible = true;
- _verticalScroller.x = model.viewportWidth - (_verticalScroller.width+1) - vMetrics.left - vMetrics.right;
- _verticalScroller.y = model.viewportY;
- _verticalScroller.setHeight(model.viewportHeight, true);
-
- host.addElement(_verticalScroller, false);
- }
- }
-
- /**
- * Call this function when only a horizontal scroller is needed
- */
- public function needsHorizontalScroller():void
- {
- var host:UIBase = UIBase(_strand);
-
- var needHorizontal:Boolean = model.contentWidth > model.viewportWidth;
-
- if (needHorizontal && _horizontalScroller == null) {
- _horizontalScroller = createHorizontalScrollBar();
- var hMetrics:UIMetrics = BeadMetrics.getMetrics(_horizontalScroller);
- _horizontalScroller.visible = true;
- _horizontalScroller.x = model.viewportX;
- _horizontalScroller.y = model.viewportHeight - (_horizontalScroller.height+1) - hMetrics.top - hMetrics.bottom;
- _horizontalScroller.setWidth(model.viewportWidth, true);
-
- host.addElement(_horizontalScroller, false);
- }
- }
-
- public function scrollerWidth():Number
+ private var viewportWidth:Number;
+ private var viewportHeight:Number;
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
+ override public function layoutViewportBeforeContentLayout(width:Number, height:Number):void
+ {
+ super.layoutViewportBeforeContentLayout(width, height);
+ viewportWidth = width;
+ viewportHeight = height;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
+ override public function layoutViewportAfterContentLayout():Size
{
- if (_verticalScroller) return _verticalScroller.width;
- return 0;
+ var hadV:Boolean = _verticalScroller != null && _verticalScroller.visible;
+ var hadH:Boolean = _horizontalScroller != null && _horizontalScroller.visible;
+ var contentSize:Size;
+ do
+ {
+ contentSize = super.layoutViewportAfterContentLayout();
+ if (isNaN(viewportHeight))
+ viewportHeight = contentSize.height;
+ if (isNaN(viewportWidth))
+ viewportWidth = contentSize.width;
+
+ var host:UIBase = UIBase(_strand);
+ var visibleWidth:Number;
+ var visibleHeight:Number;
+ var needV:Boolean = contentSize.height > viewportHeight;
+ var needH:Boolean = contentSize.width > viewportWidth;
+
+ if (needV)
+ {
+ if (_verticalScroller == null) {
+ _verticalScroller = createVerticalScrollBar();
+ host.addElement(_verticalScroller, false);
+ }
+ }
+ if (needH)
+ {
+ if (_horizontalScroller == null) {
+ _horizontalScroller = createHorizontalScrollBar();
+ host.addElement(_horizontalScroller, false);
+ }
+ }
+
+ if (needV)
+ {
+ _verticalScroller.visible = true;
+ _verticalScroller.x = contentArea.x + viewportWidth - _verticalScroller.width;
+ _verticalScroller.y = contentArea.y;
+ _verticalScroller.setHeight(viewportHeight - (needH ? _horizontalScroller.height : 0), true);
+ visibleWidth = _verticalScroller.x;
+ }
+ else if (_verticalScroller)
+ _verticalScroller.visible = false;
+
+ if (needH)
+ {
+ _horizontalScroller.visible = true;
+ _horizontalScroller.x = contentArea.x;
+ _horizontalScroller.y = contentArea.y + viewportHeight - _horizontalScroller.height;
+ _horizontalScroller.setWidth(viewportWidth - (needV ? _verticalScroller.width : 0), true);
+ visibleHeight = _horizontalScroller.y;
+ }
+
+ var needsLayout:Boolean = false;
+ // resize content area if needed to get out from under scrollbars
+ if (!isNaN(visibleWidth) || !isNaN(visibleHeight))
+ {
+ if (!isNaN(visibleWidth))
+ needsLayout = visibleWidth != contentView.width;
+ if (!isNaN(visibleHeight))
+ needsLayout = visibleHeight != contentView.height;
+ if (!isNaN(visibleWidth) && !isNaN(visibleHeight))
+ contentArea.setWidthAndHeight(visibleWidth, visibleHeight, false);
+ else if (!isNaN(visibleWidth))
+ contentArea.setWidth(visibleWidth, false);
+ else if (!isNaN(visibleHeight))
+ contentArea.setHeight(visibleHeight, false);
+ }
+ if (needsLayout)
+ {
+ var layout:IBeadLayout = host.getBeadByType(IBeadLayout) as IBeadLayout;
+ layout.layout();
+ }
+ } while (needsLayout && (needV != hadV || needH == hadH));
+ if (_verticalScroller)
+ {
+ ScrollBarModel(_verticalScroller.model).maximum = contentSize.height;
+ ScrollBarModel(_verticalScroller.model).pageSize = contentArea.height;
+ ScrollBarModel(_verticalScroller.model).pageStepSize = contentArea.height;
+ if (contentSize.height > contentArea.height &&
+ (contentSize.height - contentArea.height) < _verticalScrollPosition)
+ _verticalScrollPosition = contentSize.height - contentArea.height;
+ }
+ if (_horizontalScroller)
+ {
+ ScrollBarModel(_horizontalScroller.model).maximum = contentSize.width;
+ ScrollBarModel(_horizontalScroller.model).pageSize = contentArea.width;
+ ScrollBarModel(_horizontalScroller.model).pageStepSize = contentArea.width;
+ if (contentSize.width > contentArea.width &&
+ (contentSize.width - contentArea.width) < _horizontalScrollPosition)
+ _horizontalScrollPosition = contentSize.width - contentArea.width;
+ }
+
+ var rect:Rectangle = new Rectangle(_horizontalScrollPosition, _verticalScrollPosition,
+ (_verticalScroller != null && _verticalScroller.visible) ?
+ _verticalScroller.x : viewportWidth,
+ (_horizontalScroller != null && _horizontalScroller.visible) ?
+ _horizontalScroller.y : viewportHeight);
+ contentArea.scrollRect = rect;
+ return contentSize;
}
- public function scrollerHeight():Number
- {
- if (_horizontalScroller) return _horizontalScroller.height;
- return 0;
- }
private function createVerticalScrollBar():ScrollBar
{
- var host:UIBase = UIBase(_strand);
- var metrics:UIMetrics = BeadMetrics.getMetrics(host);
-
var vsbm:ScrollBarModel = new ScrollBarModel();
- vsbm.maximum = model.contentHeight;
vsbm.minimum = 0;
- vsbm.pageSize = model.viewportHeight - metrics.top - metrics.bottom;
- vsbm.pageStepSize = model.viewportHeight - metrics.top - metrics.bottom;
vsbm.snapInterval = 1;
vsbm.stepSize = 1;
vsbm.value = 0;
@@ -285,29 +206,14 @@ package org.apache.flex.html.supportClasses
vsb.model = vsbm;
vsb.visible = false;
- vsb.addEventListener("scroll",handleVerticalScroll);
-
- var rect:Rectangle = contentArea.scrollRect;
- if (rect == null) {
- rect = new Rectangle(model.viewportX, model.viewportY,//0, 0,
- model.viewportWidth - metrics.left - metrics.right,
- model.viewportHeight - metrics.top - metrics.bottom);
- contentArea.scrollRect = rect;
- }
-
+ vsb.addEventListener("scroll",handleVerticalScroll);
return vsb;
}
private function createHorizontalScrollBar():ScrollBar
{
- var host:UIBase = UIBase(_strand);
- var metrics:UIMetrics = BeadMetrics.getMetrics(host);
-
var hsbm:ScrollBarModel = new ScrollBarModel();
- hsbm.maximum = model.contentWidth;
hsbm.minimum = 0;
- hsbm.pageSize = model.viewportWidth - metrics.left - metrics.right;
- hsbm.pageStepSize = model.viewportWidth - metrics.left - metrics.right;
hsbm.snapInterval = 1;
hsbm.stepSize = 1;
hsbm.value = 0;
@@ -317,16 +223,7 @@ package org.apache.flex.html.supportClasses
hsb.model = hsbm;
hsb.visible = false;
- hsb.addEventListener("scroll",handleHorizontalScroll);
-
- var rect:Rectangle = contentArea.scrollRect;
- if (rect == null) {
- rect = new Rectangle(model.viewportX, model.viewportY,//0, 0,
- model.viewportWidth - metrics.left - metrics.right,
- model.viewportHeight - metrics.top - metrics.bottom);
- contentArea.scrollRect = rect;
- }
-
+ hsb.addEventListener("scroll",handleHorizontalScroll);
return hsb;
}
@@ -338,7 +235,7 @@ package org.apache.flex.html.supportClasses
rect.y = vpos;
contentArea.scrollRect = rect;
- model.verticalScrollPosition = vpos;
+ _verticalScrollPosition = vpos;
}
private function handleHorizontalScroll(event:Event):void
@@ -349,25 +246,20 @@ package org.apache.flex.html.supportClasses
rect.x = hpos;
contentArea.scrollRect = rect;
- model.horizontalScrollPosition = hpos;
- }
-
- private function handleContentChange(event:Event):void
- {
- contentArea = model.contentArea as UIBase;
+ _horizontalScrollPosition = hpos;
}
- private function handleVerticalScrollChange(event:Event):void
+ private function handleVerticalScrollChange():void
{
if (_verticalScroller) {
- ScrollBarModel(_verticalScroller.model).value = model.verticalScrollPosition;
+ ScrollBarModel(_verticalScroller.model).value = verticalScrollPosition;
}
}
- private function handleHorizontalScrollChange(event:Event):void
+ private function handleHorizontalScrollChange():void
{
if (_horizontalScroller) {
- ScrollBarModel(_horizontalScroller.model).value = model.horizontalScrollPosition;
+ ScrollBarModel(_horizontalScroller.model).value = horizontalScrollPosition;
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/TextFieldItemRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/TextFieldItemRenderer.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/TextFieldItemRenderer.as
index fc197c1..be8bb20 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/TextFieldItemRenderer.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/TextFieldItemRenderer.as
@@ -25,15 +25,15 @@ package org.apache.flex.html.supportClasses
import org.apache.flex.core.IBeadController;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IUIBase;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.core.UIBase;
import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
import org.apache.flex.events.MouseEvent;
import org.apache.flex.events.utils.MouseEventConverter;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.beads.ITextItemRenderer;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The TextFieldItemRenderer class provides a org.apache.flex.html.TextField as an itemRenderer.
@@ -229,7 +229,7 @@ package org.apache.flex.html.supportClasses
{
var w:Number = _width;
if (isNaN(w)) w = $width;
- var metrics:UIMetrics = BeadMetrics.getMetrics(this);
+ var metrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(this);
return w + metrics.left + metrics.right;
}
else
@@ -267,7 +267,7 @@ package org.apache.flex.html.supportClasses
{
var h:Number = _height;
if (isNaN(h)) h = $height;
- var metrics:UIMetrics = BeadMetrics.getMetrics(this);
+ var metrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(this);
return h + metrics.top + metrics.bottom;
}
else
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/Viewport.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/Viewport.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/Viewport.as
index b32767a..d731fa6 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/Viewport.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/Viewport.as
@@ -18,9 +18,8 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.supportClasses
{
- import flash.geom.Rectangle;
-
import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IContentView;
import org.apache.flex.core.IParentIUIBase;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IUIBase;
@@ -28,107 +27,85 @@ package org.apache.flex.html.supportClasses
import org.apache.flex.core.IViewportModel;
import org.apache.flex.core.IViewportScroller;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.UIMetrics;
+ import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
+ import org.apache.flex.geom.Rectangle;
+ import org.apache.flex.geom.Size;
import org.apache.flex.html.beads.models.ScrollBarModel;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
public class Viewport implements IBead, IViewport
{
public function Viewport()
{
}
- private var contentArea:UIBase;
- private var _strand:IStrand;
+ protected var contentArea:UIBase;
+ public function get contentView():IUIBase
+ {
+ return contentArea;
+ }
+
+ protected var _strand:IStrand;
public function set strand(value:IStrand):void
{
_strand = value;
+ contentArea = _strand.getBeadByType(IContentView) as UIBase;
+ if (!contentArea)
+ {
+ var c:Class = ValuesManager.valuesImpl.getValue(_strand, 'iContentView') as Class;
+ contentArea = new c() as UIBase;
+ }
}
- private var _model:IViewportModel;
-
- public function set model(value:IViewportModel):void
- {
- _model = value;
-
- if (model.contentArea) contentArea = model.contentArea as UIBase;
-
- model.addEventListener("contentAreaChanged", handleContentChange);
- }
- public function get model():IViewportModel
- {
- return _model;
- }
-
- public function get verticalScroller():IViewportScroller
- {
- return null;
- }
-
- public function get horizontalScroller():IViewportScroller
- {
- return null;
- }
-
- /**
- * Invoke this function to reshape and set the contentArea being managed by
- * this viewport. If scrollers are present this will update them as well to
- * reflect the current location of the visible portion of the contentArea
- * within the viewport.
- */
- public function updateContentAreaSize():void
- {
- if (!model.contentIsHost) {
- contentArea.x = model.contentX;
- contentArea.y = model.contentY;
- }
- //contentArea.setWidthAndHeight(model.contentWidth, model.contentHeight, true);
- }
-
- public function updateSize():void
- {
- // not needed for this type of viewport
- }
-
- /**
- * Call this function when at least one scroller is needed to view the entire
- * contentArea.
- */
- public function needsScrollers():void
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
+ public function setPosition(x:Number, y:Number):void
+ {
+ contentArea.x = x;
+ contentArea.y = y;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
+ public function layoutViewportBeforeContentLayout(width:Number, height:Number):void
{
+ if (!isNaN(width))
+ contentArea.width = width;
+ if (!isNaN(height))
+ contentArea.height = height;
}
- /**
- * Call this function when only a vertical scroller is needed
- */
- public function needsVerticalScroller():void
+ /**
+ * @copy org.apache.flex.core.IViewport
+ */
+ public function layoutViewportAfterContentLayout():Size
{
-
+ // pass through all of the children and determine the maxWidth and maxHeight
+ // note: this is not done on the JavaScript side because the browser handles
+ // this automatically.
+ var maxWidth:Number = 0;
+ var maxHeight:Number = 0;
+ var num:Number = contentArea.numElements;
+
+ for (var i:int=0; i < num; i++) {
+ var child:IUIBase = contentArea.getElementAt(i) as IUIBase;
+ if (child == null || !child.visible) continue;
+ var childXMax:Number = child.x + child.width;
+ var childYMax:Number = child.y + child.height;
+ maxWidth = Math.max(maxWidth, childXMax);
+ maxHeight = Math.max(maxHeight, childYMax);
+ }
+
+ var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(this._strand);
+ return new Size(maxWidth + padding.right, maxHeight + padding.bottom);
}
- /**
- * Call this function when only a horizontal scroller is needed
- */
- public function needsHorizontalScroller():void
- {
-
- }
-
- public function scrollerWidth():Number
- {
- return 0;
- }
-
- public function scrollerHeight():Number
- {
- return 0;
- }
-
- private function handleContentChange(event:Event):void
- {
- contentArea = model.contentArea as UIBase;
- }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
index d9fea0b..a23b9b8 100644
--- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
+++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
@@ -26,13 +26,13 @@ package org.apache.flex.html.beads.layouts
import org.apache.flex.core.IUIBase;
import org.apache.flex.core.IViewport;
import org.apache.flex.core.IViewportModel;
- import org.apache.flex.core.UIMetrics;
import org.apache.flex.core.UIBase;
import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.geom.Rectangle;
import org.apache.flex.html.supportClasses.Viewport;
- import org.apache.flex.utils.BeadMetrics;
+ import org.apache.flex.utils.CSSContainerUtils;
/**
* The FlexibleFirstChildHorizontalLayout class is a simple layout
@@ -79,25 +79,6 @@ package org.apache.flex.html.beads.layouts
host = value as ILayoutChild;
}
- private var _viewportModel:IViewportModel;
-
- /**
- * The data that describes the viewport used by this layout.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function get viewportModel():IViewportModel
- {
- return _viewportModel;
- }
- public function set viewportModel(value:IViewportModel):void
- {
- _viewportModel = value;
- }
-
private var _maxWidth:Number;
/**
@@ -153,10 +134,6 @@ package org.apache.flex.html.beads.layouts
var contentView:IParent = layoutParent.contentView;
var hostSizedToContent:Boolean = host.isHeightSizedToContent();
- // this layout will use and modify the IViewportMode
- var viewport:IViewport = host.getBeadByType(IViewport) as IViewport;
- if (viewport) viewportModel = viewport.model;
-
var n:int = contentView.numElements;
var marginLeft:Object;
var marginRight:Object;
@@ -169,7 +146,7 @@ package org.apache.flex.html.beads.layouts
var xx:Number = layoutParent.resizableView.width;
if (isNaN(xx) || xx <= 0)
return true;
- var uiMetrics:UIMetrics = BeadMetrics.getMetrics(layoutParent.resizableView);
+ var uiMetrics:Rectangle = CSSContainerUtils.getBorderAndPaddingMetrics(layoutParent.resizableView);
xx -= uiMetrics.left + uiMetrics.right + 1; // some browsers won't layout to the edge
for (var i:int = n - 1; i >= 0; i--)
@@ -259,23 +236,7 @@ package org.apache.flex.html.beads.layouts
if (hostSizedToContent)
ILayoutChild(contentView).setHeight(maxHeight, true);
- // Only return true if the contentView needs to be larger; that new
- // size is stored in the model.
- var sizeChanged:Boolean = false;
- if (viewportModel != null) {
- if (viewportModel.contentHeight < maxHeight) {
- viewportModel.contentHeight = maxHeight;
- sizeChanged = true;
- }
- if (viewportModel.contentWidth < xx) {
- viewportModel.contentWidth = xx;
- sizeChanged = true;
- }
- } else {
- sizeChanged = true;
- }
-
- return sizeChanged;
+ return true;
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
index 21cff15..be14146 100644
--- a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
+++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as
@@ -101,8 +101,8 @@ package org.apache.flex.html.beads.layouts
var sw:Number = host.width;
var sh:Number = host.height;
- var hasWidth:Boolean = host.isWidthSizedToContent();
- var hasHeight:Boolean = host.isHeightSizedToContent();
+ var hasWidth:Boolean = !host.isWidthSizedToContent();
+ var hasHeight:Boolean = !host.isHeightSizedToContent();
var e:IUIBase;
var i:int;
var col:int = 0;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
index 26bae27..836b008 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ContainerView.js
@@ -17,10 +17,10 @@ goog.provide('org.apache.flex.html.beads.ContainerView');
goog.require('org.apache.flex.core.BeadViewBase');
goog.require('org.apache.flex.core.IBeadLayout');
goog.require('org.apache.flex.core.ILayoutParent');
-goog.require('org.apache.flex.html.beads.models.ViewportModel');
-goog.require('org.apache.flex.html.supportClasses.ContainerContentArea');
-goog.require('org.apache.flex.html.supportClasses.Viewport');
-goog.require('org.apache.flex.utils.BeadMetrics');
+goog.require('org.apache.flex.core.IViewport');
+goog.require('org.apache.flex.core.IViewportModel');
+goog.require('org.apache.flex.geom.Rectangle');
+goog.require('org.apache.flex.utils.CSSContainerUtils');
@@ -74,15 +74,6 @@ org.apache.flex.html.beads.ContainerView.prototype.contentArea_ = null;
/**
- * @return {Object} The container's child content area.
- */
-org.apache.flex.html.beads.ContainerView.
- prototype.createContentView = function() {
- return new org.apache.flex.html.supportClasses.ContainerContentArea();
-};
-
-
-/**
* @param {org.apache.flex.events.Event} event The event.
*/
org.apache.flex.html.beads.ContainerView.
@@ -210,19 +201,31 @@ org.apache.flex.html.beads.ContainerView.
/**
+ * Calculate the space taken up by non-content children like a TItleBar in a Panel.
+ * @return {org.apache.flex.geom.Rectangle} The space.
+ */
+org.apache.flex.html.beads.ContainerView.
+ prototype.getChromeMetrics = function() {
+ return new org.apache.flex.geom.Rectangle(0, 0, 0, 0);
+};
+
+
+/**
* Creates the viewport and viewportModel.
*/
org.apache.flex.html.beads.ContainerView.
prototype.createViewport = function() {
- if (this.viewportModel_ == null) {
- this.viewportModel_ = new org.apache.flex.html.beads.models.ViewportModel();
- this.viewportModel_.contentArea = this.contentView;
- this.viewportModel_.contentIsHost = false;
+ this.viewportModel = this._strand.getBeadByType(org.apache.flex.core.IViewportModel);
+ if (this.viewportModel == null) {
+ var m3 = org.apache.flex.core.ValuesManager.valuesImpl.getValue(this._strand, 'iViewportModel');
+ this.viewportModel = new m3();
+ this._strand.addBead(this.viewportModel);
}
- if (this.viewport_ == null) {
- this.viewport_ = new org.apache.flex.html.supportClasses.Viewport();
- this.viewport_.model = this.viewportModel_;
- this._strand.addBead(this.viewport_);
+ this.viewport = this._strand.getBeadByType(org.apache.flex.core.IViewport);
+ if (this.viewport == null) {
+ var m2 = org.apache.flex.core.ValuesManager.valuesImpl.getValue(this._strand, 'iViewport');
+ this.viewport = new m2();
+ this._strand.addBead(this.viewport);
}
};
@@ -231,16 +234,20 @@ org.apache.flex.html.beads.ContainerView.
*
*/
org.apache.flex.html.beads.ContainerView.
- prototype.adjustSizeBeforeLayout = function() {
- var host = this._strand;
- this.viewportModel_.contentWidth = host.width;
- this.viewportModel_.contentHeight = host.height;
- this.viewportModel_.contentX = 0;
- this.viewportModel_.contentY = 0;
- if (!host.isWidthSizedToContent())
- this.contentView.width = this.viewportModel_.contentWidth;
- if (!host.isHeightSizedToContent())
- this.contentView.height = this.viewportModel_.contentHeight;
+ prototype.layoutViewBeforeContentLayout = function() {
+ var host = this._strand;
+ var vm = this.viewportModel;
+ vm.borderMetrics = org.apache.flex.utils.CSSContainerUtils.getBorderMetrics(host);
+ vm.chromeMetrics = this.getChromeMetrics();
+ this.viewport.setPosition(vm.borderMetrics.left + vm.chromeMetrics.left,
+ vm.borderMetrics.top + vm.chromeMetrics.top);
+ this.viewport.layoutViewportBeforeContentLayout(
+ !host.isWidthSizedToContent() ?
+ host.width - vm.borderMetrics.left - vm.borderMetrics.right -
+ vm.chromeMetrics.left - vm.chromeMetrics.right : NaN,
+ !host.isHeightSizedToContent() ?
+ host.height - vm.borderMetrics.top - vm.borderMetrics.bottom -
+ vm.chromeMetrics.top - vm.chromeMetrics.bottom : NaN);
};
@@ -250,7 +257,7 @@ org.apache.flex.html.beads.ContainerView.
org.apache.flex.html.beads.ContainerView.
prototype.performLayout = function(event) {
this.runningLayout = true;
- this.adjustSizeBeforeLayout();
+ this.layoutViewBeforeContentLayout();
if (this.layout == null) {
this.layout = this._strand.getBeadByType(org.apache.flex.core.IBeadLayout);
if (this.layout == null) {
@@ -261,7 +268,7 @@ org.apache.flex.html.beads.ContainerView.
}
this.layout.layout();
- this.adjustSizeAfterLayout();
+ this.layoutViewAfterContentLayout();
this.runningLayout = false;
};
@@ -270,83 +277,26 @@ org.apache.flex.html.beads.ContainerView.
*
*/
org.apache.flex.html.beads.ContainerView.
- prototype.adjustSizeAfterLayout = function() {
+ prototype.layoutViewAfterContentLayout = function() {
var host = this._strand;
- var metrics = org.apache.flex.utils.BeadMetrics.getMetrics(host);
- if (host.isWidthSizedToContent())
- this.viewportModel_.contentWidth = this.contentView.width;
- if (host.isHeightSizedToContent())
- this.viewportModel_.contentHeight = this.contentView.height;
+ var viewportSize = this.viewport.layoutViewportAfterContentLayout();
+ var vm = this.viewportModel;
if (host.isWidthSizedToContent() && host.isHeightSizedToContent()) {
- host.setWidthAndHeight(this.viewportModel_.contentWidth + metrics.left + metrics.right,
- this.viewportModel_.contentHeight + metrics.top + metrics.bottom, false);
+ host.setWidthAndHeight(viewportSize.width + vm.borderMetrics.left + vm.borderMetrics.right +
+ vm.chromeMetrics.left + vm.chromeMetrics.right,
+ viewportSize.height + vm.borderMetrics.top + vm.borderMetrics.bottom +
+ vm.chromeMetrics.top + vm.chromeMetrics.bottom, false);
}
else if (!host.isWidthSizedToContent() && host.isHeightSizedToContent()) {
- host.setHeight(this.viewportModel_.contentHeight + metrics.top + metrics.bottom, false);
+ host.setHeight(viewportSize.height + vm.borderMetrics.top + vm.borderMetrics.bottom +
+ vm.chromeMetrics.top + vm.chromeMetrics.bottom, false);
}
else if (host.isWidthSizedToContent() && !host.isHeightSizedToContent()) {
- host.setWidth(this.viewportModel_.contentWidth + metrics.left + metrics.right, false);
+ host.setWidth(viewportSize.width + vm.borderMetrics.left + vm.borderMetrics.right +
+ vm.chromeMetrics.left + vm.chromeMetrics.right, false);
}
-
- this.layoutContainer(host.isWidthSizedToContent(), host.isHeightSizedToContent());
-
- // The JS version of Panel matches the content space to the viewport since HTML
- // takes care of scrollbars
- this.viewportModel_.contentX = this.viewportModel_.viewportX;
- this.viewportModel_.contentY = this.viewportModel_.viewportY;
- this.viewportModel_.contentWidth = this.viewportModel_.viewportWidth;
- this.viewportModel_.contentHeight = this.viewportModel_.viewportHeight;
-
- this.contentView.x = this.viewportModel_.contentX;
- this.contentView.y = this.viewportModel_.contentY;
- //this.contentView.width = this.viewportModel_.contentWidth;
- //this.contentView.height = this.viewportModel_.contentHeight;
-
- this.viewport_.updateSize();
- this.viewport_.updateContentAreaSize();
-};
-
-
-/**
- * @expose
- * This function determines the size and placement of the viewport by adjusting the viewport
- * values in the viewportModel. Subclasses can use this to position additional items. If either
- * of the two parameters are true, the subclass should adjust the size of the host accordingly
- * to account for any additional elements.
- *
- * @param {boolean} widthSizedToContent True if the width of the container is being sized by its content.
- * @param {boolean} heightSizedToContent True if the height of the container is being sized by its content.
- */
-org.apache.flex.html.beads.ContainerView.
- prototype.layoutContainer = function(widthSizedToContent, heightSizedToContent) {
- this.viewportModel_.viewportHeight = this._strand.height;
- this.viewportModel_.viewportWidth = this._strand.width;
- this.viewportModel_.viewportX = 0;
- this.viewportModel_.viewportY = 0;
-};
-
-
-/**
- *
- */
-org.apache.flex.html.beads.ContainerView.
- prototype.determineContentSizeFromChildren = function() {
- // this function has no meaning in the HTML world
-};
-
-
-/**
- * Adjusts the size of the viewportModel's viewport parameters to match those
- * of the strand.
- */
-org.apache.flex.html.beads.ContainerView.
- prototype.resizeViewport = function() {
-/* this.viewportModel_.viewportHeight = this._strand.height;
- this.viewportModel_.viewportWidth = this._strand.width;
- this.viewportModel_.viewportX = 0;
- this.viewportModel_.viewportY = 0;*/
};
@@ -355,11 +305,7 @@ Object.defineProperties(org.apache.flex.html.beads.ContainerView.prototype, {
contentView: {
/** @this {org.apache.flex.html.beads.ContainerView} */
get: function() {
- return this.contentArea_;
- },
- /** @this {org.apache.flex.html.beads.ContainerView} */
- set: function(value) {
- this.contentArea_ = value;
+ return this.viewport.contentView;
}
},
/** @export */
@@ -377,9 +323,9 @@ Object.defineProperties(org.apache.flex.html.beads.ContainerView.prototype, {
/** @this {org.apache.flex.html.beads.ContainerView} */
set: function(value) {
org.apache.flex.utils.Language.superSetter(org.apache.flex.html.beads.ContainerView, this, 'strand', value);
- this.contentView = this.createContentView();
- this.host.addElement(this.contentView);
- this.host.setActualParent(this.contentView);
+ this.createViewport();
+ this.host.addElement(this.viewport.contentView);
+ this.host.setActualParent(this.viewport.contentView);
this._strand.addEventListener('initComplete',
org.apache.flex.utils.Language.closure(this.initCompleteHandler, this, 'initCompleteHandler'));
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ListView.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ListView.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ListView.js
index e1b951d..8f3ab66 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ListView.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/ListView.js
@@ -58,19 +58,6 @@ org.apache.flex.html.beads.ListView.prototype.
/**
* @override
- * @return {Object} The container's child content area.
- */
-org.apache.flex.html.beads.ListView.
- prototype.createContentView = function() {
- var m2 = org.apache.flex.core.ValuesManager.valuesImpl.
- getValue(this._strand, 'iDataGroup');
- var contentView = new m2();
- return contentView;
-};
-
-
-/**
- * @override
*/
org.apache.flex.html.beads.ListView.
prototype.completeSetup = function() {
@@ -94,7 +81,7 @@ Object.defineProperties(org.apache.flex.html.beads.ListView.prototype, {
this.model.addEventListener('dataProviderChanged',
goog.bind(this.dataProviderChangeHandler, this));
- this.dataGroup_.strand = this;
+ this.dataGroup.strand = this;
/*if (this._strand.getBeadByType(org.apache.flex.core.IBeadLayout) == null) {
var m3 = org.apache.flex.core.ValuesManager.valuesImpl.getValue(this._strand, 'iBeadLayout');
@@ -108,25 +95,10 @@ Object.defineProperties(org.apache.flex.html.beads.ListView.prototype, {
}
},
/** @export */
- contentView: {
- /** @this {org.apache.flex.html.beads.ListView} */
- get: function() {
- return this.dataGroup_;
- },
- /** @this {org.apache.flex.html.beads.ListView} */
- set: function(value) {
- this.dataGroup_ = value;
- }
- },
- /** @export */
dataGroup: {
/** @this {org.apache.flex.html.beads.ListView} */
get: function() {
- return this.dataGroup_;
- },
- /** @this {org.apache.flex.html.beads.ListView} */
- set: function(value) {
- this.dataGroup_ = value;
+ return this.contentView;
}
},
/** @export */
@@ -164,11 +136,11 @@ org.apache.flex.html.beads.ListView.prototype.
selectionChangeHandler = function(value) {
var ir;
if (this.lastSelectedIndex != -1) {
- ir = this.dataGroup_.getItemRendererForIndex(this.lastSelectedIndex);
+ ir = this.dataGroup.getItemRendererForIndex(this.lastSelectedIndex);
if (ir) ir.selected = false;
}
if (this.model.selectedIndex != -1) {
- ir = this.dataGroup_.getItemRendererForIndex(
+ ir = this.dataGroup.getItemRendererForIndex(
this.model.selectedIndex);
if (ir) ir.selected = true;
}
@@ -192,6 +164,6 @@ org.apache.flex.html.beads.ListView.prototype.
* @param {org.apache.flex.events.Event} event The event that triggered the resize.
*/
org.apache.flex.html.beads.ListView.prototype.handleSizeChange = function(event) {
- this.dataGroup_.width = this._strand.width;
- this.dataGroup_.height = this._strand.height;
+ this.dataGroup.width = this._strand.width;
+ this.dataGroup.height = this._strand.height;
};
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
index 2a4ef04..10a76f3 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/PanelView.js
@@ -14,10 +14,9 @@
goog.provide('org.apache.flex.html.beads.PanelView');
-goog.require('org.apache.flex.html.ControlBar');
goog.require('org.apache.flex.html.TitleBar');
goog.require('org.apache.flex.html.beads.ContainerView');
-goog.require('org.apache.flex.html.supportClasses.ContainerContentArea');
+goog.require('org.apache.flex.utils.CSSContainerUtils');
@@ -61,16 +60,6 @@ org.apache.flex.html.beads.PanelView
* @override
*/
org.apache.flex.html.beads.PanelView.
- prototype.createContentView = function() {
- var ca = new org.apache.flex.html.supportClasses.ContainerContentArea();
- return ca;
-};
-
-
-/**
- * @override
- */
-org.apache.flex.html.beads.PanelView.
prototype.completeSetup = function() {
org.apache.flex.html.beads.PanelView.base(this, 'completeSetup');
// listen for changes to the strand's model so items can be changed
@@ -118,43 +107,58 @@ Object.defineProperties(org.apache.flex.html.beads.PanelView.prototype, {
* @override
*/
org.apache.flex.html.beads.PanelView.
- prototype.adjustSizeBeforeLayout = function() {
- var host = this._strand;
- this.viewportModel.contentWidth = host.width;
- this.viewportModel.contentHeight = host.height - this.titleBar_.height;
- this.viewportModel.contentX = 0;
- this.viewportModel.contentY = 0;
- if (!host.isWidthSizedToContent())
- this.contentView.width = this.viewportModel.contentWidth;
- if (!host.isHeightSizedToContent())
- this.contentView.height = this.viewportModel.contentHeight;
+ prototype.layoutViewBeforeContentLayout = function() {
+ var vm = this.viewportModel;
+ var host = this._strand;
+
+ vm.borderMetrics = org.apache.flex.utils.CSSContainerUtils.getBorderMetrics(host);
+ this.titleBar.x = vm.borderMetrics.left;
+ this.titleBar.y = vm.borderMetrics.top;
+ if (!host.isWidthSizedToContent())
+ this.titleBar.width = host.width - vm.borderMetrics.left - vm.borderMetrics.right;
+ vm.chromeMetrics = this.getChromeMetrics();
+ this.viewport.setPosition(vm.borderMetrics.left + vm.chromeMetrics.left,
+ vm.borderMetrics.top + vm.chromeMetrics.top);
+ this.viewport.layoutViewportBeforeContentLayout(
+ !host.isWidthSizedToContent() ?
+ host.width - vm.borderMetrics.left - vm.borderMetrics.right -
+ vm.chromeMetrics.left - vm.chromeMetrics.right : NaN,
+ !host.isHeightSizedToContent() ?
+ host.height - vm.borderMetrics.top - vm.borderMetrics.bottom -
+ vm.chromeMetrics.top - vm.chromeMetrics.bottom : NaN);
};
/**
* @override
- * @param {boolean} widthSizedToContent True if the width is determined by content.
- * @param {boolean} heightSizedToContent True if the height is determined by content.
*/
-org.apache.flex.html.beads.PanelView.prototype.layoutContainer =
- function(widthSizedToContent, heightSizedToContent) {
-
- this.titleBar_.x = 0;
- this.titleBar_.y = 0;
- this.titleBar_.width = this._strand.width;
- this.titleBar_.dispatchEvent('sizeChanged');
-
- if (heightSizedToContent) {
- this._strand.height = this._strand.height + this.titleBar_.height;
+org.apache.flex.html.beads.PanelView.
+ prototype.layoutViewAfterContentLayout = function() {
+ var vm = this.viewportModel;
+ var host = this._strand;
+ var viewportSize = this.viewport.layoutViewportAfterContentLayout();
+ var hasWidth = !host.isWidthSizedToContent();
+ var hasHeight = !host.isHeightSizedToContent();
+ if (!hasWidth) {
+ this.titleBar.width = viewportSize.width; // should get titlebar to layout and get new height
+ vm.chromeMetrics = this.getChromeMetrics();
}
+ org.apache.flex.html.beads.PanelView.base(this, 'layoutViewAfterContentLayout');
+};
+
- this.viewportModel.viewportHeight = this._strand.height - this.titleBar_.height;
- this.viewportModel.viewportWidth = this._strand.width;
- this.viewportModel.viewportX = 0;
- this.viewportModel.viewportY = this.titleBar_.height;
+/**
+ * @override
+ * Returns the chrome metrics
+ */
+org.apache.flex.html.beads.PanelView.
+ prototype.getChromeMetrics = function() {
+ return new org.apache.flex.geom.Rectangle(0, this.titleBar.height, 0, 0);
};
+
+
/**
* @override
* @param {org.apache.flex.events.Event} event The event that triggered this handler.
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
index 3690bc1..e6e1ee3 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.js
@@ -81,8 +81,8 @@ org.apache.flex.html.beads.layouts.ButtonBarLayout.
var n = itemRendererParent.numElements;
var xpos = 0;
- var useWidth = viewportModel.contentWidth / n;
- var useHeight = viewportModel.contentHeight;
+ var useWidth = contentView.width / n;
+ var useHeight = contentView.height;
for (var i = 0; i < n; i++)
{
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/models/ViewportModel.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/models/ViewportModel.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/models/ViewportModel.js
index 1eb5153..8d01d77 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/models/ViewportModel.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/beads/models/ViewportModel.js
@@ -54,64 +54,15 @@ org.apache.flex.html.beads.models.ViewportModel.prototype.strand_ = null;
/**
- * @type {boolean}
+ * @type {org.apache.flex.geom.Rectangle}
*/
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentIsHost = false;
+org.apache.flex.html.beads.models.ViewportModel.prototype.borderMetrics = null;
/**
- * @private
- * @type {Object}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentArea_ = null;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentWidth = NaN;
-
-
-/**
- * @type {number}
+ * @type {org.apache.flex.geom.Rectangle}
*/
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentHeight = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentX = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.contentY = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.viewportWidth = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.viewportHeight = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.viewportX = NaN;
-
-
-/**
- * @type {number}
- */
-org.apache.flex.html.beads.models.ViewportModel.prototype.viewportY = NaN;
+org.apache.flex.html.beads.models.ViewportModel.prototype.chromeMetrics = null;
/**
@@ -128,17 +79,6 @@ org.apache.flex.html.beads.models.ViewportModel.prototype.horizontalScrollPositi
Object.defineProperties(org.apache.flex.html.beads.models.ViewportModel.prototype, {
/** @export */
- contentArea: {
- /** @this {org.apache.flex.html.beads.models.ViewportModel} */
- get: function() {
- return this.contentArea_;
- },
- /** @this {org.apache.flex.html.beads.models.ViewportModel} */
- set: function(value) {
- this.contentArea_ = value;
- }
- },
- /** @export */
strand: {
/** @this {org.apache.flex.html.beads.models.ViewportModel} */
set: function(value) {
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf3994fe/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
index 131d2da..0146912 100644
--- a/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
+++ b/frameworks/projects/HTML/js/src/org/apache/flex/html/supportClasses/ScrollingViewport.js
@@ -15,11 +15,14 @@
goog.provide('org.apache.flex.html.supportClasses.ScrollingViewport');
goog.require('org.apache.flex.events.Event');
+goog.require('org.apache.flex.geom.Size');
/**
* @constructor
+ * @implements {org.apache.flex.core.IBead}
+ * @implements {org.apache.flex.core.IViewport}
*/
org.apache.flex.html.supportClasses.ScrollingViewport =
function() {
@@ -33,95 +36,95 @@ function() {
*/
org.apache.flex.html.supportClasses.ScrollingViewport.prototype.FLEXJS_CLASS_INFO =
{ names: [{ name: 'ScrollingViewport',
- qName: 'org.apache.flex.html.supportClasses.ScrollingViewport' }]};
+ qName: 'org.apache.flex.html.supportClasses.ScrollingViewport' }],
+ interfaces: [org.apache.flex.core.IBead,
+ org.apache.flex.core.IViewport]};
/**
- * @private
+ * @protected
* @type {Object}
*/
-org.apache.flex.html.supportClasses.ScrollingViewport.prototype.strand_ = null;
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype._strand = null;
/**
- *
+ * @type {org.apache.flex.html.supportClasses.ContainerContentArea}
*/
-org.apache.flex.html.supportClasses.ScrollingViewport.prototype.updateSize = function() {
-};
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.contentView = null;
/**
- *
+ * @param {number} x The x position of the viewport.
+ * @param {number} y The y position of the viewport.
*/
-org.apache.flex.html.supportClasses.ScrollingViewport.prototype.updateContentAreaSize = function() {
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.setPosition =
+ function(x, y) {
+ this.contentView.x = x;
+ this.contentView.y = y;
};
/**
- * @param {org.apache.flex.events.Event} event The event.
+ * @param {number} width The width or NaN if sized to content.
+ * @param {number} height The height or NaN if sized to content.
*/
-org.apache.flex.html.supportClasses.ScrollingViewport.prototype.handleInitComplete =
- function(event) {
- var viewBead = this.strand_.getBeadByType(org.apache.flex.core.ILayoutParent);
- var contentView = viewBead.contentView;
- contentView.element.style['overflow'] = 'auto';
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.layoutViewportBeforeContentLayout =
+ function(width, height) {
+ if (!isNaN(width))
+ this.contentView.width = width;
+ if (!isNaN(height))
+ this.contentView.height = height;
};
+/**
+ * @return {org.apache.flex.geom.Size} The size of the viewport.
+ */
+org.apache.flex.html.supportClasses.ScrollingViewport.prototype.layoutViewportAfterContentLayout =
+ function() {
+ // nothing to do here? In theory, the layout and browser will have stretched or shrunk
+ // the contentView to the right size
+ return new org.apache.flex.geom.Size(this.contentView.width, this.contentView.height);
+};
+
Object.defineProperties(org.apache.flex.html.supportClasses.ScrollingViewport.prototype, {
/** @export */
- model: {
- /** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
- get: function() {
- return this.model_;
- },
- /** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
- set: function(value) {
- this.model_ = value;
- }
- },
- /** @export */
verticalScrollPosition: {
/** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
get: function() {
- var viewBead = this.strand_.getBeadByType(org.apache.flex.core.ILayoutParent);
- var contentView = viewBead.contentView;
- return contentView.positioner.scrollTop;
+ return this.contentView.positioner.scrollTop;
},
/** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
set: function(value) {
- var viewBead = this.strand_.getBeadByType(org.apache.flex.core.ILayoutParent);
- var contentView = viewBead.contentView;
- contentView.positioner.scrollTop = value;
+ this.contentView.positioner.scrollTop = value;
}
},
/** @export */
horizontalScrollPosition: {
/** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
get: function() {
- var viewBead = this.strand_.getBeadByType(org.apache.flex.core.ILayoutParent);
- var contentView = viewBead.contentView;
- return contentView.positioner.scrollLeft;
+ return this.contentView.positioner.scrollLeft;
},
/** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
set: function(value) {
- var viewBead = this.strand_.getBeadByType(org.apache.flex.core.ILayoutParent);
- var contentView = viewBead.contentView;
- contentView.positioner.scrollLeft = value;
+ this.contentView.positioner.scrollLeft = value;
}
},
/** @export */
strand: {
/** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
- get: function() {
- return this.strand_;
- },
- /** @this {org.apache.flex.html.supportClasses.ScrollingViewport} */
set: function(value) {
- this.strand_ = value;
- this.strand_.addEventListener('initComplete',
- goog.bind(this.handleInitComplete, this));
- }
+ this._strand = value;
+ this.contentView = this._strand.getBeadByType(org.apache.flex.core.IContentView);
+ if (this.contentView == null) {
+ var c = org.apache.flex.core.ValuesManager.valuesImpl.getValue(
+ this._strand, 'iContentView');
+ if (c)
+ this.contentView = new c();
+ }
+ this.contentView.element.style.overflow = 'auto';
+ }
}
});