You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/02/13 01:14:20 UTC
[13/37] git commit: [flex-asjs] [refs/heads/spark] - copy of many
flex-sdk classes,
modified to try to compile on top of the FlexJS base classes. A COMPILE::LATER
flag is used to comment out features like multi-swf support and a few other
features that
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/StyleProtoChain.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/StyleProtoChain.as b/frameworks/projects/MX/src/main/flex/mx/styles/StyleProtoChain.as
new file mode 100644
index 0000000..b7b9a9e
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/StyleProtoChain.as
@@ -0,0 +1,1065 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 mx.styles
+{
+
+COMPILE::AS3
+{
+ import flash.display.DisplayObject;
+ import flash.display.DisplayObjectContainer;
+}
+COMPILE::JS
+{
+ import flex.display.DisplayObject;
+ import flex.display.DisplayObjectContainer;
+}
+import flex.system.DefinitionManager;
+import org.apache.flex.reflection.getQualifiedClassName;
+import org.apache.flex.reflection.getQualifiedSuperclassName;
+
+import mx.core.FlexGlobals;
+import mx.core.IFlexDisplayObject;
+import mx.core.IFlexModule;
+import mx.core.IFlexModuleFactory;
+import mx.core.IFontContextComponent;
+import mx.core.IInvalidating;
+import mx.core.IUITextField;
+import mx.core.IVisualElement;
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+import mx.effects.EffectManager;
+import mx.managers.SystemManager;
+import mx.modules.IModule;
+import mx.modules.ModuleManager;
+import mx.utils.NameUtil;
+import mx.utils.OrderedObject;
+import mx.utils.object_proxy;
+
+use namespace mx_internal;
+use namespace object_proxy;
+
+[ExcludeClass]
+
+/**
+ * @private
+ * This is an all-static class with methods for building the protochains
+ * that Flex uses to look up CSS style properties.
+ */
+public class StyleProtoChain
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Class constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * The inheritingStyles and nonInheritingStyles properties
+ * are initialized to this empty Object.
+ * This allows the getStyle() and getStyle()
+ * methods to simply access inheritingStyles[] and nonInheritingStyles[]
+ * without needing to first check whether those objects exist.
+ * If they were simply initialized to {}, we couldn't determine
+ * whether the style chain has already been built or not.
+ */
+ public static var STYLE_UNINITIALIZED:Object = {};
+
+ //--------------------------------------------------------------------------
+ //
+ // Class methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Implements the getClassStyleDeclarations() logic
+ * for UIComponent and TextBase.
+ * The 'object' parameter will be one or the other.
+ */
+ public static function getClassStyleDeclarations(object:IStyleClient):Array
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+ var qualified:Boolean = styleManager.qualifiedTypeSelectors;
+ var className:String = qualified ? getQualifiedClassName(object) : object.className;
+ var advancedObject:IAdvancedStyleClient = object as IAdvancedStyleClient;
+
+ var typeHierarchy:OrderedObject = getTypeHierarchy(object, styleManager, qualified);
+ var types:Array = typeHierarchy.propertyList;
+ var typeCount:int = types.length;
+ var classDecls:Array = null;
+
+ if (!styleManager.hasAdvancedSelectors())
+ {
+ classDecls = styleManager.typeSelectorCache[className];
+ if (classDecls)
+ return classDecls;
+ }
+
+ classDecls = [];
+
+ // Loop over the type hierarhcy starting at the base type and work
+ // down the chain of subclasses.
+ for (var i:int = typeCount - 1; i >= 0; i--)
+ {
+ var type:String = types[i].toString();
+ if (styleManager.hasAdvancedSelectors() && advancedObject != null)
+ {
+ var decls:Object = styleManager.getStyleDeclarations(type);
+ if (decls)
+ {
+ var matchingDecls:Array = matchStyleDeclarations(decls, advancedObject);
+ classDecls = classDecls.concat(matchingDecls);
+ }
+ }
+ else
+ {
+ var decl:CSSStyleDeclaration = styleManager.getMergedStyleDeclaration(type);
+ if (decl)
+ classDecls.push(decl);
+ }
+ }
+
+ if (styleManager.hasAdvancedSelectors() && advancedObject != null)
+ {
+ // Advanced selectors may result in more than one match per type so
+ // we sort based on specificity, but we preserve the declaration
+ // order for equal selectors.
+ classDecls = sortOnSpecificity(classDecls);
+ }
+ else
+ {
+ // Cache the simple type declarations for this class
+ styleManager.typeSelectorCache[className] = classDecls;
+ }
+
+ return classDecls;
+ }
+
+ /**
+ * @private
+ * Implements the initProtoChain() logic for UIComponent and TextBase.
+ * The 'object' parameter will be one or the other.
+ */
+ public static function initProtoChain(object:IStyleClient, inheritPopUpStylesFromOwner:Boolean=true):void
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+ var n:int;
+ var i:int;
+
+ var uicObject:UIComponent = object as UIComponent;
+ var advancedObject:IAdvancedStyleClient = object as IAdvancedStyleClient;
+ var styleDeclaration:CSSStyleDeclaration = null;
+
+ var universalSelectors:Array = [];
+ var hasStyleName:Boolean = false;
+ var styleName:Object = object.styleName;
+ if (styleName)
+ {
+ if (styleName is CSSStyleDeclaration)
+ {
+ // Get the styles referenced by the styleName property.
+ universalSelectors.push(CSSStyleDeclaration(styleName));
+ }
+ else if (styleName is IFlexDisplayObject || styleName is IStyleClient)
+ {
+ // If the styleName property is a UIComponent, then there's a
+ // special search path for that case.
+ StyleProtoChain.initProtoChainForUIComponentStyleName(object);
+ return;
+ }
+ else if (styleName is String)
+ {
+ hasStyleName = true;
+ }
+ }
+
+ // To build the proto chain, we start at the end and work forward.
+ // Referring to the list at the top of this function, we'll start
+ // by getting the tail of the proto chain, which is:
+ // - for non-inheriting styles, the global style sheet
+ // - for inheriting styles, my parent's style object
+ var nonInheritChain:Object = styleManager.stylesRoot;
+
+ if (nonInheritChain && nonInheritChain.effects)
+ object.registerEffects(nonInheritChain.effects);
+
+ var p:IStyleClient = null;
+ if (object is IVisualElement)
+ p = IVisualElement(object).parent as IStyleClient;
+ else if (object is IAdvancedStyleClient)
+ p = IAdvancedStyleClient(object).styleParent as IStyleClient;
+
+ if (p)
+ {
+ var inheritChain:Object = p.inheritingStyles;
+ if (inheritChain == StyleProtoChain.STYLE_UNINITIALIZED)
+ inheritChain = nonInheritChain;
+
+ // If this object is a module then add its global styles to the
+ // inheritChain. If we don't have global styles in this style manager
+ // then the user didn't declare a global style in the module and the
+ // compiler didn't add a duplicate default style. In that case don't
+ // add global styles to the chain because the parent style manager's
+ // global styles are already on the chain.
+ if (object is IModule)
+ {
+ styleDeclaration = styleManager.getStyleDeclaration("global");
+ if (styleDeclaration)
+ inheritChain = styleDeclaration.addStyleToProtoChain(inheritChain, DisplayObject(object));
+ }
+ }
+ else
+ {
+ // Pop ups inheriting chain starts at Application instead of global.
+ // This allows popups to grab styles like themeColor that are
+ // set on Application.
+ if (uicObject && uicObject.isPopUp)
+ {
+ var owner:DisplayObjectContainer = uicObject._owner;
+ if (inheritPopUpStylesFromOwner && owner && (owner is IStyleClient))
+ {
+ inheritChain = IStyleClient(owner).inheritingStyles;
+ }
+ else
+ {
+ inheritChain = FlexGlobals.topLevelApplication.inheritingStyles;
+ }
+ }
+ else
+ {
+ inheritChain = styleManager.stylesRoot;
+ }
+ }
+
+ var styleDeclarations:Array = null;
+
+ // If we have an advanced style client, we handle this separately
+ // because of the considerably more complex selector matches...
+ if (styleManager.hasAdvancedSelectors() && advancedObject != null)
+ {
+ styleDeclarations = getMatchingStyleDeclarations(advancedObject, universalSelectors);
+
+ n = styleDeclarations != null ? styleDeclarations.length : 0;
+ for (i = 0; i < n; i++)
+ {
+ styleDeclaration = styleDeclarations[i];
+ inheritChain = styleDeclaration.addStyleToProtoChain(inheritChain, uicObject);
+ nonInheritChain = styleDeclaration.addStyleToProtoChain(nonInheritChain, uicObject);
+
+ if (styleDeclaration.effects)
+ advancedObject.registerEffects(styleDeclaration.effects);
+ }
+ }
+ // Otherwise we use the legacy Flex 3 logic for simple selectors.
+ else
+ {
+ // Get the styles referenced by the styleName property
+ if (hasStyleName)
+ {
+ var styleNames:Array = styleName.split(/\s+/);
+ n = styleNames.length;
+ for (i = 0; i < n; i++)
+ {
+ if (styleNames[i].length)
+ {
+ styleDeclaration = styleManager.getMergedStyleDeclaration("." + styleNames[i]);
+ if (styleDeclaration)
+ universalSelectors.push(styleDeclaration);
+ }
+ }
+ }
+
+ // Working backwards up the list, the next element in the
+ // search path is the type selector
+ styleDeclarations = object.getClassStyleDeclarations();
+ n = styleDeclarations != null ? styleDeclarations.length : 0;
+ for (i = 0; i < n; i++)
+ {
+ styleDeclaration = styleDeclarations[i];
+ inheritChain = styleDeclaration.addStyleToProtoChain(inheritChain, uicObject);
+ nonInheritChain = styleDeclaration.addStyleToProtoChain(nonInheritChain, uicObject);
+
+ if (styleDeclaration.effects)
+ object.registerEffects(styleDeclaration.effects);
+ }
+
+ // Next are the class selectors
+ n = universalSelectors.length;
+ for (i = 0; i < n; i++)
+ {
+ styleDeclaration = universalSelectors[i];
+ if (styleDeclaration)
+ {
+ inheritChain =
+ styleDeclaration.addStyleToProtoChain(inheritChain, uicObject);
+
+ nonInheritChain =
+ styleDeclaration.addStyleToProtoChain(nonInheritChain, uicObject);
+
+ if (styleDeclaration.effects)
+ object.registerEffects(styleDeclaration.effects);
+ }
+ }
+ }
+
+ // Finally, we'll add the in-line styles
+ // to the head of the proto chain.
+
+ styleDeclaration = object.styleDeclaration;
+
+ object.inheritingStyles =
+ styleDeclaration ?
+ styleDeclaration.addStyleToProtoChain(inheritChain, uicObject) :
+ inheritChain;
+
+ object.nonInheritingStyles =
+ styleDeclaration ?
+ styleDeclaration.addStyleToProtoChain(nonInheritChain, uicObject) :
+ nonInheritChain;
+ }
+
+ /**
+ * @private
+ * If the styleName property points to a UIComponent, then we search
+ * for stylable properties in the following order:
+ *
+ * 1) Look for inline styles on this object
+ * 2) Look for inline styles on the styleName object
+ * 3) Look for class selectors on the styleName object
+ * 4) Look for type selectors on the styleName object
+ * 5) Look for type selectors on this object
+ * 6) Follow the usual search path for the styleName object
+ *
+ * If this object doesn't have any type selectors, then the
+ * search path can be simplified to two steps:
+ *
+ * 1) Look for inline styles on this object
+ * 2) Follow the usual search path for the styleName object
+ */
+ public static function initProtoChainForUIComponentStyleName(
+ obj:IStyleClient):void
+ {
+ var styleManager:IStyleManager2 = getStyleManager(obj);
+ var styleName:IStyleClient = IStyleClient(obj.styleName);
+ var target:DisplayObject = obj as DisplayObject;
+
+ // Push items onto the proto chain in reverse order, beginning with
+ // 6) Follow the usual search path for the styleName object
+ var nonInheritChain:Object = styleName.nonInheritingStyles;
+ if (!nonInheritChain ||
+ nonInheritChain == StyleProtoChain.STYLE_UNINITIALIZED)
+ {
+ nonInheritChain = styleManager.stylesRoot;
+
+ if (nonInheritChain.effects)
+ obj.registerEffects(nonInheritChain.effects);
+ }
+
+ var inheritChain:Object = styleName.inheritingStyles;
+ if (!inheritChain ||
+ inheritChain == StyleProtoChain.STYLE_UNINITIALIZED)
+ {
+ inheritChain = styleManager.stylesRoot;
+ }
+
+ // If there's no type selector on this object, then we can collapse
+ // 6 steps to 2 (see above)
+ var typeSelectors:Array = obj.getClassStyleDeclarations();
+ var n:int = typeSelectors.length;
+
+ // If we are a StyleProxy and we aren't building the protochain from
+ // our type selectors, then we need to build the protochain from
+ // the styleName since styleName.nonInheritingStyles is always null.
+ if (styleName is StyleProxy)
+ {
+ if (n == 0)
+ {
+ // 4) Look for type selectors on the styleName object
+ // 3) Look for class selectors on the styleName object
+ // 2) Look for inline styles on the styleName object
+ nonInheritChain = addProperties(nonInheritChain, styleName, false);
+ }
+ target = StyleProxy(styleName).source as DisplayObject;
+ }
+
+ for (var i:int = 0; i < n; i++)
+ {
+ var typeSelector:CSSStyleDeclaration = typeSelectors[i];
+
+ // If there's no *inheriting* type selector on this object, then we
+ // can still collapse 6 steps to 2 for the inheriting properties.
+
+ // 5) Look for type selectors on this object
+ inheritChain = typeSelector.addStyleToProtoChain(inheritChain, target);
+
+ // 4) Look for type selectors on the styleName object
+ // 3) Look for class selectors on the styleName object
+ // 2) Look for inline styles on the styleName object
+ inheritChain = addProperties(inheritChain, styleName, true);
+
+ // 5) Look for type selectors on this object
+ nonInheritChain = typeSelector.addStyleToProtoChain(nonInheritChain, target);
+
+ // 4) Look for type selectors on the styleName object
+ // 3) Look for class selectors on the styleName object
+ // 2) Look for inline styles on the styleName object
+ nonInheritChain = addProperties(nonInheritChain, styleName, false);
+
+ if (typeSelector.effects)
+ obj.registerEffects(typeSelector.effects);
+ }
+
+ // 1) Look for inline styles on this object
+
+ obj.inheritingStyles =
+ obj.styleDeclaration ?
+ obj.styleDeclaration.addStyleToProtoChain(inheritChain, target) :
+ inheritChain;
+
+ obj.nonInheritingStyles =
+ obj.styleDeclaration ?
+ obj.styleDeclaration.addStyleToProtoChain(nonInheritChain, target) :
+ nonInheritChain;
+ }
+
+ /**
+ * See the comment for the initProtoChainForUIComponentStyleName
+ * function. The comment for that function includes a six-step
+ * sequence. This sub-function implements the following pieces
+ * of that sequence:
+ *
+ * 2) Look for inline styles on the styleName object
+ * 3) Look for class selectors on the styleName object
+ * 4) Look for type selectors on the styleName object
+ *
+ * This piece is broken out as a separate function so that it
+ * can be called recursively when the styleName object has a
+ * styleName property is itself another UIComponent.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ private static function addProperties(chain:Object, obj:IStyleClient,
+ bInheriting:Boolean):Object
+ {
+ // Only use a filter map if styleName is a StyleProxy and we are building the nonInheritingStyles chain
+ var filterMap:Object = obj is StyleProxy && !bInheriting ? StyleProxy(obj).filterMap : null;
+
+ // StyleProxy's usually have sources that are DisplayObject's, but a StyleProxy can also have
+ // another StyleProxy as it's source (Example: CalendarLayout's source is a StyleProxy for DateChooser,
+ // whose style is a StyleProxy for DateField)
+
+ // The way we use target is a bit hacky, but we always assume that styles (if pointed to DisplayObjects)
+ // are the parent (or atleast an ancestor), and we rely on this down the line (such as in
+ // DataGridColumn.addStyleToProtoChain)
+ var curObj:IStyleClient = obj;
+ while (curObj is StyleProxy)
+ {
+ curObj = StyleProxy(curObj).source;
+ }
+ var target:DisplayObject = curObj as DisplayObject;
+
+ var advancedObject:IAdvancedStyleClient = obj as IAdvancedStyleClient;
+ var styleName:Object = obj.styleName;
+ var styleDeclarations:Array;
+ var decl:CSSStyleDeclaration;
+ var styleManager:IStyleManager2 = getStyleManager(target);
+
+ // If we have an advanced style client, we handle this separately
+ // because of the considerably more complex selector matches...
+ if (advancedObject != null && styleManager.hasAdvancedSelectors())
+ {
+ // Handle special case of styleName as a CSSStyleDeclaration
+ if (styleName is CSSStyleDeclaration)
+ {
+ styleDeclarations = [CSSStyleDeclaration(styleName)];
+ }
+
+ // Find matching style declarations, sorted by specificity
+ styleDeclarations = getMatchingStyleDeclarations(advancedObject, styleDeclarations);
+
+ // Then apply matching selectors to the proto chain
+ for (i = 0; i < styleDeclarations.length; i++)
+ {
+ decl = styleDeclarations[i];
+ if (decl)
+ {
+ chain = decl.addStyleToProtoChain(chain, target, filterMap);
+ if (decl.effects)
+ obj.registerEffects(decl.effects);
+ }
+ }
+
+ // Finally, handle special case of styleName as an IStyleClient
+ // which overrides any of the selectors above
+ if (styleName is IStyleClient)
+ {
+ // If the styleName property is another UIComponent, then
+ // recursively add type selectors, class selectors, and
+ // inline styles for that UIComponent
+ chain = addProperties(chain, IStyleClient(styleName),
+ bInheriting);
+ }
+ }
+ else
+ {
+ // 4) Add type selectors
+ styleDeclarations = obj.getClassStyleDeclarations();
+ var n:int = styleDeclarations.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ decl = styleDeclarations[i];
+ chain = decl.addStyleToProtoChain(chain, target, filterMap);
+
+ if (decl.effects)
+ obj.registerEffects(decl.effects);
+ }
+
+ // 3) Add class selectors
+ if (styleName)
+ {
+ styleDeclarations = [];
+ if (typeof(styleName) == "object")
+ {
+ if (styleName is CSSStyleDeclaration)
+ {
+ // Get the style sheet referenced by the styleName property.
+ styleDeclarations.push(CSSStyleDeclaration(styleName));
+ }
+ else
+ {
+ // If the styleName property is another UIComponent, then
+ // recursively add type selectors, class selectors, and
+ // inline styles for that UIComponent
+ chain = addProperties(chain, IStyleClient(styleName),
+ bInheriting);
+ }
+ }
+ else
+ {
+ // Get the style sheets referenced by the styleName property
+ var styleNames:Array = styleName.split(/\s+/);
+ for (var c:int=0; c < styleNames.length; c++)
+ {
+ if (styleNames[c].length)
+ {
+ styleDeclarations.push(styleManager.getMergedStyleDeclaration("." + styleNames[c]));
+ }
+ }
+ }
+
+ for (i = 0; i < styleDeclarations.length; i++)
+ {
+ decl = styleDeclarations[i];
+ if (decl)
+ {
+ chain = decl.addStyleToProtoChain(chain, target, filterMap);
+ if (decl.effects)
+ obj.registerEffects(decl.effects);
+ }
+ }
+ }
+ }
+
+ // 2) Add inline styles
+ if (obj.styleDeclaration)
+ chain = obj.styleDeclaration.addStyleToProtoChain(chain, target, filterMap);
+
+ return chain;
+ }
+
+ /**
+ * @private
+ */
+ public static function initTextField(obj:IUITextField):void
+ {
+ // TextFields never have any inline styles or type selector, so
+ // this is an optimized version of the initObject function (above)
+ var styleManager:IStyleManager2 = StyleManager.getStyleManager(obj.moduleFactory);
+ var styleName:Object = obj.styleName;
+ var classSelectors:Array = [];
+
+ if (styleName)
+ {
+ if (typeof(styleName) == "object")
+ {
+ if (styleName is CSSStyleDeclaration)
+ {
+ // Get the style sheet referenced by the styleName property.
+ classSelectors.push(CSSStyleDeclaration(styleName));
+ }
+ else if (styleName is StyleProxy)
+ {
+ obj.inheritingStyles =
+ IStyleClient(styleName).inheritingStyles;
+
+ obj.nonInheritingStyles = addProperties(styleManager.stylesRoot, IStyleClient(styleName), false);
+
+ return;
+ }
+ else
+ {
+ // styleName points to a UIComponent, so just set
+ // this TextField's proto chains to be the same
+ // as that UIComponent's proto chains.
+ obj.inheritingStyles =
+ IStyleClient(styleName).inheritingStyles;
+ obj.nonInheritingStyles =
+ IStyleClient(styleName).nonInheritingStyles;
+ return;
+ }
+ }
+ else
+ {
+ // Get the style sheets referenced by the styleName property
+ var styleNames:Array = styleName.split(/\s+/);
+ for (var c:int=0; c < styleNames.length; c++)
+ {
+ if (styleNames[c].length) {
+ classSelectors.push(styleManager.getMergedStyleDeclaration("." +
+ styleNames[c]));
+ }
+ }
+ }
+ }
+
+ // To build the proto chain, we start at the end and work forward.
+ // We'll start by getting the tail of the proto chain, which is:
+ // - for non-inheriting styles, the global style sheet
+ // - for inheriting styles, my parent's style object
+ var inheritChain:Object = IStyleClient(obj.parent).inheritingStyles;
+ var nonInheritChain:Object = styleManager.stylesRoot;
+ if (!inheritChain)
+ inheritChain = styleManager.stylesRoot;
+
+ // Next are the class selectors
+ for (var i:int = 0; i < classSelectors.length; i++)
+ {
+ var classSelector:CSSStyleDeclaration = classSelectors[i];
+ if (classSelector)
+ {
+ inheritChain =
+ classSelector.addStyleToProtoChain(inheritChain, DisplayObject(obj));
+
+ nonInheritChain =
+ classSelector.addStyleToProtoChain(nonInheritChain, DisplayObject(obj));
+ }
+ }
+
+ obj.inheritingStyles = inheritChain;
+ obj.nonInheritingStyles = nonInheritChain;
+ }
+
+ /**
+ * @private
+ * Implements the setStyle() logic for UIComponent and TextBase.
+ * The 'object' parameter will be one or the other.
+ */
+ public static function setStyle(object:IStyleClient, styleProp:String,
+ newValue:*):void
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+
+ if (styleProp == "styleName")
+ {
+ // Let the setter handle this one, see UIComponent.
+ object.styleName = newValue;
+
+ // Short circuit, because styleName isn't really a style.
+ return;
+ }
+
+ COMPILE::LATER
+ {
+ if (EffectManager.getEventForEffectTrigger(styleProp) != "")
+ EffectManager.setStyle(styleProp, object);
+ }
+
+ // If this object didn't previously have any inline styles,
+ // then regenerate its proto chain
+ // (and the proto chains of its descendants).
+ var isInheritingStyle:Boolean =
+ styleManager.isInheritingStyle(styleProp);
+ var isProtoChainInitialized:Boolean =
+ object.inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED;
+ var valueChanged:Boolean = object.getStyle(styleProp) != newValue;
+
+ if (!object.styleDeclaration)
+ {
+ object.styleDeclaration = new CSSStyleDeclaration(null, styleManager);
+
+ object.styleDeclaration.setLocalStyle(styleProp, newValue);
+
+ // If inheritingStyles is undefined, then this object is being
+ // initialized and we haven't yet generated the proto chain. To
+ // avoid redundant work, don't bother to create the proto chain here.
+ if (isProtoChainInitialized)
+ object.regenerateStyleCache(isInheritingStyle);
+ }
+ else
+ {
+ object.styleDeclaration.setLocalStyle(styleProp, newValue);
+ }
+
+ if (isProtoChainInitialized && valueChanged)
+ {
+ object.styleChanged(styleProp);
+ object.notifyStyleChangeInChildren(styleProp, isInheritingStyle);
+ }
+ }
+
+ /**
+ * @private
+ * Implements the styleChanged() logic for UIComponent and TextBase.
+ * The 'object' parameter will be one or the other.
+ */
+ public static function styleChanged(object:IInvalidating, styleProp:String):void
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+
+ // If font changed, then invalidateProperties so
+ // we can re-create the text field in commitProperties
+ // TODO (gosmith): Should hasFontContextChanged() be added to IFontContextComponent?
+ if (object is IFontContextComponent &&
+ "hasFontContextChanged" in object &&
+ object["hasFontContextChanged"]())
+ {
+ object.invalidateProperties();
+ }
+
+ if (!styleProp ||
+ styleProp == "styleName" ||
+ styleProp == "layoutDirection")
+ {
+ object.invalidateProperties();
+ }
+
+ // Check to see if this is one of the style properties
+ // that is known to affect layout.
+ if (!styleProp ||
+ styleProp == "styleName" ||
+ styleManager.isSizeInvalidatingStyle(styleProp))
+ {
+ // This style property change may affect the layout of this
+ // object. Signal the LayoutManager to re-measure the object.
+ object.invalidateSize();
+ }
+
+ // TODO (gosmith): Should initThemeColor() be in some interface?
+ if (!styleProp ||
+ styleProp == "styleName" ||
+ styleProp == "themeColor")
+ {
+ if (object is UIComponent)
+ object["initThemeColor"]();
+ }
+
+ object.invalidateDisplayList();
+
+ var parent:IInvalidating;
+ if (object is IVisualElement)
+ parent = IVisualElement(object).parent as IInvalidating;
+
+ if (parent)
+ {
+ if (styleProp == "styleName" || styleManager.isParentSizeInvalidatingStyle(styleProp))
+ parent.invalidateSize();
+
+ if (styleProp == "styleName" || styleManager.isParentDisplayListInvalidatingStyle(styleProp))
+ parent.invalidateDisplayList();
+ }
+ }
+
+ /**
+ * @private
+ */
+ public static function matchesCSSType(object:IAdvancedStyleClient, cssType:String):Boolean
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+ var qualified:Boolean = styleManager.qualifiedTypeSelectors;
+ var typeHierarchy:OrderedObject = getTypeHierarchy(object, styleManager, qualified);
+ return typeHierarchy.object_proxy::getObjectProperty(cssType) != null;
+ }
+
+ /**
+ * @private
+ * Find all matching style declarations for an IAdvancedStyleClient
+ * component. The result is sorted in terms of specificity, but the
+ * declaration order is preserved.
+ *
+ * @param object - an IAdvancedStyleClient instance of the component to
+ * match.
+ * @param styleDeclarations - an optional Array of additional
+ * CSSStyleDeclarations to be included in the sorted matches.
+ *
+ * @return An Array of matching style declarations sorted by specificity.
+ */
+ public static function getMatchingStyleDeclarations(object:IAdvancedStyleClient,
+ styleDeclarations:Array=null):Array // of CSSStyleDeclaration
+ {
+ var styleManager:IStyleManager2 = getStyleManager(object);
+
+ if (styleDeclarations == null)
+ styleDeclarations = [];
+
+ // First, look for universal selectors
+ var universalDecls:Object = styleManager.getStyleDeclarations("*");
+ styleDeclarations = matchStyleDeclarations(universalDecls, object).concat(styleDeclarations);
+
+ // Next, look for type selectors (includes ActionScript supertype matches)
+ // If we also had universal selectors, concatenate them with our type
+ // selectors and then resort by specificity...
+ if (styleDeclarations.length > 0)
+ {
+ styleDeclarations = object.getClassStyleDeclarations().concat(styleDeclarations);
+ styleDeclarations = sortOnSpecificity(styleDeclarations);
+ }
+ else
+ {
+ // Otherwise, we only have type selectors (which are already sorted)
+ styleDeclarations = object.getClassStyleDeclarations();
+ }
+ return styleDeclarations;
+ }
+
+ /**
+ * @private
+ * @param object - the IStyleClient to be introspected
+ * @param qualified - whether qualified type names should be used
+ * @return an ordered map of class names, starting with the object's class
+ * name and then each super class name until we hit a stop class, such as
+ * mx.core::UIComponent.
+ */
+ private static function getTypeHierarchy(object:IStyleClient, styleManager:IStyleManager2, qualified:Boolean=true):OrderedObject
+ {
+ var className:String = getQualifiedClassName(object);
+ var hierarchy:OrderedObject = styleManager.typeHierarchyCache[className] as OrderedObject;
+ if (hierarchy == null)
+ {
+ hierarchy = new OrderedObject();
+
+ var myApplicationDomain:DefinitionManager;
+ var factory:IFlexModuleFactory = ModuleManager.getAssociatedFactory(object);
+ if (factory != null)
+ {
+ myApplicationDomain = new DefinitionManager(factory.info()["currentDomain"]);
+ }
+ else
+ {
+ var myRoot:DisplayObject = SystemManager.getSWFRoot(object);
+ if (!myRoot)
+ return hierarchy;
+ myApplicationDomain = new DefinitionManager(myRoot.loaderInfo.applicationDomain);
+ }
+
+ styleManager.typeHierarchyCache[className] = hierarchy;
+ while (!isStopClass(className))
+ {
+ try
+ {
+ var type:String;
+ if (qualified)
+ type = className.replace("::", ".");
+ else
+ type = NameUtil.getUnqualifiedClassName(className);
+
+ hierarchy.object_proxy::setObjectProperty(type, true);
+ className = getQualifiedSuperclassName(
+ myApplicationDomain.getDefinition(className));
+ }
+ catch(e:ReferenceError)
+ {
+ className = null;
+ }
+ }
+ }
+ return hierarchy;
+ }
+
+ /**
+ * @private
+ * Our style type hierarhcy stops at UIComponent, UITextField or
+ * GraphicElement, not Object.
+ */
+ private static function isStopClass(value:String):Boolean
+ {
+ return value == null ||
+ value == "mx.core::UIComponent" ||
+ value == "mx.core::UITextField" ||
+ value == "mx.graphics.baseClasses::GraphicElement";
+ }
+
+ /**
+ * @private
+ * Find all matching style declarations for an IAdvancedStyleClient
+ * component. The result is unsorted in terms of specificity, but the
+ * declaration order is preserved.
+ *
+ * @param declarations - a map of declarations to be searched for matches.
+ * @param object - an instance of the component to match.
+ *
+ * @return An unsorted Array of matching style declarations for the given
+ * subject.
+ */
+ private static function matchStyleDeclarations(declarations:Object,
+ object:IAdvancedStyleClient):Array // of CSSStyleDeclaration
+ {
+ var matchingDecls:Array = [];
+ var pseudos:Array = declarations["pseudo"];
+ var classes:Array = declarations["class"];
+ var ids:Array = declarations["id"];
+ var unconditionals:Array = declarations["unconditional"];
+
+ var decl:CSSStyleDeclaration;
+
+ // Find the subset of declarations that match this component
+ for each (decl in unconditionals)
+ {
+ if (decl.matchesStyleClient(object))
+ matchingDecls.push(decl);
+ }
+
+ if (object.styleName is String)
+ {
+ // Find the subset of declarations that match this component
+ for each (decl in classes)
+ {
+ if (decl.matchesStyleClient(object))
+ matchingDecls.push(decl);
+ }
+ }
+
+ if (object.hasCSSState())
+ {
+ // Find the subset of declarations that match this component
+ for each (decl in pseudos)
+ {
+ if (decl.matchesStyleClient(object))
+ matchingDecls.push(decl);
+ }
+ }
+
+ if (object.id)
+ {
+ // Find the subset of declarations that match this component
+ for each (decl in ids)
+ {
+ if (decl.matchesStyleClient(object))
+ matchingDecls.push(decl);
+ }
+ }
+
+ if (matchingDecls.length > 1)
+ matchingDecls.sortOn("selectorIndex", Array.NUMERIC);
+
+ // if there are declarations from the parent StyleManager, match them in their own
+ // order, then prepend them. Parent styles go on the chain before child styles.
+ if (declarations.parent)
+ matchingDecls = matchStyleDeclarations(declarations.parent, object).concat(matchingDecls);
+
+ return matchingDecls;
+ }
+
+ /**
+ * @private
+ * Sort algorithm to order style declarations by specificity. Note that
+ * Array.sort() is not used as it does not employ a stable algorithm and
+ * CSS requires the order of equal style declaration to be preserved.
+ */
+ private static function sortOnSpecificity(decls:Array):Array // of CSSStyleDeclaration
+ {
+ // TODO (pfarland): Copied algorithm from Group.sortOnLayer as the
+ // number of declarations to be sorted is usually small. We may consider
+ // replacing this insertion sort with an efficient but stable merge sort
+ // or the like if many style declarations need to sorted.
+ var len:Number = decls.length;
+ var tmp:CSSStyleDeclaration;
+
+ if (len <= 1)
+ return decls;
+
+ for (var i:int = 1; i < len; i++)
+ {
+ for (var j:int = i; j > 0; j--)
+ {
+ if (decls[j].specificity < decls[j-1].specificity)
+ {
+ tmp = decls[j];
+ decls[j] = decls[j-1];
+ decls[j-1] = tmp;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ return decls;
+ }
+
+ /**
+ * @private
+ * Get the style manager of any object. If the object does not implement IFlexModule or
+ * is not of type StyleProxy, then the top-level style manager will be returned.
+ *
+ * @param object - Typed as Object because various interfaces are passed here.
+ * @return a style manager, will not be null.
+ */
+ private static function getStyleManager(object:Object):IStyleManager2
+ {
+ if (object is IFlexModule)
+ return StyleManager.getStyleManager(IFlexModule(object).moduleFactory);
+ else if (object is StyleProxy)
+ return getStyleManagerFromStyleProxy(StyleProxy(object));
+ else
+ return StyleManager.getStyleManager(null);
+ }
+
+ /**
+ * @private
+ * Get the style manager for a given StyleProxy object.
+ *
+ * @return a style manager, will not be null.
+ */
+ private static function getStyleManagerFromStyleProxy(obj:StyleProxy):IStyleManager2
+ {
+ // StyleProxy's usually have sources that are DisplayObject's, but a StyleProxy can also have
+ // another StyleProxy as it's source (Example: CalendarLayout's source is a StyleProxy for DateChooser,
+ // whose style is a StyleProxy for DateField)
+ var curObj:IStyleClient = obj;
+ while (curObj is StyleProxy)
+ {
+ curObj = StyleProxy(curObj).source;
+ }
+
+ if (curObj is IFlexModule)
+ return StyleManager.getStyleManager(IFlexModule(curObj).moduleFactory);
+
+ return StyleManager.getStyleManager(null);
+ }
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/AnchorStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/AnchorStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/AnchorStyles.as
new file mode 100644
index 0000000..89c93e4
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/AnchorStyles.as
@@ -0,0 +1,158 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 vertical distance in pixels from the top edge of the content area to
+ * the control's baseline position.
+ * If this style is set, the baseline of the component is
+ * anchored to the top edge of its content area; when its container
+ * is resized, the two edges maintain their separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="baseline", type="String", inherit="no")]
+
+/**
+ * The vertical distance, in pixels, from the bottom edge of the component
+ * to the bottom edge of its parent container's content area.
+ * If this style is set, the lower edge of the component is
+ * anchored to the bottom edge of its content area; when its container
+ * is resized, the two edges maintain their separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="bottom", type="String", inherit="no")]
+
+/**
+ * The horizontal distance in pixels from the center of the component's
+ * content area to the center of the component.
+ * If this style is set, the center of the component is
+ * anchored to the center of its content area; when its container
+ * is resized, the two centers maintain their horizontal separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="horizontalCenter", type="String", inherit="no")]
+
+/**
+ * The horizontal distance, in pixels, from the left edge of the component
+ * to the left edge of its parent container's content area.
+ * If this style is set, the left edge of the component is
+ * anchored to the left edge of its content area; when its container
+ * is resized, the two edges maintain their separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="left", type="String", inherit="no")]
+
+/**
+ * The horizontal distance, in pixels, from the right edge of the component
+ * to the right edge of its parent container's content area.
+ * If this style is set, the right edge of the component is
+ * anchored to the right edge of its content area; when its container
+ * is resized, the two edges maintain their separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="right", type="String", inherit="no")]
+
+/**
+ * The vertical distance, in pixels, from the top edge of the component
+ * to the top edge of its parent container's content area.
+ * If this style is set, the top edge of the component is
+ * anchored to the top edge of its content area; when its container
+ * is resized, the two edges maintain their separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="top", type="String", inherit="no")]
+
+/**
+ * The vertical distance in pixels from the center of the component's
+ * content area to the center of the component.
+ * If this style is set, the center of the component is
+ * anchored to the center of its content area; when its container
+ * is resized, the two centers maintain their vertical separation.
+ *
+ * <p>This style only has an effect when used on a component in a Canvas container,
+ * or when used on a component in a Panel or Application container that has the
+ * <code>layout</code> property set to <code>absolute</code>.</p>
+ *
+ * <p>The default value is <code>undefined</code>, which means it is not set.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="verticalCenter", type="String", inherit="no")]
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BarColorStyle.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BarColorStyle.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BarColorStyle.as
new file mode 100644
index 0000000..c247291
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BarColorStyle.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Determines the color of a ProgressBar.
+ * A ProgressBar is filled with a vertical gradient between this color
+ * and a brighter color computed from it.
+ * This style has no effect on other components, but can be set on a container
+ * to control the appearance of all progress bars found within.
+ * The default value is <code>undefined</code>, which means it is not set.
+ * In this case, the <code>themeColor</code> style property is used.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="barColor", type="uint", format="Color", inherit="yes", theme="halo")]
+
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BorderStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BorderStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BorderStyles.as
new file mode 100644
index 0000000..9fc4a1f
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/BorderStyles.as
@@ -0,0 +1,250 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Background color of the component when it is disabled.
+ * The global default value is <code>undefined</code>.
+ * The default value for List controls is <code>0xDDDDDD</code> (light gray).
+ * If a container is disabled, the background is dimmed, and the degree of
+ * dimming is controlled by the <code>disabledOverlayAlpha</code> style.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="backgroundDisabledColor", type="uint", format="Color", inherit="yes", theme="halo")]
+
+/**
+ * Background image of a component. This can be an absolute or relative
+ * URL or class. You can set either the <code>backgroundColor</code> or the
+ * <code>backgroundImage</code>. The background image is displayed
+ * on top of the background color.
+ * The default value is <code>undefined</code>, meaning "not set".
+ * If this style and the <code>backgroundColor</code> style are undefined,
+ * the component has a transparent background.
+ *
+ * <p>The default skins of most Flex controls are partially transparent. As a result, the background image of
+ * a container partially "bleeds through" to controls that are in that container. You can avoid this by setting the
+ * alpha values of the control's <code>fillAlphas</code> property to 1, as the following example shows:
+ * <pre>
+ * <mx:<i>Container</i> backgroundColor="0x66CC66"/>
+ * <mx:<i>ControlName</i> ... fillAlphas="[1,1]"/>
+ * </mx:<i>Container</i>></pre>
+ * </p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="backgroundImage", type="Object", format="File", inherit="no", theme="halo")]
+
+/**
+ * Scales the image specified by <code>backgroundImage</code>
+ * to different percentage sizes.
+ * A value of <code>"100%"</code> stretches the image
+ * to fit the entire component.
+ * To specify a percentage value, you must include the percent sign (%).
+ * The default for the Application container is <code>100%</code>.
+ * The default value for all other containers is <code>auto</code>, which maintains
+ * the original size of the image.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="backgroundSize", type="String", inherit="no", theme="halo")]
+
+/**
+ * Alpha of the border.
+ * @default 1
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="borderAlpha", type="Number", inherit="no", theme="spark")]
+
+/**
+ * Color of the border.
+ * The default value depends on the component class;
+ * if not overridden for the class, the default value is <code>0xB7BABC</code>
+ * for the Halo theme and <code>0x696969</code> for the Spark theme.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="borderColor", type="uint", format="Color", inherit="no", theme="halo, spark, mobile")]
+
+/**
+ * Bounding box sides.
+ * A space-delimited String that specifies the sides of the border to show.
+ * The String can contain <code>"left"</code>, <code>"top"</code>,
+ * <code>"right"</code>, and <code>"bottom"</code> in any order.
+ * The default value is <code>"left top right bottom"</code>,
+ * which shows all four sides.
+ *
+ * This style is only used when borderStyle is <code>"solid"</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="borderSides", type="String", inherit="no", theme="halo")]
+
+/**
+ * The border skin class of the component.
+ * The default value in all components that do not explicitly
+ * set their own default for the Halo theme is <code>mx.skins.halo.HaloBorder</code>
+ * and for the Spark theme is <code>mx.skins.spark.BorderSkin</code>.
+ * The Panel container has a default value of <code>mx.skins.halo.PanelSkin</code>
+ * for the Halo theme and <code>mx.skins.spark.BorderSkin</code> for the Spark theme.
+ * To determine the default value for a component, see the default.css file.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="borderSkin", type="Class", inherit="no")]
+
+/**
+ * Bounding box style.
+ * The possible values are <code>"none"</code>, <code>"solid"</code>,
+ * <code>"inset"</code>, and <code>"outset"</code>.
+ * The default value depends on the component class;
+ * if not overridden for the class, the default value is <code>"inset"</code>.
+ * The default value for most Containers is <code>"none"</code>.
+ * The <code>"inset"</code> and <code>"outset"</code> values are only
+ * valid with the halo theme.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="borderStyle", type="String", enumeration="inset,outset,solid,none", inherit="no")]
+
+/**
+ * Bounding box thickness.
+ * Only used when <code>borderStyle</code> is set to <code>"solid"</code>.
+ *
+ * @default 1
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="borderThickness", type="Number", format="Length", inherit="no", theme="halo")]
+
+/**
+ * Visibility of the border.
+ *
+ * @default true
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="borderVisible", type="Boolean", inherit="no", theme="spark")]
+
+/**
+ * Boolean property that specifies whether the component has a visible
+ * drop shadow.
+ * This style is used with <code>borderStyle="solid"</code>.
+ * The default value is <code>false</code>.
+ *
+ * <p><b>Note:</b> For drop shadows to appear on containers, set
+ * <code>backgroundColor</code> or <code>backgroundImage</code> properties.
+ * Otherwise, the shadow appears behind the container because
+ * the default background of a container is transparent.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="dropShadowEnabled", type="Boolean", inherit="no", theme="halo")]
+
+/**
+ * Boolean property that specifies whether the component has a visible
+ * drop shadow.
+ * The default value is <code>false</code>.
+ *
+ * <p><b>Note:</b> For drop shadows to appear on containers, set
+ * <code>contentBackgroundColor</code> property.
+ * Otherwise, the shadow appears behind the container because
+ * the default background of a container is transparent.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="dropShadowVisible", type="Boolean", inherit="no", theme="spark")]
+
+/**
+ * Color of the drop shadow.
+ *
+ * @default 0x000000
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="dropShadowColor", type="uint", format="Color", inherit="yes", theme="halo")]
+
+/**
+ * Direction of the drop shadow.
+ * Possible values are <code>"left"</code>, <code>"center"</code>,
+ * and <code>"right"</code>.
+ *
+ * @default "center"
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="shadowDirection", type="String", enumeration="left,center,right", inherit="no", theme="halo")]
+
+/**
+ * Distance of the drop shadow.
+ * If the property is set to a negative value, the shadow appears above the component.
+ *
+ * @default 2
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="shadowDistance", type="Number", format="Length", inherit="no", theme="halo")]
+
+
+
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ContainerBackgroundStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ContainerBackgroundStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ContainerBackgroundStyles.as
new file mode 100644
index 0000000..7da71d7
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ContainerBackgroundStyles.as
@@ -0,0 +1,65 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Alpha level of the color defined by the <code>backgroundColor</code>
+ * property, of the image or SWF file defined by the <code>backgroundImage</code>
+ * style.
+ * Valid values range from 0.0 to 1.0. For most controls, the default value is 1.0,
+ * but for ToolTip controls, the default value is 0.95 and for Alert controls, the default value is 0.9.
+ *
+ * @default 1.0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="backgroundAlpha", type="Number", inherit="no", theme="halo, spark, mobile")]
+
+/**
+ * Background color of a component.
+ * You can have both a <code>backgroundColor</code> and a
+ * <code>backgroundImage</code> set.
+ * Some components do not have a background.
+ * The DataGrid control ignores this style.
+ * The default value is <code>undefined</code>, which means it is not set.
+ * If both this style and the <code>backgroundImage</code> style
+ * are <code>undefined</code>, the component has a transparent background.
+ *
+ * <p>For the Application container, this style specifies the background color
+ * while the application loads, and a background gradient while it is running.
+ * Flex calculates the gradient pattern between a color slightly darker than
+ * the specified color, and a color slightly lighter than the specified color.</p>
+ *
+ * <p>The default skins of most Flex controls are partially transparent. As a result, the background color of
+ * a container partially "bleeds through" to controls that are in that container. You can avoid this by setting the
+ * alpha values of the control's <code>fillAlphas</code> property to 1, as the following example shows:
+ * <pre>
+ * <mx:<i>Container</i> backgroundColor="0x66CC66"/>
+ * <mx:<i>ControlName</i> ... fillAlphas="[1,1]"/>
+ * </mx:<i>Container</i>></pre>
+ * </p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="backgroundColor", type="uint", format="Color", inherit="no", theme="halo, spark, mobile")]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/GapStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/GapStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/GapStyles.as
new file mode 100644
index 0000000..f0f34be
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/GapStyles.as
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Number of pixels between children in the horizontal direction.
+ * The default value depends on the component class;
+ * if not overridden for the class, the default value is 8.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="horizontalGap", type="Number", format="Length", inherit="no")]
+
+/**
+ * Number of pixels between children in the vertical direction.
+ * The default value depends on the component class;
+ * if not overridden for the class, the default value is 6.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="verticalGap", type="Number", format="Length", inherit="no")]
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/LeadingStyle.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/LeadingStyle.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/LeadingStyle.as
new file mode 100644
index 0000000..a860586
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/LeadingStyle.as
@@ -0,0 +1,31 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Additional vertical space between lines of text.
+ *
+ * <p>The default value is 2.</p>
+ * <p>The default value for the ComboBox control is 0.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="leading", type="Number", format="Length", inherit="yes")]
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/PaddingStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/PaddingStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/PaddingStyles.as
new file mode 100644
index 0000000..8ed2c6a
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/PaddingStyles.as
@@ -0,0 +1,51 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Number of pixels between the component's left border
+ * and the left edge of its content area.
+ * <p>The default value is 0.</p>
+ * <p>The default value for a Button control in the Halo theme is 10
+ * and in the Spark theme is 6.</p>
+ * <p>The default value for the ComboBox control is 5.</p>
+ * <p>The default value for the Form container is 16.</p>
+ * <p>The default value for the Tree control is 2.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="paddingLeft", type="Number", format="Length", inherit="no")]
+
+/**
+ * Number of pixels between the component's right border
+ * and the right edge of its content area.
+ * <p>The default value is 0.</p>
+ * <p>The default value for a Button control in the Halo theme is 10
+ * and in the Spark theme is 6.</p>
+ * <p>The default value for the ComboBox control is 5.</p>
+ * <p>The default value for the Form container is 16.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="paddingRight", type="Number", format="Length", inherit="no")]
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1f6418c4/frameworks/projects/MX/src/main/flex/mx/styles/metadata/TextStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/TextStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/TextStyles.as
new file mode 100644
index 0000000..d43179e
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/TextStyles.as
@@ -0,0 +1,351 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Color of text in the component, including the component label.
+ *
+ * The default value for the Halo theme is <code>0x0B333C</code>.
+ * The default value for the Spark theme is <code>0x000000</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="color", type="uint", format="Color", inherit="yes")]
+
+/**
+ * The directionality of the text displayed by the component.
+ *
+ * <p>The allowed values are <code>"ltr"</code> for left-to-right text,
+ * as in Latin-style scripts,
+ * and <code>"rtl"</code> for right-to-left text,
+ * as in Arabic and Hebrew.</p>
+ *
+ * <p>FTE and TLF use this value in their bidirectional text layout algorithm,
+ * which maps Unicode character order to glyph order.</p>
+ *
+ * <p>Note: This style only applies when an MX component
+ * specifies UIFTETextField as its <code>textFieldClass</code>.</p>
+ *
+ * <p>The <code>direction</code> also affects the alignment
+ * of the text within the bounds of the TLFTextField.
+ * It does not, however, affect the the placement
+ * of the TLFTextField within the component.</p>
+ *
+ * @default "ltr"
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="direction", type="String", enumeration="ltr,rtl,inherit", inherit="yes")]
+
+/**
+ * Color of text in the component if it is disabled.
+ *
+ * @default 0xAAB3B3
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="disabledColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ * Sets the <code>antiAliasType</code> property of internal TextFields. The possible values are
+ * <code>"normal"</code> (<code>flash.text.AntiAliasType.NORMAL</code>)
+ * and <code>"advanced"</code> (<code>flash.text.AntiAliasType.ADVANCED</code>).
+ *
+ * <p>The default value is <code>"advanced"</code>, which enables advanced anti-aliasing for the font.
+ * Set to <code>"normal"</code> to disable the advanced anti-aliasing.</p>
+ *
+ * <p>This style has no effect for system fonts.</p>
+ *
+ * <p>This style applies to all the text in a TextField subcontrol;
+ * you cannot apply it to some characters and not others.</p>
+
+ * @default "advanced"
+ *
+ * @see flash.text.TextField
+ * @see flash.text.AntiAliasType
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontAntiAliasType", type="String", enumeration="normal,advanced", inherit="yes")]
+
+/**
+ * Name of the font to use.
+ * Unlike in a full CSS implementation,
+ * comma-separated lists are not supported.
+ * You can use any font family name.
+ * If you specify a generic font name,
+ * it is converted to an appropriate device font.
+ *
+ * The default font for the Halo theme is <code>"Verdana"</code>.
+ * The default font for the Spark theme is <code>"Arial"</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontFamily", type="String", inherit="yes")]
+
+/**
+ * Sets the <code>gridFitType</code> property of internal TextFields that represent text in Flex controls.
+ * The possible values are <code>"none"</code> (<code>flash.text.GridFitType.NONE</code>),
+ * <code>"pixel"</code> (<code>flash.text.GridFitType.PIXEL</code>),
+ * and <code>"subpixel"</code> (<code>flash.text.GridFitType.SUBPIXEL</code>).
+ *
+ * <p>This property only applies when you are using an embedded font
+ * and the <code>fontAntiAliasType</code> property
+ * is set to <code>"advanced"</code>.</p>
+ *
+ * <p>This style has no effect for system fonts.</p>
+ *
+ * <p>This style applies to all the text in a TextField subcontrol;
+ * you can't apply it to some characters and not others.</p>
+ *
+ * @default "pixel"
+ *
+ * @see flash.text.TextField
+ * @see flash.text.GridFitType
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontGridFitType", type="String", enumeration="none,pixel,subpixel", inherit="yes")]
+
+/**
+ * Sets the <code>sharpness</code> property of internal TextFields that represent text in Flex controls.
+ * This property specifies the sharpness of the glyph edges. The possible values are Numbers
+ * from -400 through 400.
+ *
+ * <p>This property only applies when you are using an embedded font
+ * and the <code>fontAntiAliasType</code> property
+ * is set to <code>"advanced"</code>.</p>
+ *
+ * <p>This style has no effect for system fonts.</p>
+ *
+ * <p>This style applies to all the text in a TextField subcontrol;
+ * you can't apply it to some characters and not others.</p>
+ *
+ * @default 0
+ *
+ * @see flash.text.TextField
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontSharpness", type="Number", inherit="yes")]
+
+/**
+ * Height of the text, in pixels.
+ *
+ * In the Halo theme, the default value is 10 for all controls except
+ * the ColorPicker control. For the Halo themed ColorPicker control,
+ * the default value is 11. In the Spark theme, the default value is
+ * 12 for all controls except the ColorPicker control. For the Spark
+ * themed ColorPicker control, the default value is 11.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontSize", type="Number", format="Length", inherit="yes")]
+
+/**
+ * Determines whether the text is italic font.
+ * Recognized values are <code>"normal"</code> and <code>"italic"</code>.
+ *
+ * @default "normal"
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontStyle", type="String", enumeration="normal,italic", inherit="yes")]
+
+/**
+ * Sets the <code>thickness</code> property of internal TextFields that represent text in Flex controls.
+ * This property specifies the thickness of the glyph edges.
+ * The possible values are Numbers from -200 to 200.
+ *
+ * <p>This property only applies when you are using an embedded font
+ * and the <code>fontAntiAliasType</code> property
+ * is set to <code>"advanced"</code>.</p>
+ *
+ * <p>This style has no effect on system fonts.</p>
+ *
+ * <p>This style applies to all the text in a TextField subcontrol;
+ * you can't apply it to some characters and not others.</p>
+ *
+ * @default 0
+ *
+ * @see flash.text.TextField
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontThickness", type="Number", inherit="yes")]
+
+/**
+ * Determines whether the text is boldface.
+ * Recognized values are <code>normal</code> and <code>bold</code>.
+ * The default value for Button controls is <code>bold</code>.
+ * The default value for all other controls is <code>normal</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="fontWeight", type="String", enumeration="normal,bold", inherit="yes")]
+
+/**
+ * A Boolean value that indicates whether kerning
+ * is enabled (<code>true</code>) or disabled (<code>false</code>).
+ * Kerning adjusts the gap between certain character pairs
+ * to improve readability, and should be used only when necessary,
+ * such as with headings in large fonts.
+ * Kerning is supported for embedded fonts only.
+ * Certain fonts, such as Verdana, and monospaced fonts,
+ * such as Courier New, do not support kerning.
+ *
+ * @default false
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="kerning", type="Boolean", inherit="yes")]
+
+/**
+ * The number of additional pixels to appear between each character.
+ * A positive value increases the character spacing beyond the normal spacing,
+ * while a negative value decreases it.
+ *
+ * @default 0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="letterSpacing", type="Number", inherit="yes")]
+
+/**
+ * The locale of the text displayed by this component.
+ *
+ * <p>FTE and TLF use this locale to map Unicode characters
+ * to font glyphs and to find fallback fonts.</p>
+ *
+ * <p>Note: This style only applies when an MX component
+ * specifies UIFTETextField as its <code>textFieldClass</code>.</p>
+ *
+ * @default "en"
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="locale", type="String", inherit="yes")]
+
+/**
+ * Alignment of text within a container.
+ * Possible values are <code>"left"</code>, <code>"right"</code>,
+ * or <code>"center"</code>.
+ *
+ * <p>The default value for most components is <code>"left"</code>.
+ * For the FormItem component,
+ * the default value is <code>"right"</code>.
+ * For the Button, LinkButton, and AccordionHeader components,
+ * the default value is <code>"center"</code>, and
+ * this property is only recognized when the
+ * <code>labelPlacement</code> property is set to <code>"left"</code> or
+ * <code>"right"</code>.
+ * If <code>labelPlacement</code> is set to <code>"top"</code> or
+ * <code>"bottom"</code>, the text and any icon are centered.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="textAlign", type="String", enumeration="left,center,right", inherit="yes")]
+
+/**
+ * Determines whether the text is underlined.
+ * Possible values are <code>"none"</code> and <code>"underline"</code>.
+ *
+ * @default "none"
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="textDecoration", type="String", enumeration="none,underline", inherit="yes")]
+
+/**
+ * The class implementing IUITextField that is used by this component
+ * to render text.
+ *
+ * <p>It can be set to either the mx.core.UITextField class
+ * (to use the classic TextField class built into Flash Player)
+ * or the mx.core.UIFTETextField class
+ * (to use the Text Layout Framework to get improved text rendering,
+ * including bidirectional layout).</p>
+ *
+ * @default mx.core.UITextField
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+[Style(name="textFieldClass", type="Class", inherit="no")]
+
+/**
+ * Offset of first line of text from the left side of the container, in pixels.
+ *
+ * @default 0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="textIndent", type="Number", format="Length", inherit="yes")]