FIXED - FLEX-24502 Mobile optimized skins and item renderers don't show text when mirrored
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/6a269c3a Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/6a269c3a Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/6a269c3a Branch: refs/heads/release4.12.0 Commit: 6a269c3aaedb8f271909b35834bd4ba832faa9f3 Parents: 332980d Author: mamsellem <maurice.amsel...@systar.com> Authored: Sat Mar 29 13:45:52 2014 +0100 Committer: mamsellem <maurice.amsel...@systar.com> Committed: Sat Mar 29 13:45:52 2014 +0100 ---------------------------------------------------------------------- .../supportClasses/StyleableTextField.as | 79 +++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6a269c3a/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as b/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as index fd674de..1b74e1d 100644 --- a/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as +++ b/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableTextField.as @@ -49,6 +49,7 @@ import mx.core.FlexGlobals; import mx.core.FlexTextField; import mx.core.IInvalidating; import mx.core.IVisualElement; +import mx.core.LayoutDirection; import mx.core.UIComponent; import mx.core.mx_internal; import mx.events.FlexEvent; @@ -214,6 +215,66 @@ public class StyleableTextField extends FlexTextField invalidateTightTextHeight = true; invalidateTextSizeFlag = true; } + validateTransformMatrix(); + } + + /** + * @private + * True if we've inherited layoutDirection="rtl". + * (implementation largely inspired from UITextField) + */ + private var mirror: Boolean = false; + + //---------------------------------- + // x + //---------------------------------- + + private var _x: Number = 0; + + /** + * @private + */ + override public function set x(value: Number): void + { + _x = value; + super.x = value; + validateTransformMatrix(); + } + + /** + * @private + */ + override public function get x(): Number + { + return (mirror) ? _x : super.x; + } + + /** + * @private + * Update the transform.matrix based on the mirror flag. This method must be + * called when x, width, or layoutDirection changes. + */ + private function validateTransformMatrix(): void + { + if (mirror) { + var mirrorMatrix: Matrix = this.transform.matrix; + // matrix a must be negative + if (mirrorMatrix.a > 0){ + mirrorMatrix.a = -mirrorMatrix.a; + } + mirrorMatrix.tx = _x + width; + transform.matrix = mirrorMatrix; + } + else // layoutDirection changed, mirror=false, reset transform.matrix to its default + { + var defaultMatrix: Matrix = this.transform.matrix; + if (defaultMatrix.a < 0) { + defaultMatrix.a = -defaultMatrix.a; + } + defaultMatrix.tx = _x; + defaultMatrix.ty = y; + transform.matrix = defaultMatrix; + } } /** @@ -1051,11 +1112,25 @@ public class StyleableTextField extends FlexTextField { if (invalidateStyleFlag) { + // compute mirror + const oldMirror: Boolean = mirror; + if (parent is IVisualElement) + mirror = IVisualElement(parent).layoutDirection == LayoutDirection.RTL; + if (mirror || oldMirror) + validateTransformMatrix(); + var align:String = getStyle("textAlign"); if (align == "start") align = TextFormatAlign.LEFT; if (align == "end") align = TextFormatAlign.RIGHT; + // textalign must be mirrored as well + if (mirror){ + if (align == TextFormatAlign.LEFT) + align =TextFormatAlign.RIGHT; + else if (align == TextFormatAlign.RIGHT ) + align = TextFormatAlign.LEFT; + } textFormat.align = align; textFormat.font = getStyle("fontFamily"); textFormat.bold = getStyle("fontWeight") == "bold"; @@ -1113,7 +1188,7 @@ public class StyleableTextField extends FlexTextField invalidateTightTextHeight = true; } } - + /** * @copy mx.core.UIComponent#getStyle() * @@ -2164,7 +2239,7 @@ public class StyleableTextField extends FlexTextField mx_internal var leftMargin:Object; mx_internal var rightMargin:Object; - private static var supportedStyles:String = "textAlign fontFamily fontWeight fontStyle color fontSize textDecoration textIndent leading letterSpacing" + private static const supportedStyles:Vector.<String> = new <String>["textAlign", "fontFamily", "fontWeight", "fontStyle", "color", "fontSize" , "textDecoration","textIndent" ,"leading" ,"letterSpacing" ,"layoutDirection"]; private var invalidateStyleFlag:Boolean = true;