Title: [102401] trunk/Source/WebCore
Revision
102401
Author
[email protected]
Date
2011-12-08 17:11:02 -0800 (Thu, 08 Dec 2011)

Log Message

Create one WebScrollbarPainterDelegate for each scrollbar
https://bugs.webkit.org/show_bug.cgi?id=74142

Reviewed by Sam Weinig.

Create and destroy WebScrollbarPainterDelegate objects as scrollbars come and go.
This is a step towards simplifying the WebScrollbarPainterDelegate object.

* platform/mac/ScrollAnimatorMac.h:
* platform/mac/ScrollAnimatorMac.mm:
(WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
(WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
(WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
(WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
(WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
(WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
(WebCore::ScrollAnimatorMac::cancelAnimations):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (102400 => 102401)


--- trunk/Source/WebCore/ChangeLog	2011-12-09 01:04:51 UTC (rev 102400)
+++ trunk/Source/WebCore/ChangeLog	2011-12-09 01:11:02 UTC (rev 102401)
@@ -1,3 +1,23 @@
+2011-12-08  Anders Carlsson  <[email protected]>
+
+        Create one WebScrollbarPainterDelegate for each scrollbar
+        https://bugs.webkit.org/show_bug.cgi?id=74142
+
+        Reviewed by Sam Weinig.
+
+        Create and destroy WebScrollbarPainterDelegate objects as scrollbars come and go.
+        This is a step towards simplifying the WebScrollbarPainterDelegate object.
+
+        * platform/mac/ScrollAnimatorMac.h:
+        * platform/mac/ScrollAnimatorMac.mm:
+        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
+        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
+        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
+        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
+        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
+        (WebCore::ScrollAnimatorMac::cancelAnimations):
+
 2011-12-08  David Reveman  <[email protected]>
 
         [Chromium] Add per-tile painting flag to DumpRenderTree and rename AcceleratedDrawing to AcceleratedPainting in chromium specific code.

Modified: trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.h (102400 => 102401)


--- trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.h	2011-12-09 01:04:51 UTC (rev 102400)
+++ trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.h	2011-12-09 01:11:02 UTC (rev 102401)
@@ -106,7 +106,8 @@
 #if USE(SCROLLBAR_PAINTER)
     RetainPtr<ScrollbarPainterController> m_scrollbarPainterController;
     RetainPtr<WebScrollbarPainterControllerDelegate> m_scrollbarPainterControllerDelegate;
-    RetainPtr<WebScrollbarPainterDelegate> m_scrollbarPainterDelegate;
+    RetainPtr<WebScrollbarPainterDelegate> m_horizontalScrollbarPainterDelegate;
+    RetainPtr<WebScrollbarPainterDelegate> m_verticalScrollbarPainterDelegate;
 
     void initialScrollbarPaintTimerFired(Timer<ScrollAnimatorMac>*);
     Timer<ScrollAnimatorMac> m_initialScrollbarPaintTimer;

Modified: trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm (102400 => 102401)


--- trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm	2011-12-09 01:04:51 UTC (rev 102400)
+++ trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm	2011-12-09 01:11:02 UTC (rev 102401)
@@ -592,8 +592,6 @@
     m_scrollbarPainterController = [[[NSClassFromString(@"NSScrollerImpPair") alloc] init] autorelease];
     [m_scrollbarPainterController.get() setDelegate:m_scrollbarPainterControllerDelegate.get()];
     [m_scrollbarPainterController.get() setScrollerStyle:wkRecommendedScrollerStyle()];
-
-    m_scrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate alloc] initWithScrollAnimator:this]);
 #endif
 }
 
@@ -603,7 +601,8 @@
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     [m_scrollbarPainterControllerDelegate.get() scrollAnimatorDestroyed];
     [m_scrollbarPainterController.get() setDelegate:nil];
-    [m_scrollbarPainterDelegate.get() scrollAnimatorDestroyed];
+    [m_horizontalScrollbarPainterDelegate.get() scrollAnimatorDestroyed];
+    [m_verticalScrollbarPainterDelegate.get() scrollAnimatorDestroyed];
     [m_scrollAnimationHelperDelegate.get() scrollAnimatorDestroyed];
     END_BLOCK_OBJC_EXCEPTIONS;
 #endif
@@ -858,12 +857,18 @@
 void ScrollAnimatorMac::didAddVerticalScrollbar(Scrollbar* scrollbar)
 {
 #if USE(SCROLLBAR_PAINTER)
-    if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) {
-        [painter setDelegate:m_scrollbarPainterDelegate.get()];
-        [m_scrollbarPainterController.get() setVerticalScrollerImp:painter];
-        if (scrollableArea()->inLiveResize())
-            [painter setKnobAlpha:1];
-    }
+    ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar);
+    if (!painter)
+        return;
+
+    ASSERT(!m_verticalScrollbarPainterDelegate);
+    m_verticalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate alloc] initWithScrollAnimator:this]);
+
+    [painter setDelegate:m_verticalScrollbarPainterDelegate.get()];
+    [m_scrollbarPainterController.get() setVerticalScrollerImp:painter];
+    if (scrollableArea()->inLiveResize())
+        [painter setKnobAlpha:1];
+
 #else
     UNUSED_PARAM(scrollbar);
 #endif
@@ -872,10 +877,16 @@
 void ScrollAnimatorMac::willRemoveVerticalScrollbar(Scrollbar* scrollbar)
 {
 #if USE(SCROLLBAR_PAINTER)
-    if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) {
-        [painter setDelegate:nil];
-        [m_scrollbarPainterController.get() setVerticalScrollerImp:nil];
-    }
+    ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar);
+    if (!painter)
+        return;
+
+    ASSERT(m_verticalScrollbarPainterDelegate);
+    [m_verticalScrollbarPainterDelegate.get() scrollAnimatorDestroyed];
+    m_verticalScrollbarPainterDelegate = nullptr;
+
+    [painter setDelegate:nil];
+    [m_scrollbarPainterController.get() setVerticalScrollerImp:nil];
 #else
     UNUSED_PARAM(scrollbar);
 #endif
@@ -884,12 +895,17 @@
 void ScrollAnimatorMac::didAddHorizontalScrollbar(Scrollbar* scrollbar)
 {
 #if USE(SCROLLBAR_PAINTER)
-    if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) {
-        [painter setDelegate:m_scrollbarPainterDelegate.get()];
-        [m_scrollbarPainterController.get() setHorizontalScrollerImp:painter];
-        if (scrollableArea()->inLiveResize())
-            [painter setKnobAlpha:1];
-    }
+    ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar);
+    if (!painter)
+        return;
+
+    ASSERT(!m_horizontalScrollbarPainterDelegate);
+    m_horizontalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate alloc] initWithScrollAnimator:this]);
+
+    [painter setDelegate:m_horizontalScrollbarPainterDelegate.get()];
+    [m_scrollbarPainterController.get() setHorizontalScrollerImp:painter];
+    if (scrollableArea()->inLiveResize())
+        [painter setKnobAlpha:1];
 #else
     UNUSED_PARAM(scrollbar);
 #endif
@@ -898,10 +914,16 @@
 void ScrollAnimatorMac::willRemoveHorizontalScrollbar(Scrollbar* scrollbar)
 {
 #if USE(SCROLLBAR_PAINTER)
-    if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) {
-        [painter setDelegate:nil];
-        [m_scrollbarPainterController.get() setHorizontalScrollerImp:nil];
-    }
+    ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar);
+    if (!painter)
+        return;
+
+    ASSERT(m_horizontalScrollbarPainterDelegate);
+    [m_horizontalScrollbarPainterDelegate.get() scrollAnimatorDestroyed];
+    m_horizontalScrollbarPainterDelegate = nullptr;
+
+    [painter setDelegate:nil];
+    [m_scrollbarPainterController.get() setHorizontalScrollerImp:nil];
 #else
     UNUSED_PARAM(scrollbar);
 #endif
@@ -914,7 +936,8 @@
 #if USE(SCROLLBAR_PAINTER)
     if (scrollbarPaintTimerIsActive())
         stopScrollbarPaintTimer();
-    [m_scrollbarPainterDelegate.get() cancelAnimations];
+    [m_horizontalScrollbarPainterDelegate.get() cancelAnimations];
+    [m_verticalScrollbarPainterDelegate.get() cancelAnimations];
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to