fix the visuals of BusyIndicator to it matches old visuals
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/e7b498e0 Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/e7b498e0 Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/e7b498e0 Branch: refs/heads/master Commit: e7b498e091a2168e01e5ccf39f18902e1b9d139d Parents: 926b44d Author: Alex Harui <[email protected]> Authored: Tue Jan 13 16:44:28 2015 -0800 Committer: Alex Harui <[email protected]> Committed: Tue Jan 13 16:44:28 2015 -0800 ---------------------------------------------------------------------- .../src/spark/skins/mobile/BusyIndicatorSkin.as | 91 ++++++++-------- .../src/spark/skins/spark/BusyIndicatorSkin.as | 109 +++++++++++++++++-- 2 files changed, 143 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e7b498e0/frameworks/projects/mobiletheme/src/spark/skins/mobile/BusyIndicatorSkin.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/mobiletheme/src/spark/skins/mobile/BusyIndicatorSkin.as b/frameworks/projects/mobiletheme/src/spark/skins/mobile/BusyIndicatorSkin.as index 130ac97..d56f6bd 100644 --- a/frameworks/projects/mobiletheme/src/spark/skins/mobile/BusyIndicatorSkin.as +++ b/frameworks/projects/mobiletheme/src/spark/skins/mobile/BusyIndicatorSkin.as @@ -60,47 +60,6 @@ package spark.skins.mobile { super(); alpha = 0.60; // default alpha - - // Set the default measured size depending on the - // applicationDPI - if (applicationDPI == DPIClassification.DPI_640) - { - measuredWidth = 104; - measuredHeight = 104; - } - else if (applicationDPI == DPIClassification.DPI_480) - { - measuredWidth = 80; - measuredHeight = 80; - } - else if (applicationDPI == DPIClassification.DPI_320) - { - measuredWidth = 52; - measuredHeight = 52; - } - else if (applicationDPI == DPIClassification.DPI_240) - { - measuredWidth = 40; - measuredHeight = 40; - } - else if (applicationDPI == DPIClassification.DPI_160) - { - measuredWidth = 26; - measuredHeight = 26; - } - else if (applicationDPI == DPIClassification.DPI_120) - { - measuredWidth = 20; - measuredHeight = 20; - } - else - { - measuredWidth = DEFAULT_MINIMUM_SIZE; - measuredHeight = DEFAULT_MINIMUM_SIZE; - } - - measuredMinWidth = DEFAULT_MINIMUM_SIZE; - measuredMinHeight = DEFAULT_MINIMUM_SIZE; } private var _hostComponent:spark.components.BusyIndicator; @@ -155,13 +114,13 @@ package spark.skins.mobile { super.styleChanged(styleProp); - var allStyles:Boolean = !styleName || styleName == "styleName"; + var allStyles:Boolean = !styleProp || styleProp == "styleName"; // Check for skin/icon changes here. // We could only throw out any skins that change, // but since dynamic re-skinning is uncommon, we'll take // the simpler approach of throwing out all skins. - if (allStyles || styleName == "rotationInterval") + if (allStyles || styleProp == "rotationInterval") { // Update the timer if the rotation interval has changed. if (isRotating()) @@ -171,7 +130,7 @@ package spark.skins.mobile } } - if (allStyles || styleName == "symbolColor") + if (allStyles || styleProp == "symbolColor") { updateSpinner(spinnerDiameter); } @@ -179,8 +138,46 @@ package spark.skins.mobile override protected function measure():void { - measuredHeight = hostComponent.height; - measuredWidth = hostComponent.width; + // Set the default measured size depending on the + // applicationDPI + if (applicationDPI == DPIClassification.DPI_640) + { + measuredWidth = 104; + measuredHeight = 104; + } + else if (applicationDPI == DPIClassification.DPI_480) + { + measuredWidth = 80; + measuredHeight = 80; + } + else if (applicationDPI == DPIClassification.DPI_320) + { + measuredWidth = 52; + measuredHeight = 52; + } + else if (applicationDPI == DPIClassification.DPI_240) + { + measuredWidth = 40; + measuredHeight = 40; + } + else if (applicationDPI == DPIClassification.DPI_160) + { + measuredWidth = 26; + measuredHeight = 26; + } + else if (applicationDPI == DPIClassification.DPI_120) + { + measuredWidth = 20; + measuredHeight = 20; + } + else + { + measuredWidth = DEFAULT_MINIMUM_SIZE; + measuredHeight = DEFAULT_MINIMUM_SIZE; + } + + measuredMinWidth = DEFAULT_MINIMUM_SIZE; + measuredMinHeight = DEFAULT_MINIMUM_SIZE; } override protected function commitCurrentState():void @@ -204,7 +201,7 @@ package spark.skins.mobile override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { - super.updateDisplayList(unscaledWidth, unscaledHeight); + //super.updateDisplayList(unscaledWidth, unscaledHeight); // If the size changed, then create a new spinner. if (oldUnscaledWidth != unscaledWidth || http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e7b498e0/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as b/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as index 41e7b87..eafe2bc 100644 --- a/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as +++ b/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as @@ -33,6 +33,11 @@ package spark.skins.spark public class BusyIndicatorSkin extends ActionScriptSkinBase { static private const DEFAULT_ROTATION_INTERVAL:Number = 30; + /** + * @private + */ + static private const DEFAULT_MINIMUM_SIZE:Number = 20; + private var busyIndicatorClass:Class; private var busyIndicator:DisplayObject; private var busyIndicatorBackground:DisplayObject; @@ -40,6 +45,16 @@ package spark.skins.spark private var rotationTimer:Timer; private var rotationInterval:Number; private var rotationSpeed:Number; + /** + * @private + */ + private var oldUnscaledHeight:Number; + + /** + * @private + */ + private var oldUnscaledWidth:Number; + /** * @private * @@ -112,23 +127,63 @@ package spark.skins.spark { //This layer stays still in the background busyIndicatorBackground = new busyIndicatorClass(); - busyIndicatorBackground.width = busyIndicatorBackground.height = busyIndicatorDiameter; + //busyIndicatorBackground.width = busyIndicatorBackground.height = busyIndicatorDiameter; addChild(busyIndicatorBackground); //This layer rotates in the foreground to give the required effect busyIndicator = new busyIndicatorClass(); busyIndicator.alpha = 0.3; - busyIndicator.width = busyIndicator.height = busyIndicatorDiameter; + //busyIndicator.width = busyIndicator.height = busyIndicatorDiameter; addChild(busyIndicator); } - override protected function measure():void - { - measuredWidth = busyIndicatorDiameter; - measuredHeight = busyIndicatorDiameter; - - measuredMinHeight = busyIndicatorDiameter; - measuredMinWidth = busyIndicatorDiameter - } + /** + * @private + */ + override protected function measure():void + { + super.measure(); + + // Set the default measured size depending on the + // applicationDPI + if (applicationDPI == DPIClassification.DPI_640) + { + measuredWidth = 104; + measuredHeight = 104; + } + else if (applicationDPI == DPIClassification.DPI_480) + { + measuredWidth = 80; + measuredHeight = 80; + } + else if (applicationDPI == DPIClassification.DPI_320) + { + measuredWidth = 52; + measuredHeight = 52; + } + else if (applicationDPI == DPIClassification.DPI_240) + { + measuredWidth = 40; + measuredHeight = 40; + } + else if (applicationDPI == DPIClassification.DPI_160) + { + measuredWidth = 26; + measuredHeight = 26; + } + else if (applicationDPI == DPIClassification.DPI_120) + { + measuredWidth = 20; + measuredHeight = 20; + } + else + { + measuredWidth = DEFAULT_MINIMUM_SIZE; + measuredHeight = DEFAULT_MINIMUM_SIZE; + } + + measuredMinWidth = DEFAULT_MINIMUM_SIZE; + measuredMinHeight = DEFAULT_MINIMUM_SIZE; + } override protected function commitCurrentState():void { @@ -164,8 +219,42 @@ package spark.skins.spark colorizeSymbol(); symbolColorChanged = false; } + // If the size changed, then create a new spinner. + if (oldUnscaledWidth != unscaledWidth || + oldUnscaledHeight != unscaledHeight) + { + var newDiameter:Number; + + newDiameter = calculateSpinnerDiameter(unscaledWidth, unscaledHeight); + busyIndicatorBackground.width = busyIndicatorBackground.height = newDiameter; + busyIndicator.width = busyIndicator.height = newDiameter; + + oldUnscaledWidth = unscaledWidth; + oldUnscaledHeight = unscaledHeight; + } } + /** + * @private + * + * Apply the rules to calculate the spinner diameter from the width + * and height. + * + * @param width new width of this component + * @param height new height of this component + * + * @return true if the spinner's diameter changes, false otherwise. + */ + private function calculateSpinnerDiameter(width:Number, height:Number):Number + { + var diameter:Number = Math.min(width, height); + diameter = Math.max(DEFAULT_MINIMUM_SIZE, diameter); + if (diameter % 2 != 0) + diameter--; + + return diameter; + } + private function colorizeSymbol():void { super.applyColorTransform(this.busyIndicator, 0x000000, symbolColor);
