Changeset 198784 in webkit


Ignore:
Timestamp:
Mar 29, 2016 10:16:25 AM (8 years ago)
Author:
mmaxfield@apple.com
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:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r198783 r198784  
     12016-03-29  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [OS X] [RTL Scrollbars] Overlay RTL scrollbars animate in from the wrong side
     4        https://bugs.webkit.org/show_bug.cgi?id=155962
     5
     6        Reviewed by Simon Fraser.
     7
     8        We can control the animation direction with the NSScrollerImp property
     9        userInterfaceLayoutDirection.
     10
     11        Not testable.
     12
     13        * platform/ScrollableArea.cpp:
     14        (WebCore::ScrollableArea::setScrollbarLayoutDirection):
     15        * platform/ScrollableArea.h:
     16        (WebCore::ScrollableArea::horizontalScrollbar):
     17        (WebCore::ScrollableArea::verticalScrollbar):
     18        (WebCore::ScrollableArea::tiledBacking):
     19        (WebCore::ScrollableArea::layerForHorizontalScrollbar):
     20        (WebCore::ScrollableArea::layerForVerticalScrollbar):
     21        (WebCore::ScrollableArea::layerForScrolling):
     22        (WebCore::ScrollableArea::layerForScrollCorner):
     23        (WebCore::ScrollableArea::layerForOverhangAreas):
     24        * platform/mac/ScrollAnimatorMac.mm:
     25        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
     26        * platform/mac/ScrollableAreaMac.mm:
     27        (WebCore::ScrollableArea::setScrollbarDirection):
     28        * platform/mac/ScrollbarThemeMac.mm:
     29        (WebCore::ScrollbarThemeMac::registerScrollbar):
     30        * platform/spi/mac/NSScrollerImpSPI.h:
     31
    1322016-03-29  Dan Bernstein  <mitz@apple.com>
    233
  • trunk/Source/WebCore/platform/ScrollableArea.h

    r198369 r198784  
    3030#include <wtf/Vector.h>
    3131
     32#if PLATFORM(COCOA)
     33OBJC_CLASS NSScrollerImp;
     34#endif
     35
    3236namespace WebCore {
    3337
     
    181185    WEBCORE_EXPORT IntSize scrollbarIntrusion() const;
    182186
    183     virtual Scrollbar* horizontalScrollbar() const { return 0; }
    184     virtual Scrollbar* verticalScrollbar() const { return 0; }
     187    virtual Scrollbar* horizontalScrollbar() const { return nullptr; }
     188    virtual Scrollbar* verticalScrollbar() const { return nullptr; }
    185189
    186190    const IntPoint& scrollOrigin() const { return m_scrollOrigin; }
     
    294298#endif
    295299
    296     virtual TiledBacking* tiledBacking() const { return 0; }
     300    virtual TiledBacking* tiledBacking() const { return nullptr; }
    297301
    298302    // True if scrolling happens by moving compositing layers.
     
    301305    virtual bool usesAsyncScrolling() const { return false; }
    302306
    303     virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
    304     virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; }
     307    virtual GraphicsLayer* layerForHorizontalScrollbar() const { return nullptr; }
     308    virtual GraphicsLayer* layerForVerticalScrollbar() const { return nullptr; }
    305309
    306310    bool hasLayerForHorizontalScrollbar() const;
     
    315319    bool verticalScrollbarIsOnLeft() const;
    316320    static bool systemLanguageIsRTL();
     321#if PLATFORM(COCOA)
     322    void setScrollbarLayoutDirection(NSScrollerImp *) const;
     323#endif
    317324
    318325protected:
     
    328335
    329336    friend class ScrollingCoordinator;
    330     virtual GraphicsLayer* layerForScrolling() const { return 0; }
    331     virtual GraphicsLayer* layerForScrollCorner() const { return 0; }
     337    virtual GraphicsLayer* layerForScrolling() const { return nullptr; }
     338    virtual GraphicsLayer* layerForScrollCorner() const { return nullptr; }
    332339#if ENABLE(RUBBER_BANDING)
    333     virtual GraphicsLayer* layerForOverhangAreas() const { return 0; }
     340    virtual GraphicsLayer* layerForOverhangAreas() const { return nullptr; }
    334341#endif
    335342
  • trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm

    r198756 r198784  
    13051305        NSScrollerImp *oldVerticalPainter = [m_scrollbarPainterController verticalScrollerImp];
    13061306        NSScrollerImp *newVerticalPainter = [NSScrollerImp scrollerImpWithStyle:newStyle controlSize:(NSControlSize)verticalScrollbar->controlSize() horizontal:NO replacingScrollerImp:oldVerticalPainter];
     1307        m_scrollableArea.setScrollbarLayoutDirection(newVerticalPainter);
    13071308
    13081309        [m_scrollbarPainterController setVerticalScrollerImp:newVerticalPainter];
     
    13211322        NSScrollerImp *oldHorizontalPainter = [m_scrollbarPainterController horizontalScrollerImp];
    13221323        NSScrollerImp *newHorizontalPainter = [NSScrollerImp scrollerImpWithStyle:newStyle controlSize:(NSControlSize)horizontalScrollbar->controlSize() horizontal:YES replacingScrollerImp:oldHorizontalPainter];
     1324        m_scrollableArea.setScrollbarLayoutDirection(newHorizontalPainter);
    13231325
    13241326        [m_scrollbarPainterController setHorizontalScrollerImp:newHorizontalPainter];
  • trunk/Source/WebCore/platform/mac/ScrollableAreaMac.mm

    r198369 r198784  
    5555}
    5656
     57void ScrollableArea::setScrollbarLayoutDirection(NSScrollerImp *scroller) const
     58{
     59#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200
     60    scroller.userInterfaceLayoutDirection = verticalScrollbarIsOnLeft() ? NSUserInterfaceLayoutDirectionRightToLeft : NSUserInterfaceLayoutDirectionLeftToRight;
     61#else
     62    UNUSED_PARAM(scroller);
     63#endif
    5764}
     65
     66}
  • trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm

    r198717 r198784  
    161161    bool isHorizontal = scrollbar.orientation() == HorizontalScrollbar;
    162162    NSScrollerImp *scrollbarPainter = [NSScrollerImp scrollerImpWithStyle:recommendedScrollerStyle() controlSize:scrollbarControlSizeToNSControlSize(scrollbar.controlSize()) horizontal:isHorizontal replacingScrollerImp:nil];
     163    scrollbar.scrollableArea().setScrollbarLayoutDirection(scrollbarPainter);
    163164    scrollbarMap()->add(&scrollbar, scrollbarPainter);
    164165    updateEnabledState(scrollbar);
  • trunk/Source/WebCore/platform/spi/mac/NSScrollerImpSPI.h

    r198445 r198784  
    8080@property(readonly) CGFloat knobOverlapEndInset;
    8181@property(readonly) CGFloat trackOverlapEndInset;
     82@property NSUserInterfaceLayoutDirection userInterfaceLayoutDirection;
    8283- (NSRect)rectForPart:(NSScrollerPart)partCode;
    8384- (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag alpha:(CGFloat)alpha;
Note: See TracChangeset for help on using the changeset viewer.