http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/TextInputSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/TextInputSkin.as b/tourdeflexmobile/src/spark/skins/android4/TextInputSkin.as new file mode 100644 index 0000000..1ec2c11 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/TextInputSkin.as @@ -0,0 +1,375 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ + import flash.events.Event; + import flash.events.FocusEvent; + import flash.events.SoftKeyboardEvent; + + import mx.core.DPIClassification; + import mx.core.EventPriority; + import mx.core.mx_internal; + import mx.events.FlexEvent; + import mx.utils.Platform; + + import spark.components.TextInput; + import spark.components.supportClasses.StyleableTextField; + import spark.skins.android4.supportClasses.TextSkinBase; + + use namespace mx_internal; + + /** + * ActionScript-based skin for TextInput controls in mobile applications. + * + * @see spark.components.TextInput + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public class TextInputSkin extends TextSkinBase + { + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public function TextInputSkin() + { + super(); + + // on iOS, make adjustments for native text rendering + _isIOS = Platform.isIOS; + + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + measuredDefaultWidth = 1200; + measuredDefaultHeight = 132; + layoutBorderSize = 4; + flatheight = 9; + break; + } + case DPIClassification.DPI_480: + { + + measuredDefaultWidth = 880; + measuredDefaultHeight = 100; + layoutBorderSize = 3; + flatheight = 7; + break; + } + case DPIClassification.DPI_320: + { + measuredDefaultWidth = 600; + measuredDefaultHeight = 66; + layoutBorderSize = 2; + flatheight = 6; + break; + } + case DPIClassification.DPI_240: + { + measuredDefaultWidth = 440; + measuredDefaultHeight = 50; + layoutBorderSize = 2; + flatheight = 5; + break; + } + case DPIClassification.DPI_120: + { + measuredDefaultWidth = 220; + measuredDefaultHeight = 25; + layoutBorderSize = 1; + flatheight = 2; + break; + } + default: + { + measuredDefaultWidth = 300; + measuredDefaultHeight = 33; + layoutBorderSize = 1; + flatheight = 3; + break; + } + } + addEventListener(FocusEvent.FOCUS_IN, focusChangeHandler); + addEventListener(FocusEvent.FOCUS_OUT, focusChangeHandler); + } + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + protected var isFocused:Boolean = false; + + protected var flatheight:uint; + + /** + * @copy spark.skins.spark.ApplicationSkin#hostComponent + */ + public var hostComponent:TextInput; // SkinnableComponent will populate + + /** + * @private + */ + private var _isIOS:Boolean; + + /** + * @private + */ + private var _isEditing:Boolean; + + /** + * @private + */ + override protected function createChildren():void + { + super.createChildren(); + + textDisplay.addEventListener("editableChanged", editableChangedHandler); + textDisplay.addEventListener(FlexEvent.VALUE_COMMIT, valueCommitHandler); + + // remove hit area improvements on iOS when editing + if (_isIOS) + { + textDisplay.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, textDisplay_softKeyboardActivatingHandler, false, EventPriority.DEFAULT_HANDLER); + textDisplay.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, textDisplay_softKeyboardDeactivateHandler); + } + } + + /** + * @private + */ + override protected function measure():void + { + super.measure(); + + var paddingLeft:Number = getStyle("paddingLeft"); + var paddingRight:Number = getStyle("paddingRight"); + var paddingTop:Number = getStyle("paddingTop"); + var paddingBottom:Number = getStyle("paddingBottom"); + var textHeight:Number = getStyle("fontSize") as Number; + + if (textDisplay) + { + // temporarily change text for measurement + var oldText:String = textDisplay.text; + + // commit styles so we can get a valid textHeight + textDisplay.text = "Wj"; + textDisplay.commitStyles(); + + textHeight = textDisplay.measuredTextSize.y; + textDisplay.text = oldText; + } + + // width is based on maxChars (if set) + if (hostComponent && hostComponent.maxChars) + { + // Grab the fontSize and subtract 2 as the pixel value for each character. + // This is just an approximation, but it appears to be a reasonable one + // for most input and most font. + var characterWidth:int = Math.max(1, (getStyle("fontSize") - 2)); + measuredWidth = (characterWidth * hostComponent.maxChars) + + paddingLeft + paddingRight + StyleableTextField.TEXT_WIDTH_PADDING; + } + + measuredHeight = paddingTop + textHeight + paddingBottom; + } + + /** + * @private + */ + override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void + { + super.layoutContents(unscaledWidth, unscaledHeight); + + // position & size border + if (border) + { + setElementSize(border, unscaledWidth, unscaledHeight); + setElementPosition(border, 0, 0); + } + + // position & size the text + var paddingLeft:Number = getStyle("paddingLeft"); + var paddingRight:Number = getStyle("paddingRight"); + var paddingTop:Number = getStyle("paddingTop"); + var paddingBottom:Number = getStyle("paddingBottom"); + + var unscaledTextWidth:Number = unscaledWidth - paddingLeft - paddingRight; + var unscaledTextHeight:Number = unscaledHeight - paddingTop - paddingBottom; + + // default vertical positioning is centered + var textHeight:Number = getElementPreferredHeight(textDisplay); + var textY:Number = Math.round(0.5 * (unscaledTextHeight - textHeight)) + paddingTop; + + // On iOS the TextField top and bottom edges are bounded by the padding. + // On all other platforms, the height of the textDisplay is + // textHeight + paddingBottom to increase hitArea on bottom. + // Note: We don't move the Y position upwards because TextField + // has way to set vertical positioning. + // Note: iOS is a special case due to the clear button provided by the + // native text control used while editing. + var adjustedTextHeight:Number = (_isIOS && _isEditing) ? textHeight : textHeight + paddingBottom; + + if (textDisplay) + { + // We're going to do a few tricks to try to increase the size of our hitArea to make it + // easier for users to select text or put the caret in a certain spot. To do that, + // rather than set textDisplay.x=paddingLeft, we are going to set + // textDisplay.leftMargin = paddingLeft. In addition, we're going to size the height + // of the textDisplay larger than just the size of the text inside to increase the hitArea + // on the bottom. We'll also assign textDisplay.rightMargin = paddingRight to increase the + // the hitArea on the right. Unfortunately, there's no way to increase the hitArea on the top + // just yet, but these three tricks definitely help out with regards to user experience. + // See http://bugs.adobe.com/jira/browse/SDK-29406 and http://bugs.adobe.com/jira/browse/SDK-29405 + + // set leftMargin, rightMargin to increase the hitArea. Need to set it before calling commitStyles(). + var marginChanged:Boolean = ((textDisplay.leftMargin != paddingLeft) || + (textDisplay.rightMargin != paddingRight)); + + textDisplay.leftMargin = paddingLeft; + textDisplay.rightMargin = paddingRight; + + // need to force a styleChanged() after setting leftMargin, rightMargin if they + // changed values. Then we can validate the styles through commitStyles() + if (marginChanged) + textDisplay.styleChanged(null); + textDisplay.commitStyles(); + + setElementSize(textDisplay, unscaledWidth, adjustedTextHeight); + + // set x=0 since we're using textDisplay.leftMargin = paddingLeft + setElementPosition(textDisplay, 0, textY); + } + + if (promptDisplay) + { + promptDisplay.commitStyles(); + setElementSize(promptDisplay, unscaledTextWidth, adjustedTextHeight); + setElementPosition(promptDisplay, paddingLeft, textY); + } + } + + override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void + { + super.drawBackground(unscaledWidth, unscaledHeight); + + var contentBackgroundColor:uint = getStyle("contentBackgroundColor"); + var contentBackgroundAlpha:Number = getStyle("contentBackgroundAlpha"); + //change border color and thickness when in focus + var borderColor:uint = isFocused ? getStyle("focusColor") : getStyle("borderColor"); + var selectWidth:uint = isFocused ? layoutBorderSize + 1 : layoutBorderSize; + if (isNaN(contentBackgroundAlpha)) + { + contentBackgroundAlpha = 1; + } + if (getStyle("contentBackgroundBorder") == "flat") + { + var halfGap:int = flatheight * 2; + //background + graphics.beginFill(contentBackgroundColor, contentBackgroundAlpha); + graphics.drawRect(0, 0, unscaledWidth, unscaledHeight - flatheight); + graphics.endFill(); + //begin flat border + graphics.beginFill(borderColor, 1); + //left half border + graphics.drawRect(0, unscaledHeight - halfGap, selectWidth, flatheight ); + //bottom border + graphics.drawRect(0, unscaledHeight - flatheight, unscaledWidth, selectWidth); + //right border + graphics.drawRect(unscaledWidth - selectWidth, unscaledHeight - halfGap, selectWidth, flatheight); + graphics.endFill(); + } + else if (getStyle("contentBackgroundBorder") == "rectangle") + { + var borderWidth:uint = layoutBorderSize * 2; + //rectangle border and background + graphics.lineStyle(selectWidth, borderColor, 1); + graphics.beginFill(contentBackgroundColor, contentBackgroundAlpha); + graphics.drawRect(layoutBorderSize, layoutBorderSize, unscaledWidth - borderWidth, unscaledHeight - borderWidth); + graphics.endFill(); + } + } + + /** + * @private + */ + private function editableChangedHandler(event:Event):void + { + invalidateDisplayList(); + } + + /** + * @private + * The text changed in some way. + * + * Dynamic fields (ie !editable) with no text measure with width=0 and height=0. + * If the text changed, need to remeasure the text to get the correct height so it + * will be laid out correctly. + */ + private function valueCommitHandler(event:Event):void + { + if (textDisplay && !textDisplay.editable) + invalidateDisplayList(); + } + + /** + * @private + */ + private function textDisplay_softKeyboardActivatingHandler(event:SoftKeyboardEvent):void + { + if (event.isDefaultPrevented()) + return; + + _isEditing = true; + invalidateDisplayList(); + } + + /** + * @private + */ + private function textDisplay_softKeyboardDeactivateHandler(event:SoftKeyboardEvent):void + { + _isEditing = false; + invalidateDisplayList(); + } + + private function focusChangeHandler(event:FocusEvent):void + { + isFocused = event.type == FocusEvent.FOCUS_IN; + invalidateDisplayList(); + } + } +}
http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/ToggleSwitchSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/ToggleSwitchSkin.as b/tourdeflexmobile/src/spark/skins/android4/ToggleSwitchSkin.as new file mode 100644 index 0000000..7f50554 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/ToggleSwitchSkin.as @@ -0,0 +1,506 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ + + import flash.display.BlendMode; + import flash.events.Event; + + import mx.core.DPIClassification; + import mx.core.IVisualElement; + import mx.core.UIComponent; + + import spark.components.ToggleSwitch; + import spark.components.supportClasses.StyleableTextField; + import spark.core.SpriteVisualElement; + import spark.skins.android4.assets.ToggleSwitchBackground; + import spark.skins.android4.assets.ToggleSwitchThumb_off; + import spark.skins.mobile.supportClasses.MobileSkin; + + + /** + * ActionScript-based Android 4.x specific skin for the ToggleSwitch control. + * This class is responsible for most of the + * graphics drawing, with additional fxg assets. + * + * + * @langversion 3.0 + * @playerversion AIR 3 + * @productversion Flex 4.6 + * + * @see spark.components.ToggleSwitch + */ + public class ToggleSwitchSkin extends MobileSkin + { + //---------------------------------------------------------------------------------------------- + // + // Skin parts + // + //---------------------------------------------------------------------------------------------- + + /** + * The thumb skin part. + * + * @langversion 3.0 + * @playerversion AIR 3 + * @productversion Flex 4.6 + */ + public var thumb:IVisualElement; + /** + * The track skin part. + * + * @langversion 3.0 + * @playerversion AIR 3 + * @productversion Flex 4.6 + */ + public var track:IVisualElement; + + //---------------------------------- + // hostComponent + //---------------------------------- + + private var _hostComponent:ToggleSwitch; + public var selectedLabelDisplay:LabelDisplayComponent; + + /** + * @copy spark.skins.spark.ApplicationSkin#hostComponent + */ + public function get hostComponent():ToggleSwitch + { + return _hostComponent; + } + + public function set hostComponent(value:ToggleSwitch):void + { + if (_hostComponent) + _hostComponent.removeEventListener("thumbPositionChanged", thumbPositionChanged_handler); + _hostComponent = value; + if (_hostComponent) + _hostComponent.addEventListener("thumbPositionChanged", thumbPositionChanged_handler); + } + + //---------------------------------- + // selectedLabel + //---------------------------------- + + private var _selectedLabel:String; + /** + * The text of the label showing when the component is selected. + * Subclasses can set or override this property to customize the selected label. + * + * @langversion 3.0 + * @playerversion AIR 3 + * @productversion Flex 4.6 + */ + protected function get selectedLabel():String + { + return _selectedLabel; + } + + protected function set selectedLabel(value:String):void + { + _selectedLabel = value; + } + + //---------------------------------- + // unselectedLabel + //---------------------------------- + + private var _unselectedLabel:String; + /** + * The text of the label showing when the component is not selected. + * Subclasses can set or override this property to customize the unselected label. + * + * @langversion 3.0 + * @playerversion AIR 3 + * @productversion Flex 4.6 + */ + protected function get unselectedLabel():String + { + return _unselectedLabel; + } + + protected function set unselectedLabel(value:String):void + { + _unselectedLabel = value; + } + + + /** + * The contents inside the skin, not including the outline + * stroke + */ + private var contents:UIComponent; + private var switchTrack:Class; + private var switchOff:Class; + private var switchOn:Class; + protected var trackWidth:Number; + protected var trackHeight:Number; + protected var layoutThumbWidth:Number; + protected var layoutThumbHeight:Number; + private var thumbOn:IVisualElement; + private var thumbOff:IVisualElement; + + public function ToggleSwitchSkin() + { + super(); + + switchTrack = spark.skins.android4.assets.ToggleSwitchBackground; + switchOn = spark.skins.android4.assets.ToggleSwitchThumb_on; + switchOff = spark.skins.android4.assets.ToggleSwitchThumb_off; + + switch(applicationDPI) + { + case DPIClassification.DPI_640: + { + layoutThumbWidth = 188; + layoutThumbHeight = 96; + trackWidth = 388; + trackHeight = 96; + break; + } + case DPIClassification.DPI_480: + { + layoutThumbWidth = 140; + layoutThumbHeight = 72; + trackWidth = 291; + trackHeight = 72; + break; + } + case DPIClassification.DPI_320: + { + layoutThumbWidth = 94; + layoutThumbHeight = 48; + trackWidth = 194; + trackHeight = 48; + break; + } + case DPIClassification.DPI_240: + { + layoutThumbWidth = 70; + layoutThumbHeight = 36; + trackWidth = 146; + trackHeight = 36; + break; + } + case DPIClassification.DPI_120: + { + layoutThumbWidth = 35; + layoutThumbHeight = 18; + trackWidth = 73; + trackHeight = 18; + break; + } + default: + { + layoutThumbWidth = 47; + layoutThumbHeight = 24; + trackWidth = 97; + trackHeight = 24; + break; + } + } + + selectedLabel = resourceManager.getString("components","toggleSwitchSelectedLabel"); + unselectedLabel = resourceManager.getString("components","toggleSwitchUnselectedLabel"); + } + + override protected function createChildren():void + { + super.createChildren(); + contents = new UIComponent(); + contents.blendMode = BlendMode.LAYER; + addChild(contents); + drawTrack(); + drawThumbs(); + drawLabel(); + } + + override protected function measure():void + { + // The skin must be at least as large as the thumb + measuredMinWidth = layoutThumbWidth; + measuredMinHeight = layoutThumbHeight; + + // The preferred size will display all label text + var labelWidth:Number = getElementPreferredWidth(selectedLabelDisplay); + measuredWidth = layoutThumbWidth + labelWidth; + measuredHeight = layoutThumbHeight; + } + + override protected function commitCurrentState():void + { + toggleSelectionState(); + layoutThumbs(); + layoutLabel(); + } + + //The label is called selectedLabelDisplay because the hostComponent expects it + protected function drawLabel():void + { + selectedLabelDisplay = new LabelDisplayComponent(); + selectedLabelDisplay.id = "selectedLabelDisplay"; + selectedLabelDisplay.text = selectedLabel; + setElementSize(selectedLabelDisplay,thumb.width,thumb.height); + contents.addChild(selectedLabelDisplay); + } + + //Draw the track behind everything else + protected function drawTrack():void + { + if(track == null) + { + track = new switchTrack(); + track.width = trackWidth; + track.height = trackHeight; + contents.addChildAt(SpriteVisualElement(track),0); + } + } + + //Draw both thumbs. Set skinpart thumb to be thumbOff because default state of the switch is OFF + protected function drawThumbs():void + { + drawThumbOff(); + drawThumbOn(); + if(thumb == null) + { + thumb = thumbOff; + } + } + + //Thumb ON the right side; Thumb OFF is on the left side + protected function layoutThumbs():void + { + setElementPosition(thumbOn,trackWidth/2,0); + setElementPosition(thumbOff,0,0); + } + + //Label display sould be at the same location as the thumb + protected function layoutLabel():void + { + if(selectedLabelDisplay != null) + { + if(currentState.indexOf("AndSelected") != -1) + { + setElementPosition(selectedLabelDisplay,trackWidth/2,0); + } + else + { + setElementPosition(selectedLabelDisplay,0,0); + } + } + } + + //Depending on current state, set skinpart thumb accordingly + protected function toggleSelectionState():void + { + if(currentState.indexOf("AndSelected") != -1) + { + thumbOn.visible = true; + thumbOff.visible = false; + thumb = thumbOn; + selectedLabelDisplay.text = selectedLabel; + } + else + { + thumbOff.visible = true; + thumbOn.visible = false; + thumb = thumbOff; + selectedLabelDisplay.text = unselectedLabel; + } + } + + protected function drawThumbOn():void + { + thumbOn = new switchOn(); + thumbOn.width = layoutThumbWidth; + thumbOn.height = layoutThumbHeight; + contents.addChildAt(SpriteVisualElement(thumbOn),1); + } + + protected function drawThumbOff():void + { + thumbOff = new switchOff(); + thumbOff.width = layoutThumbWidth; + thumbOff.height = layoutThumbHeight; + contents.addChildAt(SpriteVisualElement(thumbOff),1); + } + + //Hostcomponent dispatches this event whenever the thumb position changes + protected function thumbPositionChanged_handler(event:Event):void + { + moveSlidingContent(); + } + + //Move the current thumb and label along with the animating content + protected function moveSlidingContent():void + { + if (!hostComponent) + return; + var x:Number = (track.getLayoutBoundsWidth() - thumb.getLayoutBoundsWidth()) * + hostComponent.thumbPosition + track.getLayoutBoundsX(); + var y:Number = thumb.getLayoutBoundsY(); + setElementPosition(thumb, x, y); + setElementPosition(selectedLabelDisplay, x, y); + } + } +} + + +import flash.events.Event; + +import mx.core.UIComponent; +import mx.core.mx_internal; +import mx.events.FlexEvent; + +import spark.components.supportClasses.StyleableTextField; +import spark.core.IDisplayText; + +use namespace mx_internal; + +/** + * @private + * Component combining two labels to create the effect of text and its drop + * shadow. The component can be used with advanced style selectors and the + * styles "color", "textShadowColor", and "textShadowAlpha". Based off of + * ActionBar.TitleDisplayComponent. These two should eventually be factored. + */ +class LabelDisplayComponent extends UIComponent implements IDisplayText +{ + public var shadowYOffset:Number = 0; + private var labelChanged:Boolean = false; + private var labelDisplay:StyleableTextField; + private var labelDisplayShadow:StyleableTextField; + private var _text:String; + + public function LabelDisplayComponent() + { + super(); + _text = ""; + } + + override public function get baselinePosition():Number + { + return labelDisplay.baselinePosition; + } + + override protected function createChildren():void + { + super.createChildren(); + + labelDisplay = StyleableTextField(createInFontContext(StyleableTextField)); + labelDisplay.styleName = this; + labelDisplay.editable = false; + labelDisplay.selectable = false; + labelDisplay.multiline = false; + labelDisplay.wordWrap = false; + labelDisplay.addEventListener(FlexEvent.VALUE_COMMIT, + labelDisplay_valueCommitHandler); + + labelDisplayShadow = StyleableTextField(createInFontContext(StyleableTextField)); + labelDisplayShadow.styleName = this; + labelDisplayShadow.colorName = "textShadowColor"; + labelDisplayShadow.editable = false; + labelDisplayShadow.selectable = false; + labelDisplayShadow.multiline = false; + labelDisplayShadow.wordWrap = false; + + addChild(labelDisplayShadow); + addChild(labelDisplay); + } + + override protected function commitProperties():void + { + super.commitProperties(); + + if (labelChanged) + { + labelDisplay.text = text; + invalidateSize(); + invalidateDisplayList(); + labelChanged = false; + } + } + + override protected function measure():void + { + if (labelDisplay.isTruncated) + labelDisplay.text = text; + labelDisplay.commitStyles(); + measuredWidth = labelDisplay.getPreferredBoundsWidth(); + measuredHeight = labelDisplay.getPreferredBoundsHeight(); + } + + override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void + { + if (labelDisplay.isTruncated) + labelDisplay.text = text; + labelDisplay.commitStyles(); + + var labelHeight:Number = labelDisplay.getPreferredBoundsHeight(); + var labelY:Number = (unscaledHeight - labelHeight) / 2; + + var labelWidth:Number = Math.min(unscaledWidth, labelDisplay.getPreferredBoundsWidth()); + var labelX:Number = (unscaledWidth - labelWidth) / 2; + + labelDisplay.setLayoutBoundsSize(labelWidth, labelHeight); + labelDisplay.setLayoutBoundsPosition(labelX, labelY); + + labelDisplay.truncateToFit(); + + labelDisplayShadow.commitStyles(); + labelDisplayShadow.setLayoutBoundsSize(labelWidth, labelHeight); + labelDisplayShadow.setLayoutBoundsPosition(labelX, labelY + shadowYOffset); + + labelDisplayShadow.alpha = getStyle("textShadowAlpha"); + + // unless the label was truncated, labelDisplayShadow.text was set in + // the value commit handler + if (labelDisplay.isTruncated) + labelDisplayShadow.text = labelDisplay.text; + } + + private function labelDisplay_valueCommitHandler(event:Event):void + { + labelDisplayShadow.text = labelDisplay.text; + } + + public function get text():String + { + return _text; + } + + public function set text(value:String):void + { + _text = value; + labelChanged = true; + invalidateProperties(); + } + + public function get isTruncated():Boolean + { + return labelDisplay.isTruncated; + } + + public function showShadow(value:Boolean):void + { + labelDisplayShadow.visible = value; + } +} http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/TransparentActionButtonSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/TransparentActionButtonSkin.as b/tourdeflexmobile/src/spark/skins/android4/TransparentActionButtonSkin.as new file mode 100644 index 0000000..a82664e --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/TransparentActionButtonSkin.as @@ -0,0 +1,108 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ +import flash.display.DisplayObject; +import flash.display.Graphics; + +import mx.core.DPIClassification; +import mx.core.mx_internal; + +import spark.skins.android4.assets.TransparentActionButton_down; +import spark.skins.android4.assets.TransparentActionButton_up; +import spark.skins.mobile.supportClasses.ActionBarButtonSkinBase; +import spark.skins.mobile.supportClasses.MobileSkin; +import spark.skins.mobile320.assets.TransparentActionButton_down; +import spark.skins.mobile320.assets.TransparentActionButton_up; +import spark.skins.mobile480.assets.TransparentActionButton_down; +import spark.skins.mobile480.assets.TransparentActionButton_up; +import spark.skins.mobile640.assets.TransparentActionButton_down; +import spark.skins.mobile640.assets.TransparentActionButton_up; + +use namespace mx_internal; + +/** + * The default skin class for buttons in the action area of the Spark ActionBar component + * in mobile applications. + * + * @langversion 3.0 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ +public class TransparentActionButtonSkin extends ActionBarButtonSkinBase +{ + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public function TransparentActionButtonSkin() + { + super(); + + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + upBorderSkin = spark.skins.mobile640.assets.TransparentActionButton_up; + downBorderSkin = spark.skins.mobile640.assets.TransparentActionButton_down; + + break; + } + case DPIClassification.DPI_480: + { + upBorderSkin = spark.skins.mobile480.assets.TransparentActionButton_up; + downBorderSkin = spark.skins.mobile480.assets.TransparentActionButton_down; + + break; + } + case DPIClassification.DPI_320: + { + upBorderSkin = spark.skins.mobile320.assets.TransparentActionButton_up; + downBorderSkin = spark.skins.mobile320.assets.TransparentActionButton_down; + + break; + } + default: + { + upBorderSkin = spark.skins.android4.assets.TransparentActionButton_up; + downBorderSkin = spark.skins.android4.assets.TransparentActionButton_down; + + break; + } + } + } + + override mx_internal function layoutBorder(unscaledWidth:Number, unscaledHeight:Number):void + { + // don't call super, don't layout twice + // leading vertical separator is outside the left bounds of the button + setElementSize(border, unscaledWidth, unscaledHeight); + setElementPosition(border, 0, 0); + } +} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/TransparentNavigationButtonSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/TransparentNavigationButtonSkin.as b/tourdeflexmobile/src/spark/skins/android4/TransparentNavigationButtonSkin.as new file mode 100644 index 0000000..6b31e22 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/TransparentNavigationButtonSkin.as @@ -0,0 +1,109 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ +import flash.display.DisplayObject; +import flash.display.Graphics; + +import mx.core.DPIClassification; +import mx.core.mx_internal; + +import spark.skins.android4.assets.TransparentNavigationButton_down; +import spark.skins.android4.assets.TransparentNavigationButton_up; +import spark.skins.mobile.supportClasses.ActionBarButtonSkinBase; +import spark.skins.mobile.supportClasses.MobileSkin; +//import spark.skins.mobile320.assets.TransparentNavigationButton_down; +//import spark.skins.mobile320.assets.TransparentNavigationButton_up; +//import spark.skins.mobile480.assets.TransparentNavigationButton_down; +//import spark.skins.mobile480.assets.TransparentNavigationButton_up; +//import spark.skins.mobile640.assets.TransparentNavigationButton_down; +//import spark.skins.mobile640.assets.TransparentNavigationButton_up; + +use namespace mx_internal; + +/** + * The default skin class for buttons in the navigation area of the Spark ActionBar component + * in mobile applications. + * + * @langversion 3.0 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ +public class TransparentNavigationButtonSkin extends ActionBarButtonSkinBase +{ + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + * + */ + public function TransparentNavigationButtonSkin() + { + super(); + + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + // upBorderSkin = spark.skins.mobile640.assets.TransparentActionButton_up; + // downBorderSkin = spark.skins.mobile640.assets.TransparentActionButton_down; + + break; + } + case DPIClassification.DPI_480: + { + // upBorderSkin = spark.skins.mobile480.assets.TransparentActionButton_up; + // downBorderSkin = spark.skins.mobile480.assets.TransparentActionButton_down; + + break; + } + case DPIClassification.DPI_320: + { + // upBorderSkin = spark.skins.mobile320.assets.TransparentNavigationButton_up; + // downBorderSkin = spark.skins.mobile320.assets.TransparentNavigationButton_down; + + break; + } + default: + { + upBorderSkin = spark.skins.android4.assets.TransparentNavigationButton_up; + downBorderSkin = spark.skins.android4.assets.TransparentNavigationButton_down; + + break; + } + } + } + + override mx_internal function layoutBorder(unscaledWidth:Number, unscaledHeight:Number):void + { + // trailing vertical separator is outside the right bounds of the button + setElementSize(border, unscaledWidth, unscaledHeight); + setElementPosition(border, 0, 0); + } +} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/VScrollBarSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/VScrollBarSkin.as b/tourdeflexmobile/src/spark/skins/android4/VScrollBarSkin.as new file mode 100644 index 0000000..10312c5 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/VScrollBarSkin.as @@ -0,0 +1,207 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ + + import mx.core.DPIClassification; + import mx.core.mx_internal; + + import spark.components.Button; + import spark.components.VScrollBar; + import spark.skins.mobile.supportClasses.MobileSkin; + + use namespace mx_internal; + + /** + * ActionScript-based skin for VScrollBar components in mobile applications. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public class VScrollBarSkin extends MobileSkin + { + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + * + */ + public function VScrollBarSkin() + { + super(); + + minHeight = 20; + thumbSkinClass = VScrollBarThumbSkin; + var paddingRight:int; + var paddingVertical:int; + + // Depending on density set our measured width + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + minWidth = 24; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_640DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_640DPI; + break; + } + case DPIClassification.DPI_480: + { + minWidth = 18; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_480DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_480DPI; + break; + } + case DPIClassification.DPI_320: + { + minWidth = 12; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_320DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_320DPI; + break; + } + case DPIClassification.DPI_240: + { + minWidth = 9; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_240DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_240DPI; + break; + } + case DPIClassification.DPI_120: + { + minWidth = 9; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_120DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_120DPI; + break; + } + default: + { + // default DPI_160 + minWidth = 6; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_DEFAULTDPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_DEFAULTDPI; + break; + } + } + + // The minimum height is set such that, at it's smallest size, the thumb appears + // as high as it is wide. + minThumbHeight = (minWidth - paddingRight) + (paddingVertical * 2); + } + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + + /** + * @copy spark.skins.spark.ApplicationSkin#hostComponent + */ + public var hostComponent:VScrollBar; + + /** + * Minimum height for the thumb + */ + protected var minThumbHeight:Number; + + /** + * Skin to use for the thumb Button skin part + */ + protected var thumbSkinClass:Class; + + //-------------------------------------------------------------------------- + // + // Skin parts + // + //-------------------------------------------------------------------------- + /** + * VScrollbar track skin part + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public var track:Button; + + /** + * VScrollbar thumb skin part + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public var thumb:Button; + + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + /** + * @private + */ + override protected function createChildren():void + { + // Create our skin parts if necessary: track and thumb. + if (!track) + { + // We don't want a visible track so we set the skin to MobileSkin + track = new Button(); + track.setStyle("skinClass", spark.skins.mobile.supportClasses.MobileSkin); + track.width = minWidth; + track.height = minHeight; + addChild(track); + } + if (!thumb) + { + thumb = new Button(); + thumb.minHeight = minThumbHeight; + thumb.setStyle("skinClass", thumbSkinClass); + thumb.width = minWidth; + thumb.height = minWidth; + addChild(thumb); + } + } + + /** + * @private + */ + override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void + { + super.layoutContents(unscaledWidth, unscaledHeight); + + setElementSize(track, unscaledWidth, unscaledHeight); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/VScrollBarThumbSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/VScrollBarThumbSkin.as b/tourdeflexmobile/src/spark/skins/android4/VScrollBarThumbSkin.as new file mode 100644 index 0000000..d9a3804 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/VScrollBarThumbSkin.as @@ -0,0 +1,178 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ + + import flash.display.CapsStyle; + import flash.display.JointStyle; + import flash.display.LineScaleMode; + + import mx.core.DPIClassification; + import mx.core.mx_internal; + use namespace mx_internal; + + import spark.components.Button; + import spark.skins.mobile.supportClasses.MobileSkin; + + /** + * ActionScript-based skin for the VScrollBar thumb skin part in mobile applications. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public class VScrollBarThumbSkin extends MobileSkin + { + //-------------------------------------------------------------------------- + // + // Class constants + // + //-------------------------------------------------------------------------- + + // These constants are also accessed from VScrollBarSkin + mx_internal static const PADDING_RIGHT_640DPI:int = 10; + mx_internal static const PADDING_VERTICAL_640DPI:int = 8; + mx_internal static const PADDING_RIGHT_480DPI:int = 8; + mx_internal static const PADDING_VERTICAL_480DPI:int = 6; + mx_internal static const PADDING_RIGHT_320DPI:int = 5; + mx_internal static const PADDING_VERTICAL_320DPI:int = 4; + mx_internal static const PADDING_RIGHT_240DPI:int = 4; + mx_internal static const PADDING_VERTICAL_240DPI:int = 3; + mx_internal static const PADDING_RIGHT_120DPI:int = 2; + mx_internal static const PADDING_VERTICAL_120DPI:int = 1; + mx_internal static const PADDING_RIGHT_DEFAULTDPI:int = 3; + mx_internal static const PADDING_VERTICAL_DEFAULTDPI:int = 2; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + * + */ + public function VScrollBarThumbSkin() + { + super(); + + // Depending on density set padding + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + minWidth = 19; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_640DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_640DPI; + break; + } + case DPIClassification.DPI_480: + { + minWidth = 19; + paddingRight = VScrollBarThumbSkin.PADDING_RIGHT_480DPI; + paddingVertical = VScrollBarThumbSkin.PADDING_VERTICAL_480DPI; + break; + } + case DPIClassification.DPI_320: + { + paddingRight = PADDING_RIGHT_320DPI; + paddingVertical = PADDING_VERTICAL_320DPI; + break; + } + case DPIClassification.DPI_240: + { + paddingRight = PADDING_RIGHT_240DPI; + paddingVertical = PADDING_VERTICAL_240DPI; + break; + } + default: + { + paddingRight = PADDING_RIGHT_DEFAULTDPI; + paddingVertical = PADDING_VERTICAL_DEFAULTDPI; + break; + } + } + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + /** + * @copy spark.skins.spark.ApplicationSkin#hostComponent + */ + public var hostComponent:Button; + + //-------------------------------------------------------------------------- + // + // Variables + // + //-------------------------------------------------------------------------- + /** + * Padding from the right + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + protected var paddingRight:int; + + /** + * Vertical padding from top and bottom + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + protected var paddingVertical:int; + + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + /** + * @protected + */ + override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void + { + super.drawBackground(unscaledWidth, unscaledHeight); + + var thumbWidth:Number = unscaledWidth - paddingRight; + + graphics.beginFill(getStyle("thumbColor"), 1); + graphics.drawRect(0.5, paddingVertical + 0.5,thumbWidth, unscaledHeight - 2 * paddingVertical); + + graphics.endFill(); + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/ViewMenuItemSkin.as ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/ViewMenuItemSkin.as b/tourdeflexmobile/src/spark/skins/android4/ViewMenuItemSkin.as new file mode 100644 index 0000000..ae9a68e --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/ViewMenuItemSkin.as @@ -0,0 +1,238 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.skins.android4 +{ + import flash.display.GradientType; + import flash.display.Graphics; + + import mx.core.DPIClassification; + import mx.core.mx_internal; + + import spark.components.IconPlacement; + import spark.skins.mobile.assets.ViewMenuItem_down; + import spark.skins.mobile.assets.ViewMenuItem_showsCaret; + import spark.skins.mobile.assets.ViewMenuItem_up; + import spark.skins.mobile.supportClasses.ButtonSkinBase; + import spark.skins.mobile120.assets.ViewMenuItem_down; + import spark.skins.mobile120.assets.ViewMenuItem_showsCaret; + import spark.skins.mobile120.assets.ViewMenuItem_up; + import spark.skins.mobile320.assets.ViewMenuItem_down; + import spark.skins.mobile320.assets.ViewMenuItem_showsCaret; + import spark.skins.mobile320.assets.ViewMenuItem_up; +// import spark.skins.mobile480.assets.ViewMenuItem_down; + //import spark.skins.mobile480.assets.ViewMenuItem_showsCaret; + //import spark.skins.mobile480.assets.ViewMenuItem_up; + import spark.skins.mobile640.assets.ViewMenuItem_down; + import spark.skins.mobile640.assets.ViewMenuItem_showsCaret; + import spark.skins.mobile640.assets.ViewMenuItem_up; + + + use namespace mx_internal; + + /** + * Default skin for ViewMenuItem. Supports a label, icon and iconPlacement and draws a background. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public class ViewMenuItemSkin extends ButtonSkin + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + */ + public function ViewMenuItemSkin() + { + super(); + + switch (applicationDPI) + { + case DPIClassification.DPI_640: + { + + upBorderSkin = spark.skins.mobile640.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile640.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile640.assets.ViewMenuItem_showsCaret; + + layoutGap = 24; + layoutPaddingLeft = 24; + layoutPaddingRight = 24; + layoutPaddingTop = 24; + layoutPaddingBottom = 24; + layoutBorderSize = 3; + + break; + } + case DPIClassification.DPI_480: + { + // Note provisional may need changes + upBorderSkin = spark.skins.mobile.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile.assets.ViewMenuItem_showsCaret; + + layoutGap = 16; + layoutPaddingLeft = 16; + layoutPaddingRight = 16; + layoutPaddingTop = 16; + layoutPaddingBottom = 16; + layoutBorderSize = 2; + + break; + + } + case DPIClassification.DPI_320: + { + + upBorderSkin = spark.skins.mobile320.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile320.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile320.assets.ViewMenuItem_showsCaret; + + layoutGap = 12; + layoutPaddingLeft = 12; + layoutPaddingRight = 12; + layoutPaddingTop = 12; + layoutPaddingBottom = 12; + layoutBorderSize = 2; + + + break; + } + case DPIClassification.DPI_240: + { + upBorderSkin = spark.skins.mobile.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile.assets.ViewMenuItem_showsCaret; + + layoutGap = 8; + layoutPaddingLeft = 8; + layoutPaddingRight = 8; + layoutPaddingTop = 8; + layoutPaddingBottom = 8; + layoutBorderSize = 1; + + break; + + } + case DPIClassification.DPI_120: + { + upBorderSkin = spark.skins.mobile120.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile120.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile120.assets.ViewMenuItem_showsCaret; + + layoutGap = 4; + layoutPaddingLeft = 4; + layoutPaddingRight = 4; + layoutPaddingTop = 4; + layoutPaddingBottom = 4; + layoutBorderSize = 1; + + break; + + } + default: + { + upBorderSkin = spark.skins.mobile.assets.ViewMenuItem_up; + downBorderSkin = spark.skins.mobile.assets.ViewMenuItem_down; + showsCaretBorderSkin = spark.skins.mobile.assets.ViewMenuItem_showsCaret; + + layoutGap = 6; + layoutPaddingLeft = 6; + layoutPaddingRight = 6; + layoutPaddingTop = 6; + layoutPaddingBottom = 6; + layoutBorderSize = 1; + } + } + + } + + /** + * Class to use for the border in the showsCaret state. + * + * @langversion 3.0 + * @playerversion Flash 10 + * @playerversion AIR 2.5 + * @productversion Flex 4.5 + * + * @default Button_down + */ + protected var showsCaretBorderSkin:Class; + + /** + * @private + */ + override protected function getBorderClassForCurrentState():Class + { + var borderClass:Class = super.getBorderClassForCurrentState(); + + if (currentState == "showsCaret") + borderClass = showsCaretBorderSkin; + + return borderClass; + } + + /** + * @private + */ + override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void + { + var iconPlacement:String = getStyle("iconPlacement"); + useCenterAlignment = (iconPlacement == IconPlacement.LEFT) + || (iconPlacement == IconPlacement.RIGHT); + + super.layoutContents(unscaledWidth, unscaledHeight); + } + + /** + * @private + */ + override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void + { + // omit call to super.drawBackground(), drawRect instead + + if (currentState == "showsCaret" || currentState == "down") + { + graphics.beginFill(getStyle("focusColor")); + } + else + { + colorMatrix.createGradientBox(unscaledWidth, + unscaledHeight, + Math.PI / 2, 0, 0); + var chromeColor:uint = getStyle("chromeColor"); + + graphics.beginGradientFill(GradientType.LINEAR, + [chromeColor, chromeColor], + [1.0, 1.0], + [0, 255], + colorMatrix); + } + graphics.drawRect(0,0,unscaledWidth,unscaledHeight); + graphics.lineStyle(0.5,0,0.2); + graphics.drawRect(0,unscaledHeight,unscaledWidth,0.5); + graphics.endFill(); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/ViewMenuSkin.mxml ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/ViewMenuSkin.mxml b/tourdeflexmobile/src/spark/skins/android4/ViewMenuSkin.mxml new file mode 100644 index 0000000..36feed6 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/ViewMenuSkin.mxml @@ -0,0 +1,184 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +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. + +--> + + +<!--- The default skin class for a Spark ViewMenu in a mobile application. + +@see spark.components.ViewMenu + +@langversion 3.0 +@playerversion Flash 10 +@playerversion AIR 1.5 +@productversion Flex 4 +--> +<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" + xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5"> + + <fx:Metadata> + <![CDATA[ + /** + * @copy spark.skins.spark.ApplicationSkin#hostComponent + */ + [HostComponent("spark.components.ViewMenu")] + ]]> + </fx:Metadata> + + <fx:Script fb:purpose="styling"> + <![CDATA[ + import mx.core.DPIClassification; + import mx.core.FlexGlobals; + import spark.effects.easing.Power; + + + /** + * @private + */ + override protected function initializationComplete():void + { + useChromeColor = false; + super.initializationComplete(); + } + + /** + * @copy spark.skins.mobile.supportClasses.MobileSkin#applicationDPI + */ + public function get applicationDPI():int + { + return FlexGlobals.topLevelApplication.applicationDPI; + } + + /** + * @private + */ + override protected function measure():void + { + super.measure(); + + // not actually used in normal situations, but + // is here to prevent bug 28950 if ViewMenu is misused + measuredHeight = 200; + } + + /** + * @private + */ + override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void + { + super.updateDisplayList(unscaledWidth, unscaledHeight); + + var strokeWeight:Number = (applicationDPI == DPIClassification.DPI_640 || applicationDPI == DPIClassification.DPI_480 || applicationDPI == DPIClassification.DPI_320) ? 2 : 1; + var separatorWeight:Number = 1; + + if (applicationDPI == DPIClassification.DPI_640) + separatorWeight = 6; + else if (applicationDPI == DPIClassification.DPI_480) + separatorWeight = 4; + else if (applicationDPI == DPIClassification.DPI_320) + separatorWeight = 3; + else if (applicationDPI == DPIClassification.DPI_240) + separatorWeight = 2; + else if (applicationDPI == DPIClassification.DPI_120) + separatorWeight = 1; + + contentGroup.top = strokeWeight + separatorWeight; + contentGroup.bottom = separatorWeight; + contentGroupLayout.gap = separatorWeight; + } + + ]]> + </fx:Script> + + <s:states> + <s:State name="normal" stateGroups="openedGroup"/> + <s:State name="closed" stateGroups="closedGroup"/> + <s:State name="disabled" stateGroups="openedGroup"/> + <s:State name="normalAndLandscape" stateGroups="openedGroup, landscapeGroup"/> + <s:State name="closedAndLandscape" stateGroups="closedGroup, landscapeGroup"/> + <s:State name="disabledAndLandscape" stateGroups="openedGroup, landscapeGroup" /> + </s:states> + + <s:transitions> + <s:Transition fromState="closed" toState="normal" autoReverse="true"> + <s:Parallel> + <s:Fade target="{chromeGroup}" duration="150" easer="{new Power(0.5, 3)}" /> + <s:Move target="{chromeGroup}" duration="150" disableLayout="true" easer="{new Power(0, 5)}"/> + </s:Parallel> + </s:Transition> + + <s:Transition fromState="closedAndLandscape" toState="normalAndLandscape" autoReverse="true"> + <s:Parallel> + <s:Fade target="{chromeGroup}" duration="150" easer="{new Power(0.5, 3)}" /> + <s:Move target="{chromeGroup}" duration="150" disableLayout="true" easer="{new Power(0, 5)}"/> + </s:Parallel> + </s:Transition> + + <s:Transition fromState="normal" toState="closed" autoReverse="true"> + <s:Parallel> + <s:Fade target="{chromeGroup}" duration="100"/> + <s:Move target="{chromeGroup}" duration="100" disableLayout="true"/> + </s:Parallel> + </s:Transition> + + <s:Transition fromState="normalAndLandscape" toState="closedAndLandscape" autoReverse="true"> + <s:Parallel> + <s:Fade target="{chromeGroup}" duration="100"/> + <s:Move target="{chromeGroup}" duration="100" disableLayout="true"/> + </s:Parallel> + </s:Transition> + </s:transitions> + + <!-- The ViewMenu and its skin are sized to the application. + The menu chrome is a separate group that is anchored to the bottom of the skin. --> + + + <s:Group id="chromeGroup" + left="0" + right="0" + top.closedGroup="{hostComponent.height - chromeGroup.height / 2}" + bottom.openedGroup="0" + visible.closedGroup="false"> + + <s:Rect id="backgroundRect" left="18" right="18" top="1" bottom="0"> + <s:fill> + <s:SolidColor color="#FFFFFF" /> + </s:fill> + <s:stroke> + <s:SolidColorStroke weight="0.5" alpha="0.2" /> + </s:stroke> + <s:filters> + <s:DropShadowFilter alpha="0.5" /> + </s:filters> + </s:Rect> + + <!-- + Note: setting the minimum size to 0 here so that changes to the host component's + size will not be thwarted by this skin part's minimum size. This is a compromise, + more about it here: http://bugs.adobe.com/jira/browse/SDK-21143 + --> + <!--- @copy spark.components.SkinnableContainer#contentGroup --> + <s:Group id="contentGroup" left="20" right="20" top="3" bottom="2" minWidth="0" minHeight="0"> + <s:layout> + <s:VerticalLayout gap="-1" id="contentGroupLayout" horizontalAlign="contentJustify" > + </s:VerticalLayout> + </s:layout> + </s:Group> + </s:Group> +</s:SparkSkin> + http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ActionBarBackground.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ActionBarBackground.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ActionBarBackground.fxg new file mode 100644 index 0000000..febd3f7 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ActionBarBackground.fxg @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group> + <Group> + <Path winding="nonZero" data="M360 48 0 48 0 0 360 0 360 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + </Group> + <Path winding="nonZero" data="M360 1 0 1 0 0 360 0 360 1Z"> + <fill> + <SolidColor color="#E0E0E0"/> + </fill> + </Path> + <Group y="46" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M0 2 360 2 360 0 0 0 0 2Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M360 2 0 2 0 0 360 0 360 2Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Path visible="false" winding="nonZero" data="M0 0 360 0 360 48 0 48 0 0Z"/> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/BusyIndicator.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/BusyIndicator.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/BusyIndicator.fxg new file mode 100644 index 0000000..71cd0fa --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/BusyIndicator.fxg @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008" viewWidth="36" viewHeight="36"> + <Group> + <Group x="-12.8125" y="-6.73926"> + <mask> + <Group x="12.8496" y="6.6665"> + <Path winding="nonZero" data="M0 18.0117C0 27.9429 6.96289 35.9961 17.9629 36.0239L17.9629 33.0127C8.96289 32.9858 3.01074 26.2813 3.01074 18.0117 3.01074 9.74316 8.96289 3.03809 17.9629 3.00977L17.9629 0C6.96289 0.027832 0 8.08008 0 18.0117Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M0 36.7485 16.332 0 44.7012 12.6084 28.3691 49.3569 0 36.7485Z"> + <fill> + <LinearGradient x="13.4458" y="44.7148" scaleX="27.8603" rotation="293.962"> + <GradientEntry ratio="0" color="#FFFFFF"/> + <GradientEntry ratio="0.576638" color="#B4B4B3"/> + <GradientEntry ratio="0.820765" color="#9C9C9B"/> + <GradientEntry ratio="1" color="#919190"/> + </LinearGradient> + </fill> + </Path> + </Group> + <Group x="2.61719" y="-8"> + <mask> + <Group x="15.3828" y="7.92773"> + <Path winding="nonZero" data="M0 3.00977C8 3.03809 14.9512 9.74316 14.9512 18.0117 14.9512 26.2813 8 32.9858 0 33.0127L0 36.0239C10 35.9961 17.9629 27.9429 17.9629 18.0117 17.9629 8.08008 10 0.027832 0 0L0 3.00977Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M49.7617 34.4028 29.1016 0 0 17.4766 20.6621 51.8799 49.7617 34.4028Z"> + <fill> + <LinearGradient x="37.6406" y="47.1841" scaleX="27.7241" rotation="239.012"> + <GradientEntry ratio="0" color="#919190"/> + <GradientEntry ratio="1" color="#FFFFFF"/> + </LinearGradient> + </fill> + </Path> + </Group> + </Group> +</Graphic> http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_down.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_down.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_down.fxg new file mode 100644 index 0000000..4a7c5f7 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_down.fxg @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group scaleGridLeft="29.75" scaleGridRight="89.25" scaleGridTop="36" scaleGridBottom="12"> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Rect alpha="0.5" width="119" height="48"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Rect> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedDown.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedDown.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedDown.fxg new file mode 100644 index 0000000..110f940 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedDown.fxg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group scaleGridLeft="29.75" scaleGridRight="89.25" scaleGridTop="36" scaleGridBottom="12"> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Path alpha="0.5" winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + <Path y="42" winding="nonZero" data="M119 6 0 6 0 0 119 0 119 6Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedUp.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedUp.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedUp.fxg new file mode 100644 index 0000000..52b1a90 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_selectedUp.fxg @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group scaleGridLeft="29.75" scaleGridRight="89.25" scaleGridTop="36" scaleGridBottom="12"> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Path y="42" winding="nonZero" data="M119 6 0 6 0 0 119 0 119 6Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_up.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_up.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_up.fxg new file mode 100644 index 0000000..59b9cd9 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarFirstButton_up.fxg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group scaleGridLeft="29.75" scaleGridRight="89.25" scaleGridTop="36" scaleGridBottom="12"> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_down.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_down.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_down.fxg new file mode 100644 index 0000000..4e4f80b --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_down.fxg @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Group y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Group x="118" y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Path alpha="0.5" winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedDown.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedDown.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedDown.fxg new file mode 100644 index 0000000..ec37077 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedDown.fxg @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Group y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Group x="118" y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Path y="42" winding="nonZero" data="M119 6 0 6 0 0 119 0 119 6Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + <Path alpha="0.5" winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedUp.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedUp.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedUp.fxg new file mode 100644 index 0000000..88a4643 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_selectedUp.fxg @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Group y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Group x="118" y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Path y="42" winding="nonZero" data="M119 6 0 6 0 0 119 0 119 6Z"> + <fill> + <SolidColor color="#33B5E5"/> + </fill> + </Path> + </Group> +</Graphic> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-examples/blob/539852e9/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_up.fxg ---------------------------------------------------------------------- diff --git a/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_up.fxg b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_up.fxg new file mode 100644 index 0000000..be1b619 --- /dev/null +++ b/tourdeflexmobile/src/spark/skins/android4/assets/ButtonBarMiddleButton_up.fxg @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + +<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"> + <Group> + <Path winding="nonZero" data="M119 48 0 48 0 0 119 0 119 48Z"> + <fill> + <SolidColor color="#DEDEDD"/> + </fill> + </Path> + <Group y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + <Group x="118" y="12" alpha="0.100006"> + <Group> + <mask> + <Group> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#FFFFFF"/> + </fill> + </Path> + </Group> + </mask> + <Path winding="nonZero" data="M1 24 0 24 0 0 1 0 1 24Z"> + <fill> + <SolidColor color="#333333"/> + </fill> + </Path> + </Group> + </Group> + </Group> +</Graphic> \ No newline at end of file
