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