This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new fd3265fc6b Emulation - first implementation of truncateToFit
fd3265fc6b is described below

commit fd3265fc6b8a0ecc537a2bf0541d6e6207236e60
Author: Yishay Weiss <yishayj...@hotmail.com>
AuthorDate: Wed May 25 13:55:29 2022 +0300

    Emulation - first implementation of truncateToFit
---
 .../Basic/src/main/resources/basic-manifest.xml    |   1 +
 .../html/beads/ReversibleEllipsisOverflow.as       | 116 +++++++++++++++++++++
 .../MXRoyale/src/main/royale/mx/controls/Label.as  |  68 ++++++++----
 3 files changed, 165 insertions(+), 20 deletions(-)

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 @@
     <component id="PasswordInputRemovableBead" 
class="org.apache.royale.html.accessories.PasswordInputRemovableBead" />
     <component id="TextPromptBead" 
class="org.apache.royale.html.accessories.TextPromptBead" />
     <component id="EllipsisOverflow" 
class="org.apache.royale.html.beads.EllipsisOverflow" />
+    <component id="ReversibleEllipsisOverflow" 
class="org.apache.royale.html.beads.ReversibleEllipsisOverflow" />
     <component id="HRule" class="org.apache.royale.html.HRule" />
     <component id="VRule" class="org.apache.royale.html.VRule" />
     <component id="Spacer" class="org.apache.royale.html.Spacer" />
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 <code>true</code>, and the Label control size is
-     *  smaller than its text, the text of the 
-     *  Label control is truncated using 
-     *  a localizable string, such as <code>"..."</code>.
-     *  If this property is <code>false</code>, 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 <code>true</code>, and the Label control size is
+     *  smaller than its text, the text of the 
+     *  Label control is truncated using 
+     *  a localizable string, such as <code>"..."</code>.
+     *  If this property is <code>false</code>, 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;
+    }
+
 
     
//--------------------------------------------------------------------------
     //

Reply via email to