You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ma...@apache.org on 2013/10/05 01:03:12 UTC
[06/15] git commit: [flex-sdk] [refs/heads/develop] -
https://issues.apache.org/jira/browse/FLEX-33777 Dagrid for mobile - fixed
Bitmap scaling using BitmapImage instead of BitmapAsset - fixed last column
width
https://issues.apache.org/jira/browse/FLEX-33777 Dagrid for mobile
- fixed Bitmap scaling using BitmapImage instead of BitmapAsset
- fixed last column width
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/fe39973b
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/fe39973b
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/fe39973b
Branch: refs/heads/develop
Commit: fe39973bd62f7ebac64a16de58f8070517bba877
Parents: b78de5c
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 1 23:05:14 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 1 23:05:14 2013 +0200
----------------------------------------------------------------------
.../projects/experimental_mobile/defaults.css | 38 +++-
.../src/ExperimentalMobileClasses.as | 6 +-
.../src/spark/components/MobileGrid.as | 34 ++--
.../itemRenderers/IItemPartRendererBase.as | 5 +-
.../itemRenderers/IItemTextPartRenderer.as | 4 -
.../itemRenderers/ItemBitmapPartRenderer.as | 54 ++----
.../itemRenderers/ItemTextPartRenderer.as | 10 ++
.../supportClasses/IPartRendererDescriptor.as | 34 ----
.../supportClasses/ListMultiPartColumnLayout.as | 97 +++++++++++
.../ListMultiPartItemRendererBase.as | 172 +++++++++++++++++--
.../supportClasses/ListMultiPartLayoutBase.as | 9 +-
.../supportClasses/ListMultiPartTabbedLayout.as | 82 ---------
.../supportClasses/MobileGridColumn.as | 6 +-
.../supportClasses/MobileGridHeader.as | 15 +-
.../supportClasses/MobileGridRowRenderer.as | 2 +-
.../PartRendererDescriptorBase.as | 69 ++++----
.../src/spark/events/MobileGridHeaderEvent.as | 2 +-
.../src/spark/skins/MobileGridSkin.as | 3 +-
.../src/spark/utils/DensityUtil2.as | 38 +---
.../src/spark/utils/MultiDPIBitmapSourceExt.as | 23 ++-
.../src/spark/utils/UIComponentUtils.as | 34 ----
21 files changed, 433 insertions(+), 304 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/defaults.css b/frameworks/projects/experimental_mobile/defaults.css
index 236ea6f..aaf188b 100644
--- a/frameworks/projects/experimental_mobile/defaults.css
+++ b/frameworks/projects/experimental_mobile/defaults.css
@@ -26,7 +26,8 @@ MobileGrid
contentBackgroundColor: #202020;
alternatingItemColors: #202020, #2a2a2a;
color: white;
- selection-color: #00a2ff; /* blue */
+ selection-color: #00a2ff; /* blue */
+
}
supportClasses|MobileGridHeader
@@ -37,9 +38,10 @@ supportClasses|MobileGridHeader
/* color: #f0f0f0; */
}
-supportClasses|ItemRendererBase
+supportClasses|MobileGridRowRenderer
{
verticalAlign: "middle";
+ downColor: #000000;;
}
@media (application-dpi: 120)
@@ -60,7 +62,6 @@ supportClasses|ItemRendererBase
supportClasses|ItemRendererBase
{
- color: #bae5ff;
paddingBottom: 12;
paddingLeft: 7;
paddingRight: 7;
@@ -73,7 +74,7 @@ supportClasses|ItemRendererBase
supportClasses|MobileGridHeader
{
- fontSize: 14;
+ fontSize: 18;
}
supportClasses|MobileGridRowRenderer
@@ -86,7 +87,6 @@ supportClasses|ItemRendererBase
supportClasses|ItemRendererBase
{
- color: #acffb5;
paddingBottom: 16;
paddingLeft: 10;
paddingRight: 10;
@@ -112,7 +112,6 @@ supportClasses|ItemRendererBase
supportClasses|ItemRendererBase
{
- color: #fbffa0;
paddingBottom: 24;
paddingLeft: 14;
paddingRight: 14;
@@ -130,7 +129,6 @@ supportClasses|ItemRendererBase
supportClasses|MobileGridRowRenderer
{
- color: #ffc2aa;
paddingTop: 2;
paddingLeft: 20;
paddingRight: 20;
@@ -146,4 +144,30 @@ supportClasses|ItemRendererBase
}
}
+@media (application-dpi: 480)
+{
+
+ supportClasses|MobileGridHeader
+ {
+ fontSize: 40;
+ }
+
+ supportClasses|MobileGridRowRenderer
+ {
+ paddingTop: 4;
+ paddingLeft: 28;
+ paddingRight: 28;
+ paddingBottom: 0;
+ }
+
+ supportClasses|ItemRendererBase
+ {
+ paddingBottom: 48;
+ paddingLeft: 28;
+ paddingRight: 28;
+ paddingTop: 48;
+ }
+}
+
+
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/ExperimentalMobileClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/ExperimentalMobileClasses.as b/frameworks/projects/experimental_mobile/src/ExperimentalMobileClasses.as
index 215735f..b695712 100644
--- a/frameworks/projects/experimental_mobile/src/ExperimentalMobileClasses.as
+++ b/frameworks/projects/experimental_mobile/src/ExperimentalMobileClasses.as
@@ -25,10 +25,10 @@ import spark.skins.MobileGridSkin;
/*
classes that won't be detected through dependencies
-* and classes that needs to be includes in ASDOC
-* */
+ * and classes that needs to be includes in ASDOC
+ * */
- internal class ExperimentalMobileClasses
+internal class ExperimentalMobileClasses
{
// mamsellem: for some reason, the import statements alone are not enough to have the classes included
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/MobileGrid.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/MobileGrid.as b/frameworks/projects/experimental_mobile/src/spark/components/MobileGrid.as
index 618a1bc..4161580 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/MobileGrid.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/MobileGrid.as
@@ -27,10 +27,10 @@ import mx.core.ScrollPolicy;
import mx.core.mx_internal;
import spark.collections.Sort;
-import spark.components.supportClasses.IPartRendererDescriptor;
import spark.components.supportClasses.MobileGridColumn;
import spark.components.supportClasses.MobileGridHeader;
import spark.components.supportClasses.MobileGridRowRenderer;
+import spark.components.supportClasses.PartRendererDescriptorBase;
import spark.events.MobileGridHeaderEvent;
import spark.layouts.VerticalLayout;
import spark.layouts.supportClasses.LayoutBase;
@@ -58,7 +58,7 @@ use namespace mx_internal;
/**
* The MobileGrid displays a collection of items in a grid of rows and columns, with column headers, optimized for mobile devices.
- * <p> The MobileGrid component provides the following features: </p>
+ * The MobileGrid component provides the following features:
* <ul>
* <li> user can swipe through the rows in the datagrid. </li>
* <li> supports single selection of a row. </li>
@@ -69,18 +69,18 @@ use namespace mx_internal;
*
* <p> It's important to understand that MobileGrid does not have all the capabilities and flexibility of it's desktop equivalent,
* in order to ensure optimal display and scrolling performance on mobile devices. </p>
- * <p>Typically, the following features are not available in MobileGrid: </p>
+ * <p>Typically, the following features are not available in MobileGrid:
* <ul>
* <li>the list of columns is static and cannot be changed at runtime</li>
* <li>multiple selection is not supported </li>
* <li>it's not possible to interactively reorder columns </li>
* <li>custom cell renderers must be designed with care, preferably in ActionScript, to ensure good display performance </li>
* </ul>
- *
- * <p>Internally, MobileGrid inherits for Mobile spark.List component rather than any Grid or DataGrid, which means that all cell renderers in a single row are managed
- * by one single MobileGridRowRenderer that delegates the individual cell renderers to light-weight sub-renderers. </p>
+ * </p>
+ * <p>Internally, MobileGrid inherits for Mobile spark.List component rather than any Grid or DataGrid, which means that all cell renderers
+ * in a single row are managed by one single MobileGridRowRenderer that delegates the individual cell renderers to light-weight sub-renderers. </p>
* <p> You usually don't access this internal row renderer yourself, and will rather define the individual cell renderers.</p>
- * <p> This technique ensures optimal display and memory performance, which is critical for mobile devices,, at the price of less flexibility for cell renderers </p>
+ * <p> This technique ensures optimal display and memory performance, which is critical for mobile devices,, at the price of less flexibility for cell renderers. </p>
*
* @see spark.components.supportClasses.MobileGridColumn
*
@@ -94,7 +94,7 @@ public class MobileGrid extends List
[SkinPart(required="true")]
public var headerGroup:MobileGridHeader;
- private var _columns: Array;
+ private var _columns:Array;
private var _columnsChanged:Boolean = false;
private var _sortableColumns:Boolean = true;
private var lastSortIndex:int = -1;
@@ -174,7 +174,8 @@ public class MobileGrid extends List
override protected function commitProperties():void
{
super.commitProperties();
- if (_columnsChanged){
+ if (_columnsChanged)
+ {
_columnsChanged = false;
for (var i:int = 0; i < _columns.length; i++)
{
@@ -195,12 +196,12 @@ public class MobileGrid extends List
return l;
}
- protected function initDefaultItemRenderer(pcolumnDescriptors: Array):void
+ protected function initDefaultItemRenderer(pcolumnDescriptors:Array):void
{
var cf:ClassFactory;
cf = new ClassFactory(MobileGridRowRenderer);
cf.properties = {
- partRendererDescriptors: Vector.<IPartRendererDescriptor>(pcolumnDescriptors)
+ partRendererDescriptors: Vector.<PartRendererDescriptorBase>(pcolumnDescriptors)
};
this.itemRenderer = cf;
}
@@ -230,10 +231,10 @@ public class MobileGrid extends List
private function headerGroup_sortChangeHandler(event:MobileGridHeaderEvent):void
{
var e:MobileGridHeaderEvent = MobileGridHeaderEvent(event.clone());
- dispatchEvent( e)
+ dispatchEvent(e)
if (!e.isDefaultPrevented())
{
- sortByColumn(e.columnIndex);
+ sortByColumn(e.columnIndex);
}
}
@@ -243,7 +244,7 @@ public class MobileGrid extends List
var collection:ICollectionView = dataProvider as ICollectionView;
var c:MobileGridColumn = _columns[index];
if (!c.sortable)
- return ;
+ return;
var desc:Boolean = c.sortDescending;
// do the sort if we're allowed to
@@ -297,6 +298,11 @@ public class MobileGrid extends List
}
+ override public function validateSize(recursive:Boolean = false):void
+ {
+ super.validateSize(recursive);
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemPartRendererBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemPartRendererBase.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemPartRendererBase.as
index 7194e75..ab802f3 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemPartRendererBase.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemPartRendererBase.as
@@ -34,6 +34,10 @@ public interface IItemPartRendererBase extends IDataRenderer
*/
function set styleProvider(value:IStyleClient):void ;
+ function get canSetWidth():Boolean;
+
+ function get canSetHeight():Boolean;
+
/**
* @private
*/
@@ -50,6 +54,5 @@ public interface IItemPartRendererBase extends IDataRenderer
function getPreferredBoundsHeight(postLayoutTransform:Boolean = true):Number;
-
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemTextPartRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemTextPartRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemTextPartRenderer.as
index 69c3008..edcc0f9 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemTextPartRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IItemTextPartRenderer.as
@@ -19,10 +19,6 @@
package spark.components.itemRenderers
{
-import flash.display.DisplayObjectContainer;
-
-import mx.core.IDataRenderer;
-
public interface IItemTextPartRenderer extends IItemPartRendererBase
{
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemBitmapPartRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemBitmapPartRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemBitmapPartRenderer.as
index b5e7abe..c95195b 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemBitmapPartRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemBitmapPartRenderer.as
@@ -19,15 +19,18 @@
package spark.components.itemRenderers
{
-import mx.core.BitmapAsset;
+import mx.core.mx_internal;
+import mx.graphics.BitmapFillMode;
import mx.styles.IStyleClient;
-import spark.utils.MultiDPIBitmapSourceExt;
+import spark.primitives.BitmapImage;
+
+use namespace mx_internal;
/** Default lightweight class for rendering embedded Bitmaps or Multi-DPI Bitmaps in a MobileGrid cell .
* <p> You define the icon to be used in each cell by setting either iconField or iconFunction properties. </p>
* */
-public class ItemBitmapPartRenderer extends BitmapAsset implements IItemPartRendererBase
+public class ItemBitmapPartRenderer extends BitmapImage implements IItemPartRendererBase
{
private var _iconFunction:Function = null;
@@ -37,6 +40,7 @@ public class ItemBitmapPartRenderer extends BitmapAsset implements IItemPartRend
public function ItemBitmapPartRenderer()
{
super();
+ _fillMode = BitmapFillMode.REPEAT; // do not stretch
}
/**
@@ -69,12 +73,12 @@ public class ItemBitmapPartRenderer extends BitmapAsset implements IItemPartRend
* <pre>iconFunction(item:Object):Object</pre>
*
* <p>The <code>item</code> parameter is the data provider item for an entire row.</p>
- * <p> The function must return either an embedded bitmap's class, or a MultiBitmapSourceExt object .</p>
+ * <p> The function must return either an embedded bitmap's class, or a MultiBitmapSource object .</p>
*
* @default null
*
* @see #iconLabel
- * @see spark.utils.MultiDPIBitmapSourceExt
+ * @see spark.utils.MultiDPIBitmapSource
*
*/
public function get iconFunction():Function
@@ -89,26 +93,9 @@ public class ItemBitmapPartRenderer extends BitmapAsset implements IItemPartRend
public function set data(value:Object):void
{
- var iconClass:Class;
_data = value;
var iconSource:Object = _iconFunction != null ? _iconFunction(_data) : _data[_iconField];
- if (iconSource is MultiDPIBitmapSourceExt)
- {
- iconClass = MultiDPIBitmapSourceExt(iconSource).getSource(NaN) as Class;
- }
- else
- {
- iconClass = iconSource as Class;
- }
- if (iconClass != null)
- {
- var icon:BitmapAsset = new iconClass();
- this.bitmapData = icon.bitmapData;
- }
- else
- {
- this.bitmapData = null;
- }
+ this.source = iconSource;
}
public function get data():Object
@@ -116,29 +103,26 @@ public class ItemBitmapPartRenderer extends BitmapAsset implements IItemPartRend
return _data;
}
- public function getPreferredBoundsWidth(postLayoutTransform:Boolean = true):Number
+ public function set styleProvider(value:IStyleClient):void
{
- return bitmapData.width;
+ // do nothing, this renderer does not manages styles for now.
}
- public function getPreferredBoundsHeight(postLayoutTransform:Boolean = true):Number
+ public function set cssStyleName(value:String):void
{
- return bitmapData.height;
- }
- override public function setActualSize(newWidth:Number, newHeight:Number):void
- {
- // do nothing, bitmap renderer don't stretch for now
}
- public function set styleProvider(value:IStyleClient):void
+ /* to avoid any scaling artifacts, we do not allow bitmap to be stretcghed */
+
+ public function get canSetWidth():Boolean
{
- // do nothing, this renderer does not manages styles for now.
+ return false;
}
- public function set cssStyleName(value:String):void
+ public function get canSetHeight():Boolean
{
+ return false;
}
-
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemTextPartRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemTextPartRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemTextPartRenderer.as
index afb991e..ca3f542 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemTextPartRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/ItemTextPartRenderer.as
@@ -91,6 +91,16 @@ public class ItemTextPartRenderer extends StyleableTextField implements IItemTex
{
_labelFunction = value;
}
+
+ public function get canSetWidth():Boolean
+ {
+ return true;
+ }
+
+ public function get canSetHeight():Boolean
+ {
+ return false;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/IPartRendererDescriptor.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/IPartRendererDescriptor.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/IPartRendererDescriptor.as
deleted file mode 100644
index c81f9f6..0000000
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/IPartRendererDescriptor.as
+++ /dev/null
@@ -1,34 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package spark.components.supportClasses
-{
-
-import mx.core.IFactory;
-
-import spark.components.itemRenderers.IItemPartRendererBase;
-
-public interface IPartRendererDescriptor
-{
- function get scaledWidth():Number;
-
- function get itemRenderer():IFactory;
-
- function createPartRenderer():IItemPartRendererBase;
-}
-}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
new file mode 100644
index 0000000..44c2c46
--- /dev/null
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
@@ -0,0 +1,97 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package spark.components.supportClasses
+{
+import mx.core.mx_internal;
+
+import spark.components.itemRenderers.IItemPartRendererBase;
+import spark.utils.UIComponentUtils;
+
+use namespace mx_internal;
+
+/** @private
+ * this class is responsible for laying out grid cells in a given MobileGrid row.
+ * It will make sure that cell content is aligned according to the column widths.
+ */
+public class ListMultiPartColumnLayout extends ListMultiPartLayoutBase
+{
+
+ public function ListMultiPartColumnLayout(target:ListMultiPartItemRendererBase)
+ {
+ super(target);
+ }
+
+ override public function measure():void
+ {
+ super.measure();
+ var totalWidth:Number = 0;
+ for each (var ld:PartRendererDescriptorBase in partRendererDescriptors)
+ {
+ totalWidth += ld.dpiScaledWidth;
+ }
+ target.measuredWidth = totalWidth;
+ target.measuredMinWidth = 50;
+ }
+
+ /* vertical align middle
+ * Layout algorithm: give all columns the requested sizes, and the last column the remaining width */
+ override public function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
+ {
+
+ if (unscaledWidth == 0 && unscaledHeight == 0)
+ return; // not ready
+ var cellPaddingLeft:Number = target.getStyle("paddingLeft");
+ var cellPaddingRight:Number = target.getStyle("paddingRight");
+ var paddingTop:Number = target.getStyle("paddingTop");
+ var paddingBottom:Number = target.getStyle("paddingBottom");
+ var cellHeight:Number = unscaledHeight - paddingTop - paddingBottom;
+
+ var desc:PartRendererDescriptorBase;
+ var dpr:IItemPartRendererBase;
+ var remainingWidth:Number = unscaledWidth;
+ var curX:Number = cellPaddingLeft;
+ var curY:Number = paddingTop;
+ var colWidth:Number;
+ var partWidth:Number;
+ var partHeight:Number;
+ var count:int = partRenderers.length - 1;
+ for (var i:int = 0; i <= count; i++)
+ {
+ dpr = partRenderers[i];
+ desc = partRendererDescriptors[i];
+ colWidth = desc.dpiScaledWidth;
+ if (dpr.canSetWidth)
+ {
+ // expand last column to fill width, unless it has explicity width
+ partWidth = Math.max(0, ( i == count && !desc.hasExplicitWidth) ? remainingWidth : colWidth - cellPaddingLeft - cellPaddingRight);
+ }
+ else
+ {
+ partWidth = dpr.getPreferredBoundsHeight();
+ }
+ partHeight = dpr.canSetHeight ? cellHeight : dpr.getPreferredBoundsHeight();
+ ;
+ setElementSize(dpr, partWidth, partHeight);
+ setElementPosition(dpr, curX, curY + UIComponentUtils.offsetForCenter(partHeight, cellHeight));
+ curX += colWidth;
+ remainingWidth -= colWidth;
+ }
+ }
+}
+}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartItemRendererBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartItemRendererBase.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartItemRendererBase.as
index e53a968..8f07d5c 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartItemRendererBase.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartItemRendererBase.as
@@ -21,30 +21,44 @@ package spark.components.supportClasses
import flash.display.DisplayObject;
import spark.components.itemRenderers.IItemPartRendererBase;
+import spark.core.DisplayObjectSharingMode;
+import spark.core.IGraphicElement;
+import spark.core.IGraphicElementContainer;
+import spark.core.ISharedDisplayObject;
/** @private
* This is the base class for multi-part renderers that manages a vector of part renderers.
* This class is responsible for creating and storing the actual renderers from their descriptors
* the layout of the part renderers is delegated to a subclass of ListMultiPartLayoutBase;
*/
-public class ListMultiPartItemRendererBase extends ItemRendererBase
+public class ListMultiPartItemRendererBase extends ItemRendererBase implements IGraphicElementContainer, ISharedDisplayObject
{
- private var _partRendererDescriptors:Vector.<IPartRendererDescriptor>;
+ private var _partRendererDescriptors:Vector.<PartRendererDescriptorBase>;
private var _partRenderers:Vector.<IItemPartRendererBase>;
+ private var _graphicElementPartRenderers:Vector.<IGraphicElement>;
private var _partRenderersLayout:ListMultiPartLayoutBase;
+ /**
+ * Management of graphicElement part renderers lifeCycle
+ */
+ private var _redrawRequested:Boolean = false;
+ private var graphicElementsNeedValidateProperties:Boolean = false;
+ private var graphicElementsNeedValidateSize:Boolean = false;
+
public function ListMultiPartItemRendererBase()
{
}
- /* set by DataGridMobile Factory */
- public function set partRendererDescriptors(value:Vector.<IPartRendererDescriptor>):void
+ /** @private
+ * set in List itemRenderer Factory properties */
+ public function set partRendererDescriptors(value:Vector.<PartRendererDescriptorBase>):void
{
_partRendererDescriptors = value;
- _partRenderers = new Vector.<IItemPartRendererBase>(_partRendererDescriptors.length);
+ _partRenderers = new Vector.<IItemPartRendererBase>(_partRendererDescriptors.length, true);
+ _graphicElementPartRenderers = new Vector.<IGraphicElement>();
}
- public function get partRendererDescriptors():Vector.<IPartRendererDescriptor>
+ public function get partRendererDescriptors():Vector.<PartRendererDescriptorBase>
{
return _partRendererDescriptors;
}
@@ -64,11 +78,17 @@ public class ListMultiPartItemRendererBase extends ItemRendererBase
return _partRenderers;
}
+ public function get graphicElementPartRenderers():Vector.<IGraphicElement>
+ {
+ return _graphicElementPartRenderers;
+ }
+
override protected function createChildren():void
{
super.createChildren();
- var desc:IPartRendererDescriptor;
+ var desc:PartRendererDescriptorBase;
var pr:IItemPartRendererBase;
+ var ge:IGraphicElement;
for (var i:int = 0; i < _partRendererDescriptors.length; i++)
{
desc = _partRendererDescriptors[i];
@@ -76,13 +96,27 @@ public class ListMultiPartItemRendererBase extends ItemRendererBase
if (pr != null)
{
pr.styleProvider = this;
- addChild(DisplayObject(pr));
+
+ if (pr is IGraphicElement)
+ {
+ ge = IGraphicElement(pr);
+ ge.parentChanged(this);
+ if (ge.setSharedDisplayObject(this))
+ {
+ ge.displayObjectSharingMode = DisplayObjectSharingMode.USES_SHARED_OBJECT;
+ }
+ _graphicElementPartRenderers.push(ge);
+ }
+ else if (pr is DisplayObject)
+ {
+ addChild(DisplayObject(pr));
+ }
_partRenderers[i] = pr;
}
else
{
//TODO move to resource bundle
- throw new Error("MobileGridColumn item renderer must implement spark.components.itemRenderers.IItemPartRendererBase") ;
+ throw new Error("MobileGridColumn item renderer must implement spark.components.itemRenderers.IItemPartRendererBase");
}
}
}
@@ -93,9 +127,9 @@ public class ListMultiPartItemRendererBase extends ItemRendererBase
_partRenderersLayout.measure();
}
- /** delegate children layout to its partRendererLayout
- subclasses can override this method to layout chrome content
- */
+ /** delegate children layout to its partRendererLayout
+ subclasses can override this method to layout chrome content
+ */
override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
{
_partRenderersLayout.layoutContents(unscaledWidth, unscaledHeight);
@@ -112,6 +146,120 @@ public class ListMultiPartItemRendererBase extends ItemRendererBase
invalidateSize();
}
+ /* graphic element sub renderers lifecycle management */
+
+ override protected function commitProperties():void
+ {
+ if (graphicElementsNeedValidateProperties)
+ {
+ graphicElementsNeedValidateProperties = false;
+ for (var i:int = 0; i < _graphicElementPartRenderers.length; i++)
+ {
+ _graphicElementPartRenderers[i].validateProperties();
+ }
+ }
+ super.commitProperties();
+ }
+
+
+ override public function validateSize(recursive:Boolean = false):void
+ {
+ if (graphicElementsNeedValidateSize)
+ {
+ graphicElementsNeedValidateSize = false;
+ for (var i:int = 0; i < _graphicElementPartRenderers.length; i++)
+ {
+ _graphicElementPartRenderers[i].validateSize();
+ }
+ }
+ super.validateSize(recursive);
+ }
+
+
+ /* copied from Group*/
+ override public function validateDisplayList():void
+ {
+ super.validateDisplayList();
+ if (_redrawRequested)
+ {
+ for (var i:int = 0; i < _graphicElementPartRenderers.length; i++)
+ {
+ _graphicElementPartRenderers[i].validateDisplayList();
+ }
+ }
+ }
+
+ /* interfaces implementation, copied from spark.components.IconItemRender */
+
+ /**
+ * @inheritDoc
+ *
+ * <p>We implement this as part of ISharedDisplayObject so the iconDisplay
+ * can share our display object.</p>
+ *
+ * @langversion 3.0
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public function get redrawRequested():Boolean
+ {
+ return _redrawRequested;
+ }
+
+ /**
+ * @private
+ */
+ public function set redrawRequested(value:Boolean):void
+ {
+ _redrawRequested = value;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // IGraphicElementContainer
+ //
+ // -------------------------------------------------------------------------
+
+ /**
+ * @private
+ *
+ * Notify the host component that an element changed and needs to validate properties.
+ */
+ public function invalidateGraphicElementSharing(element:IGraphicElement):void
+ {
+ //do nothing because all has been done in createChildren and won't change
+ }
+
+ /**
+ * @private
+ *
+ * Notify the host component that an element changed and needs to validate properties.
+ */
+ public function invalidateGraphicElementProperties(element:IGraphicElement):void
+ {
+ graphicElementsNeedValidateProperties = true;
+ invalidateProperties();
+ }
+
+ /**
+ * @private
+ */
+ public function invalidateGraphicElementSize(element:IGraphicElement):void
+ {
+ graphicElementsNeedValidateSize = true;
+ invalidateSize();
+ }
+
+ /**
+ * @private
+ *
+ */
+ public function invalidateGraphicElementDisplayList(element:IGraphicElement):void
+ {
+ if (element.displayObject is ISharedDisplayObject)
+ ISharedDisplayObject(element.displayObject).redrawRequested = true;
+ invalidateDisplayList();
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartLayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartLayoutBase.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartLayoutBase.as
index 0c8c5ff..21593b1 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartLayoutBase.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartLayoutBase.as
@@ -22,6 +22,7 @@ import mx.core.IFlexDisplayObject;
import mx.core.ILayoutElement;
import spark.components.itemRenderers.IItemPartRendererBase;
+import spark.core.IGraphicElement;
/** @private
* Abstract base class for laying out part renderers in a multi-part renderer.
@@ -41,11 +42,17 @@ public class ListMultiPartLayoutBase extends Object
return _target;
}
- protected function get partRendererDescriptors():Vector.<IPartRendererDescriptor>
+ protected function get partRendererDescriptors():Vector.<PartRendererDescriptorBase>
{
return target.partRendererDescriptors;
}
+ protected function get graphicElementPartRenderers():Vector.<IGraphicElement>
+ {
+ return target.graphicElementPartRenderers;
+ }
+
+
protected function get partRenderers():Vector.<IItemPartRendererBase>
{
return target.partRenderers;
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartTabbedLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartTabbedLayout.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartTabbedLayout.as
deleted file mode 100644
index f211a8c..0000000
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartTabbedLayout.as
+++ /dev/null
@@ -1,82 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package spark.components.supportClasses
-{
-import spark.components.itemRenderers.IItemPartRendererBase;
-import spark.utils.UIComponentUtils;
-
-/** @private
- * this class is reponsible for laying out grid cells in a given MobileGrid row.
- * It will make sure that cell content is aligned according to the column widths.
- */
-public class ListMultiPartTabbedLayout extends ListMultiPartLayoutBase
-{
-
- public function ListMultiPartTabbedLayout(target:ListMultiPartItemRendererBase)
- {
- super(target);
- }
-
- override public function measure():void
- {
- super.measure();
- var totalWidth:Number = 0;
- for each (var ld:IPartRendererDescriptor in partRendererDescriptors)
- {
- totalWidth += ld.scaledWidth;
- }
- target.measuredWidth = totalWidth;
- target.measuredMinWidth = 50;
- }
-
- /* vertical align middle
- * Layout algorithm: give all columns the requested sizes, and the last column the remaining width */
- override public function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
- {
-
- if (unscaledWidth == 0 && unscaledHeight == 0)
- return; // not ready
- var cellPaddingLeft:Number = target.getStyle("paddingLeft");
- var cellPaddingRight:Number = target.getStyle("paddingRight");
- var paddingTop:Number = target.getStyle("paddingTop");
- var paddingBottom:Number = target.getStyle("paddingBottom");
- var cellHeight:Number = unscaledHeight - paddingTop - paddingBottom;
-
- var desc:IPartRendererDescriptor;
- var dpr:IItemPartRendererBase;
- var remainingWidth:Number = unscaledWidth;
- var curX:Number = cellPaddingLeft;
- var curY:Number = paddingTop;
- var partWidth:Number;
- var partHeight:Number;
- var count:int = partRenderers.length - 1;
- for (var i:int = 0; i <= count; i++)
- {
- dpr = partRenderers[i];
- desc = partRendererDescriptors[i];
- partHeight = dpr.getPreferredBoundsHeight();
- partWidth = Math.max(0, i == count ? remainingWidth : desc.scaledWidth - cellPaddingLeft - cellPaddingRight);
- setElementSize(dpr, partWidth, partHeight);
- setElementPosition(dpr, curX, curY + UIComponentUtils.offsetForCenter(partHeight, cellHeight));
- curX += partWidth + cellPaddingRight + cellPaddingLeft;
- remainingWidth -= desc.scaledWidth;
- }
- }
-}
-}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
index a404bb2..9c49428 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
@@ -48,13 +48,13 @@ public class MobileGridColumn extends PartRendererDescriptorBase
private var _headerText:String = null;
private var _headerStyleName:String;
private var _sortDescending:Boolean;
- private var _sortable: Boolean = true;
+ private var _sortable:Boolean = true;
public function MobileGridColumn(target:IEventDispatcher = null)
{
super(target);
labelFunction = null;
- width = 100; // default width;
+ setWidth(100); // default width;
itemRenderer = null; // will set default ;
}
@@ -64,7 +64,7 @@ public class MobileGridColumn extends PartRendererDescriptorBase
*/
public function get headerText():String
{
- return _headerText != null ? _headerText : dataField ;
+ return _headerText != null ? _headerText : dataField;
}
public function set headerText(value:String):void
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
index 1cdfbf6..f92075b 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
@@ -60,10 +60,10 @@ public class MobileGridHeader extends ButtonBar
protected var ascIconCls:MultiDPIBitmapSource;
private var _dataGrid:MobileGrid;
- private var _columns: Array;
+ private var _columns:Array;
private var _sortIndex:int = -1;
- public function MobileGridHeader()
+ public function MobileGridHeader()
{
this.labelField = "headerText";
this.iconFunction = getIconForButton;
@@ -103,8 +103,9 @@ public class MobileGridHeader extends ButtonBar
{
event.preventDefault(); // to clear selection
var i:int = event.newIndex;
- var c: MobileGridColumn = _columns[i];
- if (_dataGrid.sortableColumns && c.sortable) {
+ var c:MobileGridColumn = _columns[i];
+ if (_dataGrid.sortableColumns && c.sortable)
+ {
var headerEvent:MobileGridHeaderEvent = new MobileGridHeaderEvent(MobileGridHeaderEvent.SORT_CHANGE, c.colNum, false, true);
// HEADER_RELEASE event is cancelable
dispatchEvent(headerEvent);
@@ -129,9 +130,9 @@ public class MobileGridHeader extends ButtonBar
var button:UIComponent = UIComponent(event.renderer);
var index:int = event.index;
var col:MobileGridColumn = MobileGridColumn(_columns[index]);
- // don't size the last button
- if (index != dataProvider.length - 1)
- button.explicitWidth = col.scaledWidth;
+ // expand the last button
+ if ((index != dataProvider.length - 1) || col.hasExplicitWidth)
+ button.explicitWidth = col.dpiScaledWidth;
else
button.percentWidth = 100;
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
index 0461d22..b2a8d3e 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
@@ -27,7 +27,7 @@ public class MobileGridRowRenderer extends ListMultiPartItemRendererBase
{
public function MobileGridRowRenderer()
{
- partRenderersLayout = new ListMultiPartTabbedLayout(this);
+ partRenderersLayout = new ListMultiPartColumnLayout(this);
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/PartRendererDescriptorBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/PartRendererDescriptorBase.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/PartRendererDescriptorBase.as
index 57a3cbb..23ce03e 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/PartRendererDescriptorBase.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/PartRendererDescriptorBase.as
@@ -34,23 +34,25 @@ import spark.utils.DensityUtil2;
/** This is the base class for GridColumn
*
*/
-public class PartRendererDescriptorBase extends EventDispatcher implements IPartRendererDescriptor
+public class PartRendererDescriptorBase extends EventDispatcher
{
private var _colNum:int;
private var _dataField:String;
private var _width:Number;
- private var _scaledWidth:Number;
+ private var _hasExplicitWidth:Boolean;
+ private var _dpiScaledWidth:Number;
private var _itemRenderer:IFactory;
private var _labelFunction:Function;
private var _styleName:String;
private var _textAlign:String;
+
public function PartRendererDescriptorBase(target:IEventDispatcher = null)
{
super(target);
_labelFunction = null;
- width = 100; // default width;
+ setWidth(100); // default width;
itemRenderer = null; // will set default ;
}
@@ -103,44 +105,25 @@ public class PartRendererDescriptorBase extends EventDispatcher implements IPart
_styleName = value;
}
- /** set the desired width of the column at the application's current DPI (or 160 if none)
- * default value is 100
- * the actual pixel width maybe higher if the runtimeDPI or application DPI are different than 160
+ /** Set the desired width for this column.
+ * <p> Width value is expressed in current applicationDPI, or at 160 DPI if applicationDPI is not set.</p>
+ * Default value is 100.
+ * Note that the last column will always expand
*
* @param value = desired width of the column at 160 DPI
*/
public function set width(value:Number):void
{
- _width = value;
- _scaledWidth = DensityUtil2.dpiScale(value, DPIClassification.DPI_160);
+ setWidth(value);
+ _hasExplicitWidth = true;
}
- /** set the desired width of the column at the application's current DPI (or 160 if none)
- * default value is 100
- * the actual pixel width maybe higher if the runtimeDPI or application DPI are different than 160
- *
- * @param value = desired width of the column at 160 DPI
- */
- public function set widthAt160DPI(value:Number):void
+ protected function setWidth(value:Number):void
{
_width = value;
- _scaledWidth = DensityUtil2.dpiScale(value, DPIClassification.DPI_160);
+ _dpiScaledWidth = DensityUtil2.dpiScale(value, DPIClassification.DPI_160);
}
- public function get scaledWidth():Number
- {
- return _scaledWidth;
- }
-
- mx_internal function get colNum():int
- {
- return _colNum;
- }
-
- mx_internal function set colNum(value:int):void
- {
- _colNum = value;
- }
public function get itemRenderer():IFactory
{
@@ -169,8 +152,10 @@ public class PartRendererDescriptorBase extends EventDispatcher implements IPart
if (pr)
{
pr.cssStyleName = _styleName;
- if (pr is IItemTextPartRenderer) {
- with( IItemTextPartRenderer(pr)){
+ if (pr is IItemTextPartRenderer)
+ {
+ with (IItemTextPartRenderer(pr))
+ {
labelField = _dataField;
labelFunction = _labelFunction;
textAlign = _textAlign;
@@ -180,5 +165,25 @@ public class PartRendererDescriptorBase extends EventDispatcher implements IPart
return pr;
}
+ mx_internal function get hasExplicitWidth():Boolean
+ {
+ return _hasExplicitWidth;
+ }
+
+ mx_internal function get dpiScaledWidth():Number
+ {
+ return _dpiScaledWidth;
+ }
+
+ mx_internal function get colNum():int
+ {
+ return _colNum;
+ }
+
+ mx_internal function set colNum(value:int):void
+ {
+ _colNum = value;
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as b/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
index 06558b7..31e1462 100644
--- a/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
+++ b/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
@@ -22,7 +22,7 @@ import flash.events.Event;
/**
* The MobileGridHeaderEvent class represents events that are dispatched when
- the user clicks on the header of a column in the DataGrid to sort it.
+ the user clicks on the header of a column in the DataGrid to sort it.
*
* @see spark.components.MobileGrid
*
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/skins/MobileGridSkin.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/skins/MobileGridSkin.as b/frameworks/projects/experimental_mobile/src/spark/skins/MobileGridSkin.as
index 20c46a0..35353f8 100644
--- a/frameworks/projects/experimental_mobile/src/spark/skins/MobileGridSkin.as
+++ b/frameworks/projects/experimental_mobile/src/spark/skins/MobileGridSkin.as
@@ -33,7 +33,6 @@ import spark.components.supportClasses.MobileGridHeader;
import spark.layouts.HorizontalAlign;
import spark.layouts.VerticalLayout;
import spark.skins.mobile.supportClasses.MobileSkin;
-import spark.utils.MultiDPIBitmapSource;
import spark.utils.MultiDPIBitmapSourceExt;
use namespace mx_internal;
@@ -73,7 +72,7 @@ public class MobileGridSkin extends MobileSkin
minWidth = 100;
break;
}
- var headerShadowSrc:MultiDPIBitmapSource = new MultiDPIBitmapSourceExt();
+ var headerShadowSrc:MultiDPIBitmapSourceExt = new MultiDPIBitmapSourceExt();
headerShadowSrc.source320dpi = headerShadowCls320;
headerShadowSrc.source160dpi = headerShadowCls160;
headerShadowCls = Class(headerShadowSrc.getSource(NaN));
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/utils/DensityUtil2.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/utils/DensityUtil2.as b/frameworks/projects/experimental_mobile/src/spark/utils/DensityUtil2.as
index 8c76e73..7f447ad 100644
--- a/frameworks/projects/experimental_mobile/src/spark/utils/DensityUtil2.as
+++ b/frameworks/projects/experimental_mobile/src/spark/utils/DensityUtil2.as
@@ -20,7 +20,6 @@ package spark.utils
{
import mx.core.FlexGlobals;
-import mx.core.mx_internal;
import mx.managers.SystemManager;
import spark.components.Application;
@@ -28,38 +27,16 @@ import spark.components.Application;
public class DensityUtil2
{
- use namespace mx_internal;
-
private static var _setApplicationDPI:Number = 0;
- /** Calculates a scale factor to be used when element authored for <code>sourceDPI</code>
- * two algorithms: <br/>
- * Application.applicationDPI has been set, which means scaling factor occurs already, so additional scaling is required, return 1
- * Application.applicationDPI has not been set, then return runTimeDPI / sourceDPI
- * examples:
- * runtimeDPI = 320 and sourceDPI = 160 and applicationDPI not set (ie=320) => 2
- * runtimeDPI = 160 and sourceDPI = 160 and applicationDPI not set (ie=160) => 1
- * runtimeDPI = 160 and sourceDPI = 160 and applicationDPI = 160 => 1
- * runtimeDPI = 320 and sourceDPI = 160 and applicationDPI = 160 => 1 (scaling occurs)
+ /** returns the actual value for a value authored for <code>sourceDPI</code>, taking into account any dpi scaling.
+ * <ul>
+ * <li> If Application.applicationDPI has been set, which means dpi scaling factor is already applied, return the original value.</li>
+ * <li> If Application.applicationDPI has not been set, then return scaled value runTimeDPI / sourceDPI </li>
+ * </li>
* @param sourceDPI
- * @return scale factor
+ * @return scaled value
*/
-
- public static function getPostDPIScale(sourceDPI:Number):Number
- {
-
- var appDPI:Number = getSetApplicationDPI();
- if (isNaN(appDPI))
- {
- // was not set,
- var runDPI:Number = FlexGlobals.topLevelApplication.runtimeDPI;
- return runDPI / sourceDPI;
- }
- else
- return 1.0; // already scaled
- }
-
-
public static function dpiScale(value:Number, sourceDPI:Number):Number
{
var appDPI:Number = getSetApplicationDPI();
@@ -70,9 +47,10 @@ public class DensityUtil2
}
else
return value; // already scaled
-
}
+ /**
+ * returns the applicationDPI that was explicitly set in top level application , or NaN if none */
private static function getSetApplicationDPI():Number
{
if (_setApplicationDPI == 0)
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/utils/MultiDPIBitmapSourceExt.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/utils/MultiDPIBitmapSourceExt.as b/frameworks/projects/experimental_mobile/src/spark/utils/MultiDPIBitmapSourceExt.as
index eb3ac03..ce17ffe 100644
--- a/frameworks/projects/experimental_mobile/src/spark/utils/MultiDPIBitmapSourceExt.as
+++ b/frameworks/projects/experimental_mobile/src/spark/utils/MultiDPIBitmapSourceExt.as
@@ -24,10 +24,28 @@ import mx.utils.DensityUtil;
public class MultiDPIBitmapSourceExt extends MultiDPIBitmapSource
{
+ /**
+ * Select one of the sourceXXXdpi properties based on the given DPI. This
+ * function handles the fallback to different sourceXXXdpi properties
+ * if the given one is null.
+ * The strategy is to try to choose the next highest
+ * property if it is not null, then return a lower property if not null, then
+ * just return null.
+ * If desiredDPI is NaN or 0, return the sourceXXXdpi for the runtime DPI .
+ *
+ * @param The desired DPI.
+ *
+ * @return One of the sourceXXXdpi properties based on the desired DPI.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Flex 4.5
+ */
override public function getSource(desiredDPI:Number):Object
{
- if (isNaN(desiredDPI))
+ if (isNaN(desiredDPI) || (desiredDPI == 0))
{
var app:Object = FlexGlobals.topLevelApplication;
var dpi:Number;
@@ -40,5 +58,8 @@ public class MultiDPIBitmapSourceExt extends MultiDPIBitmapSource
else
return super.getSource(desiredDPI);
}
+
+ //TODO mamsellem move this code to parent class, updates any callers, and remove this class
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe39973b/frameworks/projects/experimental_mobile/src/spark/utils/UIComponentUtils.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/utils/UIComponentUtils.as b/frameworks/projects/experimental_mobile/src/spark/utils/UIComponentUtils.as
index 0ecf82c..93f6f8e 100644
--- a/frameworks/projects/experimental_mobile/src/spark/utils/UIComponentUtils.as
+++ b/frameworks/projects/experimental_mobile/src/spark/utils/UIComponentUtils.as
@@ -18,40 +18,12 @@
////////////////////////////////////////////////////////////////////////////////
package spark.utils
{
-import mx.collections.IList;
import mx.core.IFlexDisplayObject;
import mx.core.ILayoutElement;
-import mx.core.UIComponent;
-
-import spark.components.IItemRendererOwner;
public class UIComponentUtils
{
- /* fast function based on char length and not on pixel length*/
- public static function computeLongestItem(listComponent:IItemRendererOwner, dataProvider:IList, max:int = 10):Object
- {
- if (!dataProvider)
- {
- return null;
- }
- max = Math.min(max, dataProvider.length);
- var maxLength:int = 0;
- var longestItem:Object;
- var item:Object;
- var itemStringLength:int;
- for (var i:int = 0; i < max; i++)
- {
- item = dataProvider.getItemAt(i);
- itemStringLength = listComponent.itemToLabel(item).length;
- if (itemStringLength >= maxLength)
- {
- maxLength = itemStringLength;
- longestItem = item;
- }
- }
- return longestItem;
- }
public static function itemToLabel(item:Object, labelField:String, labelFunction:Function, nullLabel:String = '-'):String
{
@@ -69,12 +41,6 @@ public class UIComponentUtils
}
}
- public static function clearBoundsSize(comp:UIComponent):void
- {
- comp.explicitWidth = NaN; // was set before
- comp.explicitHeight = NaN;
- comp.setLayoutBoundsSize(NaN, NaN);
- }
public static function setElementSize(element:Object, width:Number, height:Number):void
{