fix width/height handling in Label

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/dc0060ec
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/dc0060ec
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/dc0060ec

Branch: refs/heads/develop
Commit: dc0060eca9b6224c786426953d93659c83212fce
Parents: b38c703
Author: Alex Harui <[email protected]>
Authored: Tue Oct 14 11:54:30 2014 -0700
Committer: Alex Harui <[email protected]>
Committed: Fri Oct 17 22:38:45 2014 -0700

----------------------------------------------------------------------
 .../FlexJSUI/src/org/apache/flex/html/Label.as  | 17 -----
 .../apache/flex/html/beads/TextFieldViewBase.as | 74 +++++++++++++++-----
 2 files changed, 55 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/dc0060ec/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/Label.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/Label.as 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/Label.as
index 71ea3d5..27d54ed 100644
--- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/Label.as
+++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/Label.as
@@ -98,22 +98,5 @@ package org.apache.flex.html
                        ITextModel(model).html = value;
                }
                                
-        /**
-         *  @private
-         */
-               override public function set width(value:Number):void
-               {
-                       super.width = value;
-                       IEventDispatcher(model).dispatchEvent( new 
Event("widthChanged") );
-               }
-               
-        /**
-         *  @private
-         */
-               override public function set height(value:Number):void
-               {
-                       super.height = value;
-                       IEventDispatcher(model).dispatchEvent( new 
Event("heightChanged") );
-               }
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/dc0060ec/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/TextFieldViewBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/TextFieldViewBase.as
 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/TextFieldViewBase.as
index 7e40a44..2fb07c9 100644
--- 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/TextFieldViewBase.as
+++ 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/TextFieldViewBase.as
@@ -25,8 +25,9 @@ package org.apache.flex.html.beads
        import org.apache.flex.core.IBeadView;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.ITextModel;
-    import org.apache.flex.core.IUIBase;
-    import org.apache.flex.core.ValuesManager;
+       import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.core.ValuesManager;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
        
@@ -89,8 +90,8 @@ package org.apache.flex.html.beads
                        _textModel = value.getBeadByType(ITextModel) as 
ITextModel;
             _textModel.addEventListener("textChange", textChangeHandler);
             _textModel.addEventListener("htmlChange", htmlChangeHandler);
-            _textModel.addEventListener("widthChanged", widthChangeHandler);
-            _textModel.addEventListener("heightChanged", heightChangeHandler);
+            IEventDispatcher(_strand).addEventListener("widthChanged", 
widthChangeHandler);
+            IEventDispatcher(_strand).addEventListener("heightChanged", 
heightChangeHandler);
                        DisplayObjectContainer(value).addChild(_textField);
                        if (_textModel.text !== null)
                                text = _textModel.text;
@@ -132,8 +133,34 @@ package org.apache.flex.html.beads
             if (value == null)
                 value = "";
                        _textField.text = value;
+            autoSizeIfNeeded();
                }
-               
+
+        private function autoSizeIfNeeded():void
+        {
+            var host:UIBase = UIBase(_strand);
+            if (autoHeight)
+            {            
+                if (textField.height != textField.textHeight + 4)
+                {
+                    textField.height = textField.textHeight + 4;
+                    inHeightChange = true;
+                    host.dispatchEvent(new Event("heightChanged"));
+                    inHeightChange = false;
+                }
+            }
+            if (autoWidth)
+            {
+                if (textField.width != textField.textWidth + 4)
+                {
+                    textField.width = textField.textWidth + 4;
+                    inWidthChange = true;
+                    host.dispatchEvent(new Event("widthChanged"));
+                    inWidthChange = false;                    
+                }
+            }
+        }
+        
         /**
          *  @copy org.apache.flex.core.ITextModel#html
          *  
@@ -153,6 +180,7 @@ package org.apache.flex.html.beads
         public function set html(value:String):void
                {
                        _textField.htmlText = value;
+            autoSizeIfNeeded();
                }
                
                private function textChangeHandler(event:Event):void
@@ -167,27 +195,35 @@ package org.apache.flex.html.beads
                
         private var autoHeight:Boolean = true;
         private var autoWidth:Boolean = true;
+        private var inHeightChange:Boolean = false;
+        private var inWidthChange:Boolean = false;
         
                private function widthChangeHandler(event:Event):void
                {
-            textField.autoSize = "none";
-            autoWidth = false;
-                       textField.width = DisplayObject(_strand).width;
-            if (autoHeight)
-               textField.height = textField.textHeight + 4;
-            else
-                textField.height = DisplayObject(_strand).height;
+            if (!inWidthChange)
+            {
+                textField.autoSize = "none";
+                autoWidth = false;
+                       textField.width = DisplayObject(_strand).width;
+                if (autoHeight)
+                       autoSizeIfNeeded()
+                else
+                    textField.height = DisplayObject(_strand).height;
+            }
                }
 
         private function heightChangeHandler(event:Event):void
         {
-            textField.autoSize = "none";
-            autoHeight = false;
-            textField.height = DisplayObject(_strand).height;
-            if (autoWidth)
-                textField.width = textField.textWidth + 4;
-            else
-                textField.width = DisplayObject(_strand).width;
+            if (!inHeightChange)
+            {
+                textField.autoSize = "none";
+                autoHeight = false;
+                textField.height = DisplayObject(_strand).height;
+                if (autoWidth)
+                    autoSizeIfNeeded();
+                else
+                    textField.width = DisplayObject(_strand).width;
+            }
         }
         
         /**

Reply via email to