diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 3c949f01cd..f62886f611 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -181,6 +181,7 @@
+
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as
new file mode 100644
index 0000000000..c48c2097dd
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as
@@ -0,0 +1,116 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 org.apache.royale.html.beads
+{
+
+ import org.apache.royale.core.IBead;
+ import org.apache.royale.core.IStrand;
+ import org.apache.royale.core.IUIBase;
+
+ /**
+ * The ReversibleEllipsisOverflow class is a bead that can be used
+ * to stop the text from overflowing and display an ellipsis.
+ * It adds an option to revert the strand to its old state
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.10
+ */
+ public class ReversibleEllipsisOverflow implements IBead
+ {
+ /**
+ * constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.10
+ */
+ public function ReversibleEllipsisOverflow()
+ {
+ }
+
+ private var _strand:IStrand;
+ private var _oldOverflow:String;
+ private var _oldTextOverflow:String;
+ private var _oldDisplay:String;
+
+ /**
+ * @copy org.apache.royale.core.IBead#strand
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.10
+ * @royaleignorecoercion org.apache.royale.core.IUIBase
+ */
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+ apply();
+ }
+
+ /**
+ * Apply ellipsis overflow
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.10
+ * @royaleignorecoercion org.apache.royale.core.IUIBase
+ */
+ public function apply():void
+ {
+ // In SWF it's done automatically
+ COMPILE::JS
+ {
+ var style:CSSStyleDeclaration = (_strand as IUIBase).element.style;
+ _oldOverflow = style.overflow;
+ _oldTextOverflow = style.textOverflow;
+ _oldDisplay = style.display;
+ style.overflow = "hidden";
+ style.textOverflow = "ellipsis";
+ style.display = "block";
+ }
+
+ }
+
+ /**
+ * Revert ellipsis overflow
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.10
+ * @royaleignorecoercion org.apache.royale.core.IUIBase
+ */
+ public function revert():void
+ {
+ COMPILE::JS
+ {
+ var style:CSSStyleDeclaration = (_strand as IUIBase).element.style;
+ style.overflow = _oldOverflow;
+ style.textOverflow = _oldTextOverflow;
+ style.display = _oldDisplay;
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
index 56ea0b1e5e..fa1a2fa04b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
@@ -36,6 +36,7 @@ import mx.core.IDataRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
import mx.core.IUITextField;
+import org.apache.royale.html.beads.ReversibleEllipsisOverflow;
/*
import mx.core.UITextField;
@@ -790,25 +791,7 @@ public class Label extends UIComponent
return element;
}
- //----------------------------------
- // truncateToFit
- //----------------------------------
-
- /**
- * If this propery is true
, and the Label control size is
- * smaller than its text, the text of the
- * Label control is truncated using
- * a localizable string, such as "..."
.
- * If this property is false
, text that does not fit is clipped.
- *
- * @default true
- *
- * @langversion 3.0
- * @playerversion Flash 9
- * @playerversion AIR 1.1
- * @productversion Flex 3
- */
- public var truncateToFit:Boolean = true;
+ private var _truncationBead:ReversibleEllipsisOverflow;
//----------------------------------
@@ -893,7 +876,52 @@ public class Label extends UIComponent
return _textWidth;
}
-
+ //----------------------------------
+ // truncateToFit
+ //----------------------------------
+
+ /**
+ * If this propery is true
, and the Label control size is
+ * smaller than its text, the text of the
+ * Label control is truncated using
+ * a localizable string, such as "..."
.
+ * If this property is false
, text that does not fit is clipped.
+ *
+ * @default true
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ private var _truncateToFit:Boolean = true;
+ public function get truncateToFit():Boolean
+ {
+ return _truncateToFit;
+ }
+
+ public function set truncateToFit(value:Boolean):void
+ {
+ if (value && !_truncationBead && initialized)
+ {
+ _truncationBead = new ReversibleEllipsisOverflow();
+ addBead(_truncationBead);
+ } else if (_truncationBead && _truncateToFit && !value)
+ {
+ _truncationBead.revert();
+ } else if (_truncationBead && !_truncateToFit && value)
+ {
+ _truncationBead.apply();
+ }
+ _truncateToFit = value;
+ }
+
+ override public function addedToParent():void
+ {
+ super.addedToParent();
+ truncateToFit = _truncateToFit;
+ }
+
//--------------------------------------------------------------------------
//