Title: [198784] trunk/Source/WebCore
Revision
198784
Author
[email protected]
Date
2016-03-29 10:16:25 -0700 (Tue, 29 Mar 2016)

Log Message

[OS X] [RTL Scrollbars] Overlay RTL scrollbars animate in from the wrong side
https://bugs.webkit.org/show_bug.cgi?id=155962

Reviewed by Simon Fraser.

We can control the animation direction with the NSScrollerImp property
userInterfaceLayoutDirection.

Not testable.

* platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::setScrollbarLayoutDirection):
* platform/ScrollableArea.h:
(WebCore::ScrollableArea::horizontalScrollbar):
(WebCore::ScrollableArea::verticalScrollbar):
(WebCore::ScrollableArea::tiledBacking):
(WebCore::ScrollableArea::layerForHorizontalScrollbar):
(WebCore::ScrollableArea::layerForVerticalScrollbar):
(WebCore::ScrollableArea::layerForScrolling):
(WebCore::ScrollableArea::layerForScrollCorner):
(WebCore::ScrollableArea::layerForOverhangAreas):
* platform/mac/ScrollAnimatorMac.mm:
(WebCore::ScrollAnimatorMac::updateScrollerStyle):
* platform/mac/ScrollableAreaMac.mm:
(WebCore::ScrollableArea::setScrollbarDirection):
* platform/mac/ScrollbarThemeMac.mm:
(WebCore::ScrollbarThemeMac::registerScrollbar):
* platform/spi/mac/NSScrollerImpSPI.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (198783 => 198784)


--- trunk/Source/WebCore/ChangeLog	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/ChangeLog	2016-03-29 17:16:25 UTC (rev 198784)
@@ -1,3 +1,34 @@
+2016-03-29  Myles C. Maxfield  <[email protected]>
+
+        [OS X] [RTL Scrollbars] Overlay RTL scrollbars animate in from the wrong side
+        https://bugs.webkit.org/show_bug.cgi?id=155962
+
+        Reviewed by Simon Fraser.
+
+        We can control the animation direction with the NSScrollerImp property
+        userInterfaceLayoutDirection.
+
+        Not testable.
+
+        * platform/ScrollableArea.cpp:
+        (WebCore::ScrollableArea::setScrollbarLayoutDirection):
+        * platform/ScrollableArea.h:
+        (WebCore::ScrollableArea::horizontalScrollbar):
+        (WebCore::ScrollableArea::verticalScrollbar):
+        (WebCore::ScrollableArea::tiledBacking):
+        (WebCore::ScrollableArea::layerForHorizontalScrollbar):
+        (WebCore::ScrollableArea::layerForVerticalScrollbar):
+        (WebCore::ScrollableArea::layerForScrolling):
+        (WebCore::ScrollableArea::layerForScrollCorner):
+        (WebCore::ScrollableArea::layerForOverhangAreas):
+        * platform/mac/ScrollAnimatorMac.mm:
+        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
+        * platform/mac/ScrollableAreaMac.mm:
+        (WebCore::ScrollableArea::setScrollbarDirection):
+        * platform/mac/ScrollbarThemeMac.mm:
+        (WebCore::ScrollbarThemeMac::registerScrollbar):
+        * platform/spi/mac/NSScrollerImpSPI.h:
+
 2016-03-29  Dan Bernstein  <[email protected]>
 
         Inline WebFullScreenVideoRootViewController.m

Modified: trunk/Source/WebCore/platform/ScrollableArea.h (198783 => 198784)


--- trunk/Source/WebCore/platform/ScrollableArea.h	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/platform/ScrollableArea.h	2016-03-29 17:16:25 UTC (rev 198784)
@@ -29,6 +29,10 @@
 #include "Scrollbar.h"
 #include <wtf/Vector.h>
 
+#if PLATFORM(COCOA)
+OBJC_CLASS NSScrollerImp;
+#endif
+
 namespace WebCore {
 
 class FloatPoint;
@@ -180,8 +184,8 @@
     int verticalScrollbarIntrusion() const;
     WEBCORE_EXPORT IntSize scrollbarIntrusion() const;
 
-    virtual Scrollbar* horizontalScrollbar() const { return 0; }
-    virtual Scrollbar* verticalScrollbar() const { return 0; }
+    virtual Scrollbar* horizontalScrollbar() const { return nullptr; }
+    virtual Scrollbar* verticalScrollbar() const { return nullptr; }
 
     const IntPoint& scrollOrigin() const { return m_scrollOrigin; }
     bool scrollOriginChanged() const { return m_scrollOriginChanged; }
@@ -293,15 +297,15 @@
     bool isPinnedVerticallyInDirection(int verticalScrollDelta) const;
 #endif
 
-    virtual TiledBacking* tiledBacking() const { return 0; }
+    virtual TiledBacking* tiledBacking() const { return nullptr; }
 
     // True if scrolling happens by moving compositing layers.
     virtual bool usesCompositedScrolling() const { return false; }
     // True if the contents can be scrolled asynchronously (i.e. by a ScrollingCoordinator).
     virtual bool usesAsyncScrolling() const { return false; }
 
-    virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
-    virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; }
+    virtual GraphicsLayer* layerForHorizontalScrollbar() const { return nullptr; }
+    virtual GraphicsLayer* layerForVerticalScrollbar() const { return nullptr; }
 
     bool hasLayerForHorizontalScrollbar() const;
     bool hasLayerForVerticalScrollbar() const;
@@ -314,6 +318,9 @@
 
     bool verticalScrollbarIsOnLeft() const;
     static bool systemLanguageIsRTL();
+#if PLATFORM(COCOA)
+    void setScrollbarLayoutDirection(NSScrollerImp *) const;
+#endif
 
 protected:
     WEBCORE_EXPORT ScrollableArea();
@@ -327,10 +334,10 @@
     virtual void invalidateScrollCornerRect(const IntRect&) = 0;
 
     friend class ScrollingCoordinator;
-    virtual GraphicsLayer* layerForScrolling() const { return 0; }
-    virtual GraphicsLayer* layerForScrollCorner() const { return 0; }
+    virtual GraphicsLayer* layerForScrolling() const { return nullptr; }
+    virtual GraphicsLayer* layerForScrollCorner() const { return nullptr; }
 #if ENABLE(RUBBER_BANDING)
-    virtual GraphicsLayer* layerForOverhangAreas() const { return 0; }
+    virtual GraphicsLayer* layerForOverhangAreas() const { return nullptr; }
 #endif
 
     bool hasLayerForScrollCorner() const;

Modified: trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm (198783 => 198784)


--- trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm	2016-03-29 17:16:25 UTC (rev 198784)
@@ -1304,6 +1304,7 @@
 
         NSScrollerImp *oldVerticalPainter = [m_scrollbarPainterController verticalScrollerImp];
         NSScrollerImp *newVerticalPainter = [NSScrollerImp scrollerImpWithStyle:newStyle controlSize:(NSControlSize)verticalScrollbar->controlSize() horizontal:NO replacingScrollerImp:oldVerticalPainter];
+        m_scrollableArea.setScrollbarLayoutDirection(newVerticalPainter);
 
         [m_scrollbarPainterController setVerticalScrollerImp:newVerticalPainter];
         macTheme->setNewPainterForScrollbar(*verticalScrollbar, newVerticalPainter);
@@ -1320,6 +1321,7 @@
 
         NSScrollerImp *oldHorizontalPainter = [m_scrollbarPainterController horizontalScrollerImp];
         NSScrollerImp *newHorizontalPainter = [NSScrollerImp scrollerImpWithStyle:newStyle controlSize:(NSControlSize)horizontalScrollbar->controlSize() horizontal:YES replacingScrollerImp:oldHorizontalPainter];
+        m_scrollableArea.setScrollbarLayoutDirection(newHorizontalPainter);
 
         [m_scrollbarPainterController setHorizontalScrollerImp:newHorizontalPainter];
         macTheme->setNewPainterForScrollbar(*horizontalScrollbar, newHorizontalPainter);

Modified: trunk/Source/WebCore/platform/mac/ScrollableAreaMac.mm (198783 => 198784)


--- trunk/Source/WebCore/platform/mac/ScrollableAreaMac.mm	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/platform/mac/ScrollableAreaMac.mm	2016-03-29 17:16:25 UTC (rev 198784)
@@ -54,4 +54,13 @@
 #endif
 }
 
+void ScrollableArea::setScrollbarLayoutDirection(NSScrollerImp *scroller) const
+{
+#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200
+    scroller.userInterfaceLayoutDirection = verticalScrollbarIsOnLeft() ? NSUserInterfaceLayoutDirectionRightToLeft : NSUserInterfaceLayoutDirectionLeftToRight;
+#else
+    UNUSED_PARAM(scroller);
+#endif
 }
+
+}

Modified: trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm (198783 => 198784)


--- trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm	2016-03-29 17:16:25 UTC (rev 198784)
@@ -160,6 +160,7 @@
 
     bool isHorizontal = scrollbar.orientation() == HorizontalScrollbar;
     NSScrollerImp *scrollbarPainter = [NSScrollerImp scrollerImpWithStyle:recommendedScrollerStyle() controlSize:scrollbarControlSizeToNSControlSize(scrollbar.controlSize()) horizontal:isHorizontal replacingScrollerImp:nil];
+    scrollbar.scrollableArea().setScrollbarLayoutDirection(scrollbarPainter);
     scrollbarMap()->add(&scrollbar, scrollbarPainter);
     updateEnabledState(scrollbar);
     updateScrollbarOverlayStyle(scrollbar);

Modified: trunk/Source/WebCore/platform/spi/mac/NSScrollerImpSPI.h (198783 => 198784)


--- trunk/Source/WebCore/platform/spi/mac/NSScrollerImpSPI.h	2016-03-29 16:49:07 UTC (rev 198783)
+++ trunk/Source/WebCore/platform/spi/mac/NSScrollerImpSPI.h	2016-03-29 17:16:25 UTC (rev 198784)
@@ -79,6 +79,7 @@
 @property(readonly) CGFloat knobMinLength;
 @property(readonly) CGFloat knobOverlapEndInset;
 @property(readonly) CGFloat trackOverlapEndInset;
+@property NSUserInterfaceLayoutDirection userInterfaceLayoutDirection;
 - (NSRect)rectForPart:(NSScrollerPart)partCode;
 - (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag alpha:(CGFloat)alpha;
 - (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to