fix for endless loop and RTE 1502 when resizing text

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

Branch: refs/heads/release4.12.0
Commit: 6605f32341818bfd8652674dc9e9ded2dad5dc23
Parents: cf660e8
Author: Justin Mclean <[email protected]>
Authored: Tue Feb 18 09:47:32 2014 +1100
Committer: Justin Mclean <[email protected]>
Committed: Tue Feb 18 09:47:32 2014 +1100

----------------------------------------------------------------------
 .../components/supportClasses/ScrollerLayout.as | 64 ++++++++++++--------
 1 file changed, 40 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6605f323/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as
 
b/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as
index a6725c7..b085f24 100644
--- 
a/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as
+++ 
b/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as
@@ -72,12 +72,18 @@ public class ScrollerLayout extends LayoutBase
     //
     
//--------------------------------------------------------------------------   
 
-    /**
-     *  @private
-     *  Used by updateDisplayList() to prevent looping.
-     */
-    private var invalidationCount:int = 0;
-    
+       /**
+        *  @private
+        *  Used by updateDisplayList() to prevent looping.
+        */
+       private var invalidationCount:int = 0;
+       
+       /**
+        *  @private
+        *  Used by updateDisplayList() to prevent looping.
+        */
+       private var removeCount:int = 0;
+       
     /**
      *  @private
      */
@@ -224,7 +230,7 @@ public class ScrollerLayout extends LayoutBase
      *  the horizontal scrollbar (hsb) at its minimum size.   The HSB is 
assumed 
      *  to be non-null and visible.
      * 
-     *  If includeVSB is false we check to see if the HSB woudl fit if the 
+     *  If includeVSB is false we check to see if the HSB would fit if the 
      *  VSB wasn't visible.
      */
     private function hsbFits(w:Number, h:Number, 
includeVSB:Boolean=true):Boolean
@@ -347,6 +353,8 @@ public class ScrollerLayout extends LayoutBase
         const scroller:Scroller = getScroller();
         if (!scroller) 
             return;
+               
+               removeCount = 0;
             
         const minViewportInset:Number = scroller.minViewportInset;
         const measuredSizeIncludesScrollBars:Boolean = 
scroller.measuredSizeIncludesScrollBars && 
(scroller.getStyle("interactionMode") == InteractionMode.MOUSE);
@@ -450,6 +458,7 @@ public class ScrollerLayout extends LayoutBase
         g.measuredMinHeight = Math.ceil(minH);
     }
 
+
     /** 
      *  @private
      *  Arrange the viewport and scrollbars conventionally within
@@ -607,18 +616,28 @@ public class ScrollerLayout extends LayoutBase
 
                 if (hsbIsDependent)
                 {
-                    if (vsbFits(w, h, false))  // VSB will fit if HSB isn't 
shown   
+                    if (removeCount < 2 && vsbFits(w, h, false))  // VSB will 
fit if HSB isn't shown
+                                       {
+                                               removeCount++;
                         hsbVisible = false;
-                    else 
+                                       }
+                    else
+                                       {
                         vsbVisible = hsbVisible = false;
+                                       }
   
                 }
                 else if (vsbIsDependent)
                 {
-                    if (hsbFits(w, h, false)) // HSB will fit if VSB isn't 
shown
+                    if (removeCount < 2 && hsbFits(w, h, false)) // HSB will 
fit if VSB isn't shown
+                                       {
+                                               removeCount++;
                         vsbVisible = false;
+                                       }
                     else
+                                       {
                         hsbVisible = vsbVisible = false; 
+                                       }       
                 }
                 else if (vsbFits(w, h, false)) // VSB will fit if HSB isn't 
shown
                     hsbVisible = false;
@@ -652,20 +671,18 @@ public class ScrollerLayout extends LayoutBase
         else 
             viewportH = explicitViewportH;
         
-        // Layout the viewport and scrollbars.
-
-        if (viewport)
-        {
-            viewport.setLayoutBoundsSize(viewportW, viewportH);
-            viewport.setLayoutBoundsPosition(minViewportInset, 
minViewportInset);
-        }
-        
+               // Layout the viewport and scrollbars.
+               if (viewport)
+               {
+                       viewport.setLayoutBoundsSize(viewportW, viewportH);
+                       viewport.setLayoutBoundsPosition(minViewportInset, 
minViewportInset);
+               }
+               
         if (hsbVisible)
         {
                        var hsbH:Number = hsb.getPreferredBoundsHeight();
             var hsbW:Number = vsbVisible ? w - vsb.getPreferredBoundsWidth() : 
w;
-            hsb.setLayoutBoundsSize(Math.max(hsb.getMinBoundsWidth(), hsbW), 
hsbH);
-            
+            hsb.setLayoutBoundsSize(Math.max(hsb.getMinBoundsWidth(), hsbW), 
hsbH);           
                        hsb.setLayoutBoundsPosition(0, h - hsbH);
         }
 
@@ -673,8 +690,7 @@ public class ScrollerLayout extends LayoutBase
         {
             var vsbW:Number = vsb.getPreferredBoundsWidth(); 
             var vsbH:Number = hsbVisible ? h - hsb.getPreferredBoundsHeight() 
: h;
-                       vsb.setLayoutBoundsSize(vsbW, 
Math.max(vsb.getMinBoundsHeight(), vsbH));
-                       
+                       vsb.setLayoutBoundsSize(vsbW, 
Math.max(vsb.getMinBoundsHeight(), vsbH));                
                        vsb.setLayoutBoundsPosition(w - vsbW, 0);
         }
 
@@ -691,11 +707,11 @@ public class ScrollerLayout extends LayoutBase
             if (viewportGroup && viewportGroup.layout && 
viewportGroup.layout.useVirtualLayout)
                 viewportGroup.invalidateSize();
             
-            invalidationCount += 1; 
+            invalidationCount++; 
         }
         else
             invalidationCount = 0;
-             
+        
         target.setContentSize(w, h);
     }
 

Reply via email to