Changeset 276182 in webkit
- Timestamp:
- Apr 16, 2021, 4:55:14 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 37 edited
- 2 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (1 diff)
-
LayoutTests/css3/flexbox/child-overflow-expected.html (modified) (1 diff)
-
LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt (modified) (1 diff)
-
LayoutTests/fast/repaint/vertical-overflow-same-expected.txt (modified) (1 diff)
-
LayoutTests/fast/scrolling/v-rl-scrollbars-initial-position-dynamic-expected.html (added)
-
LayoutTests/fast/scrolling/v-rl-scrollbars-initial-position-dynamic.html (added)
-
LayoutTests/fast/scrolling/v-rl-scrollbars-initial-position-expected.html (added)
-
LayoutTests/fast/scrolling/v-rl-scrollbars-initial-position.html (added)
-
LayoutTests/fast/scrolling/vertical-scrollbar-position-expected.txt (added)
-
LayoutTests/fast/scrolling/vertical-scrollbar-position.html (added)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt (modified) (1 diff)
-
LayoutTests/platform/ios/TestExpectations (modified) (2 diffs)
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-scroll-snap (added)
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt )
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom-view (added)
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt )
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/page/EventHandler.cpp (modified) (1 diff)
-
Source/WebCore/page/FrameView.cpp (modified) (1 diff)
-
Source/WebCore/page/FrameView.h (modified) (1 diff)
-
Source/WebCore/platform/ScrollView.cpp (modified) (6 diffs)
-
Source/WebCore/platform/ScrollableArea.h (modified) (1 diff)
-
Source/WebCore/platform/adwaita/ScrollbarThemeAdwaita.cpp (modified) (3 diffs)
-
Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp (modified) (2 diffs)
-
Source/WebCore/platform/mac/ScrollbarThemeMac.mm (modified) (1 diff)
-
Source/WebCore/platform/win/PopupMenuWin.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderBlock.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/RenderBlockFlow.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderBox.cpp (modified) (5 diffs)
-
Source/WebCore/rendering/RenderBoxModelObject.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayer.cpp (modified) (4 diffs)
-
Source/WebCore/rendering/RenderLayerCompositor.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayerModelObject.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/RenderLayerModelObject.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayerScrollableArea.cpp (modified) (7 diffs)
-
Source/WebCore/rendering/RenderLayerScrollableArea.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderListBox.cpp (modified) (9 diffs)
-
Source/WebCore/rendering/RenderListBox.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderView.cpp (modified) (1 diff)
-
Source/WebCore/rendering/style/RenderStyle.cpp (modified) (1 diff)
-
Source/WebCore/rendering/style/RenderStyle.h (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r276180 r276182 1 2021-04-16 Cameron McCormack <heycam@apple.com> 2 3 Place vertical scrollbars at (inline/block)-end edge in all writing modes. 4 https://bugs.webkit.org/show_bug.cgi?id=224224 5 6 Reviewed by Simon Fraser. 7 8 iOS test failure expectations and skips are because we don't support 9 non-overlay scrollbars on the left on that platform. 10 11 * TestExpectations: 12 * css3/flexbox/child-overflow-expected.html: 13 * fast/repaint/vertical-overflow-parent-expected.txt: 14 * fast/repaint/vertical-overflow-same-expected.txt: 15 * fast/scrolling/v-rl-scrollbars-initial-position-dynamic-expected.html: Added. 16 * fast/scrolling/v-rl-scrollbars-initial-position-dynamic.html: Added. 17 * fast/scrolling/v-rl-scrollbars-initial-position-expected.html: Added. 18 * fast/scrolling/v-rl-scrollbars-initial-position.html: Added. 19 * fast/scrolling/vertical-scrollbar-position-expected.txt: Added. 20 * fast/scrolling/vertical-scrollbar-position.html: Added. 21 * platform/ios/TestExpectations: 22 * platform/ios/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt: Added. 23 * platform/ios/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt. 24 1 25 2021-04-16 Jiewen Tan <jiewen_tan@apple.com> 2 26 -
trunk/LayoutTests/TestExpectations
r275917 r276182 4867 4867 imported/w3c/web-platform-tests/css/css-contain/quote-scoping-004.html [ ImageOnlyFailure ] 4868 4868 4869 # Tests that fail because they assume a vertical scrollbar in `writing-mode: vertical-rl` elements will be on the right-hand side 4870 webkit.org/b/224357 imported/w3c/web-platform-tests/css/css-writing-modes/sizing-orthog-vrl-in-htb-013.xht [ ImageOnlyFailure ] 4871 webkit.org/b/224357 imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-vertical-rl.html [ ImageOnlyFailure ] 4872 4869 4873 # @counter-style ref tests that currently fail 4870 4874 imported/w3c/web-platform-tests/css/css-counter-styles/armenian/css3-counter-styles-006.html [ ImageOnlyFailure ] -
trunk/LayoutTests/css3/flexbox/child-overflow-expected.html
r213149 r276182 28 28 p { 29 29 margin-bottom: 30px; 30 } 31 32 .topRight { 33 direction: rtl; /* place scrollbars on the LHS */ 30 34 } 31 35 </style> -
trunk/LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt
r266818 r276182 1 1 (repaint rects 2 (rect 2929 100 100)2 (rect 44 29 100 100) 3 3 ) 4 4 -
trunk/LayoutTests/fast/repaint/vertical-overflow-same-expected.txt
r266818 r276182 1 1 (repaint rects 2 (rect 2921 100 100)2 (rect 44 21 100 100) 3 3 ) 4 4 -
trunk/LayoutTests/imported/w3c/ChangeLog
r276152 r276182 1 2021-04-16 Cameron McCormack <heycam@apple.com> 2 3 Place vertical scrollbars at (inline/block)-end edge in all writing modes. 4 https://bugs.webkit.org/show_bug.cgi?id=224224 5 6 Reviewed by Simon Fraser. 7 8 * web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt: 9 * web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt: 10 1 11 2021-04-16 Tyler Wilcock <twilco.o@protonmail.com> 2 12 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block-expected.txt
r271480 r276182 2 2 PASS Snaps correctly for horizontal-tb writing mode with 'scroll-snap-align: end start' alignment 3 3 FAIL Snaps correctly for vertical-lr writing mode with 'scroll-snap-align: end start' alignment assert_equals: aligns correctly on x expected 115 but got 300 4 FAIL Snaps correctly for vertical-rl writing mode with 'scroll-snap-align: end start' alignment assert_equals: aligns correctly on x expected -315 but got -3004 FAIL Snaps correctly for vertical-rl writing mode with 'scroll-snap-align: end start' alignment assert_equals: aligns correctly on y expected 300 but got 165 5 5 FAIL Snaps correctly for horizontal-tb writing mode with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on x expected 115 but got 0 6 6 FAIL Snaps correctly for vertical-lr writing mode with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on x expected 300 but got 0 7 FAIL Snaps correctly for vertical-rl writing mode with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on x expected -500 but got -4858 FAIL Snaps correctly for 'direction: rtl' with 'scroll-snap-align: end start' alignment assert_equals: aligns correctly on x expected -500 but got -4859 FAIL Snaps correctly for 'direction: rtl' with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on x expected -315 but got -3007 FAIL Snaps correctly for vertical-rl writing mode with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on y expected 165 but got 300 8 FAIL Snaps correctly for 'direction: rtl' with 'scroll-snap-align: end start' alignment assert_equals: aligns correctly on y expected 165 but got 0 9 FAIL Snaps correctly for 'direction: rtl' with 'scroll-snap-align: start end' alignment assert_equals: aligns correctly on y expected 300 but got 0 10 10 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollLeftTop-expected.txt
r267650 r276182 12 12 PASS writing-mode:vertical-lr; direction:ltr 13 13 PASS writing-mode:vertical-lr; direction:rtl 14 FAIL writing-mode:vertical-rl; direction:ltr assert_approx_equals: ending scrollLeft expected -165 +/- 0.5 but got -150 15 FAIL writing-mode:vertical-rl; direction:rtl assert_approx_equals: ending scrollLeft expected -165 +/- 0.5 but got -150 14 PASS writing-mode:vertical-rl; direction:ltr 15 PASS writing-mode:vertical-rl; direction:rtl 16 16 -
trunk/LayoutTests/platform/ios/TestExpectations
r276166 r276182 1062 1062 1063 1063 # RTL Scrollbars are only implemented on certain versions of OS X 1064 css3/flexbox/child-overflow.html [ Skip ] 1064 1065 fast/scrolling/rtl-scrollbars-iframe-scrolled.html [ Skip ] 1065 1066 fast/scrolling/rtl-scrollbars-listbox-scroll.html [ Skip ] … … 1069 1070 fast/scrolling/rtl-scrollbars-text-selection-scrolled.html [ Skip ] 1070 1071 fast/scrolling/rtl-scrollbars-text-selection.html [ Skip ] 1072 fast/scrolling/v-rl-scrollbars-initial-position-dynamic.html [ Skip ] 1073 fast/scrolling/v-rl-scrollbars-initial-position.html [ Skip ] 1074 fast/scrolling/vertical-scrollbar-position.html [ Skip ] 1071 1075 1072 1076 # This is specific to extensions on macOS -
trunk/Source/WebCore/ChangeLog
r276181 r276182 1 2021-04-16 Cameron McCormack <heycam@apple.com> 2 3 Place vertical scrollbars at (inline/block)-end edge in all writing modes. 4 https://bugs.webkit.org/show_bug.cgi?id=224224 5 6 Reviewed by Simon Fraser. 7 8 Tests: fast/scrolling/v-rl-scrollbars-initial-position-dynamic.html 9 fast/scrolling/v-rl-scrollbars-initial-position.html 10 fast/scrolling/vertical-scrollbar-position.html 11 12 We currently only consider moving a vertical scrollbar to the left for 13 `writing-mode: horizontal-{tb,bt}; direction: rtl` containers. But 14 ideally we should always place the vertical scrollbar at the end edge 15 of the container (whether that's the inline-end edge, when using a 16 horizontal writing mode, or the block-end edge, when using a vertical 17 writing mode). 18 19 Some functions calling the existing shouldPlaceBlockDirectionScrollbarOnLeft 20 instead really care about whether the vertical scrollbar is on the 21 left, not whether the block direction scrollbar is on the left (since 22 for vertical writing modes, the block direction scrollbar is the 23 horizontal one on the bottom). So we rename this to 24 shouldPlaceVerticalScrollbarOnLeft, make it return true for 25 `writing-mode: vertical-rl`, and adjust callers that really do care 26 only about block direction scrollbars to additionally check their 27 writing mode. 28 29 * page/EventHandler.cpp: 30 (WebCore::EventHandler::selectCursor): 31 * page/FrameView.cpp: 32 (WebCore::FrameView::shouldPlaceVerticalScrollbarOnLeft const): 33 * page/FrameView.h: 34 * platform/ScrollView.cpp: 35 (WebCore::ScrollView::documentScrollPositionRelativeToViewOrigin const): 36 (WebCore::ScrollView::updateScrollbars): 37 (WebCore::ScrollView::scrollCornerRect const): 38 (WebCore::ScrollView::locationOfContents const): 39 * platform/ScrollableArea.h: 40 * platform/adwaita/ScrollbarThemeAdwaita.cpp: 41 (WebCore::ScrollbarThemeAdwaita::paint): 42 * platform/gtk/ScrollbarThemeGtk.cpp: 43 (WebCore::widgetTypeForScrollbar): 44 (WebCore::ScrollbarThemeGtk::paint): 45 * platform/mac/ScrollbarThemeMac.mm: 46 (WebCore::ScrollbarThemeMac::didCreateScrollerImp): 47 * platform/win/PopupMenuWin.h: 48 * rendering/RenderBlock.cpp: 49 (WebCore::RenderBlock::logicalLeftOffsetForContent const): 50 (WebCore::RenderBlock::logicalRightOffsetForContent const): 51 * rendering/RenderBlockFlow.cpp: 52 (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild): 53 * rendering/RenderBox.cpp: 54 (WebCore::RenderBox::paddingBoxRect const): 55 (WebCore::RenderBox::contentBoxLocation const): 56 (WebCore::RenderBox::overflowClipRect const): 57 (WebCore::RenderBox::computePositionedLogicalWidth const): 58 (WebCore::RenderBox::flippedClientBoxRect const): 59 * rendering/RenderBoxModelObject.cpp: 60 (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition const): 61 * rendering/RenderLayer.cpp: 62 (WebCore::RenderLayer::scrollRectToVisible): 63 (WebCore::RenderLayer::resize): 64 (WebCore::RenderLayer::overflowControlsRects const): 65 (WebCore::RenderLayer::offsetFromResizeCorner const): 66 * rendering/RenderLayerCompositor.cpp: 67 (WebCore::RenderLayerCompositor::positionForClipLayer const): 68 * rendering/RenderLayerModelObject.cpp: 69 (WebCore::RenderLayerModelObject::shouldPlaceVerticalScrollbarOnLeft const): 70 * rendering/RenderLayerModelObject.h: 71 * rendering/RenderLayerScrollableArea.cpp: 72 (WebCore::RenderLayerScrollableArea::shouldPlaceVerticalScrollbarOnLeft const): 73 (WebCore::RenderLayerScrollableArea::overflowControlsRects const): 74 (WebCore::RenderLayerScrollableArea::computeScrollOrigin): 75 (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout): 76 (WebCore::RenderLayerScrollableArea::drawPlatformResizerImage): 77 (WebCore::RenderLayerScrollableArea::hitTestResizerInFragments const): 78 (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange): 79 * rendering/RenderLayerScrollableArea.h: 80 * rendering/RenderListBox.cpp: 81 (WebCore::RenderListBox::itemBoundingBoxRect): 82 (WebCore::RenderListBox::paintScrollbar): 83 (WebCore::RenderListBox::isPointInOverflowControl): 84 (WebCore::RenderListBox::listIndexAtOffset): 85 (WebCore::RenderListBox::invalidateScrollbarRect): 86 (WebCore::RenderListBox::convertFromScrollbarToContainingView const): 87 (WebCore::RenderListBox::convertFromContainingViewToScrollbar const): 88 * rendering/RenderListBox.h: 89 * rendering/RenderView.cpp: 90 (WebCore::RenderView::repaintViewRectangle const): 91 * rendering/style/RenderStyle.cpp: 92 (WebCore::RenderStyle::shouldPlaceVerticalScrollbarOnLeft const): 93 * rendering/style/RenderStyle.h: 94 1 95 2021-04-16 Wenson Hsieh <wenson_hsieh@apple.com> 2 96 -
trunk/Source/WebCore/page/EventHandler.cpp
r275988 r276182 1519 1519 inResizer = layerRenderer.layer()->isPointInResizeControl(roundedIntPoint(result.localPoint())); 1520 1520 if (inResizer) 1521 return layerRenderer.shouldPlace BlockDirectionScrollbarOnLeft() ? southWestResizeCursor() : southEastResizeCursor();1521 return layerRenderer.shouldPlaceVerticalScrollbarOnLeft() ? southWestResizeCursor() : southEastResizeCursor(); 1522 1522 } 1523 1523 -
trunk/Source/WebCore/page/FrameView.cpp
r274464 r276182 5554 5554 } 5555 5555 5556 bool FrameView::shouldPlace BlockDirectionScrollbarOnLeft() const5557 { 5558 return renderView() && renderView()->shouldPlace BlockDirectionScrollbarOnLeft();5556 bool FrameView::shouldPlaceVerticalScrollbarOnLeft() const 5557 { 5558 return renderView() && renderView()->shouldPlaceVerticalScrollbarOnLeft(); 5559 5559 } 5560 5560 -
trunk/Source/WebCore/page/FrameView.h
r274958 r276182 656 656 void hide() final; 657 657 658 bool shouldPlace BlockDirectionScrollbarOnLeft() const final;658 bool shouldPlaceVerticalScrollbarOnLeft() const final; 659 659 660 660 void didRestoreFromBackForwardCache(); -
trunk/Source/WebCore/platform/ScrollView.cpp
r274464 r276182 423 423 { 424 424 return scrollPosition() - IntSize( 425 shouldPlace BlockDirectionScrollbarOnLeft() && m_verticalScrollbar ? m_verticalScrollbar->occupiedWidth() : 0,425 shouldPlaceVerticalScrollbarOnLeft() && m_verticalScrollbar ? m_verticalScrollbar->occupiedWidth() : 0, 426 426 headerHeight() + topContentInset(TopContentInsetType::WebCoreOrPlatformContentInset)); 427 427 } … … 733 733 int clientWidth = visibleWidth(); 734 734 IntRect oldRect(m_horizontalScrollbar->frameRect()); 735 IntRect hBarRect(shouldPlace BlockDirectionScrollbarOnLeft() && m_verticalScrollbar ? m_verticalScrollbar->occupiedWidth() : 0,735 IntRect hBarRect(shouldPlaceVerticalScrollbarOnLeft() && m_verticalScrollbar ? m_verticalScrollbar->occupiedWidth() : 0, 736 736 height() - m_horizontalScrollbar->height(), 737 737 width() - (m_verticalScrollbar ? m_verticalScrollbar->occupiedWidth() : 0), … … 752 752 int clientHeight = visibleHeight(); 753 753 IntRect oldRect(m_verticalScrollbar->frameRect()); 754 IntRect vBarRect(shouldPlace BlockDirectionScrollbarOnLeft() ? 0 : width() - m_verticalScrollbar->width(),754 IntRect vBarRect(shouldPlaceVerticalScrollbarOnLeft() ? 0 : width() - m_verticalScrollbar->width(), 755 755 topContentInset(), 756 756 m_verticalScrollbar->width(), … … 1180 1180 1181 1181 if (m_horizontalScrollbar && width() - m_horizontalScrollbar->width() > 0) { 1182 cornerRect.unite(IntRect(shouldPlace BlockDirectionScrollbarOnLeft() ? 0 : m_horizontalScrollbar->width(),1182 cornerRect.unite(IntRect(shouldPlaceVerticalScrollbarOnLeft() ? 0 : m_horizontalScrollbar->width(), 1183 1183 height() - m_horizontalScrollbar->height(), 1184 1184 width() - m_horizontalScrollbar->width(), … … 1187 1187 1188 1188 if (m_verticalScrollbar && heightTrackedByScrollbar - m_verticalScrollbar->height() > 0) { 1189 cornerRect.unite(IntRect(shouldPlace BlockDirectionScrollbarOnLeft() ? 0 : width() - m_verticalScrollbar->width(),1189 cornerRect.unite(IntRect(shouldPlaceVerticalScrollbarOnLeft() ? 0 : width() - m_verticalScrollbar->width(), 1190 1190 m_verticalScrollbar->height() + topContentInset(), 1191 1191 m_verticalScrollbar->width(), … … 1539 1539 { 1540 1540 IntPoint result = location(); 1541 if (shouldPlace BlockDirectionScrollbarOnLeft() && m_verticalScrollbar)1541 if (shouldPlaceVerticalScrollbarOnLeft() && m_verticalScrollbar) 1542 1542 result.move(m_verticalScrollbar->occupiedWidth(), 0); 1543 1543 return result; -
trunk/Source/WebCore/platform/ScrollableArea.h
r275354 r276182 343 343 virtual void logMockScrollAnimatorMessage(const String&) const { }; 344 344 345 virtual bool shouldPlace BlockDirectionScrollbarOnLeft() const = 0;345 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0; 346 346 347 347 virtual String debugDescription() const = 0; -
trunk/Source/WebCore/platform/adwaita/ScrollbarThemeAdwaita.cpp
r264584 r276182 128 128 IntRect frame = rect; 129 129 if (scrollbar.orientation() == VerticalScrollbar) { 130 if (scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft())130 if (scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft()) 131 131 frame.move(frame.width() - hoveredScrollbarBorderSize, 0); 132 132 frame.setWidth(hoveredScrollbarBorderSize); … … 141 141 if (scrollbar.hoveredPart() == NoPart && usesOverlayScrollbars()) { 142 142 if (scrollbar.orientation() == VerticalScrollbar) { 143 if (scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft())143 if (scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft()) 144 144 thumb.move(hoveredScrollbarBorderSize, thumbPos + thumbBorderSize); 145 145 else … … 154 154 } else { 155 155 if (scrollbar.orientation() == VerticalScrollbar) { 156 if (scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft())156 if (scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft()) 157 157 thumb.move(scrollbarSize - (scrollbarSize / 2 + thumbSize / 2) - hoveredScrollbarBorderSize, thumbPos + thumbBorderSize); 158 158 else -
trunk/Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
r260070 r276182 143 143 { 144 144 if (scrollbar.orientation() == VerticalScrollbar) { 145 if (scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft())145 if (scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft()) 146 146 return scrollbarState & GTK_STATE_FLAG_PRELIGHT ? RenderThemeScrollbar::Type::VerticalScrollbarLeft : RenderThemeScrollbar::Type::VerticalScrollIndicatorLeft; 147 147 return scrollbarState & GTK_STATE_FLAG_PRELIGHT ? RenderThemeScrollbar::Type::VerticalScrollbarRight : RenderThemeScrollbar::Type::VerticalScrollIndicatorRight; … … 381 381 if (scrollbar.orientation() == VerticalScrollbar) { 382 382 if (rect.width() != preferredSize.width()) { 383 if (!scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft())383 if (!scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft()) 384 384 contentsRect.move(std::abs(rect.width() - preferredSize.width()), 0); 385 385 contentsRect.setWidth(preferredSize.width()); -
trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm
r271057 r276182 160 160 NSScrollerImp *scrollerImp = painterForScrollbar(scrollbar); 161 161 ASSERT(scrollerImp); 162 scrollerImp.userInterfaceLayoutDirection = scrollbar.scrollableArea().shouldPlace BlockDirectionScrollbarOnLeft() ? NSUserInterfaceLayoutDirectionRightToLeft : NSUserInterfaceLayoutDirectionLeftToRight;162 scrollerImp.userInterfaceLayoutDirection = scrollbar.scrollableArea().shouldPlaceVerticalScrollbarOnLeft() ? NSUserInterfaceLayoutDirectionRightToLeft : NSUserInterfaceLayoutDirectionLeftToRight; 163 163 #else 164 164 UNUSED_PARAM(scrollbar); -
trunk/Source/WebCore/platform/win/PopupMenuWin.h
r259597 r276182 105 105 IntRect scrollableAreaBoundingBox(bool* = nullptr) const override; 106 106 bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const override { return false; } 107 bool shouldPlace BlockDirectionScrollbarOnLeft() const final { return false; }107 bool shouldPlaceVerticalScrollbarOnLeft() const final { return false; } 108 108 109 109 // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea. -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r275754 r276182 1924 1924 { 1925 1925 LayoutUnit logicalLeftOffset = style().isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); 1926 if (shouldPlace BlockDirectionScrollbarOnLeft())1926 if (shouldPlaceVerticalScrollbarOnLeft() && isHorizontalWritingMode()) 1927 1927 logicalLeftOffset += verticalScrollbarWidth(); 1928 1928 if (!fragment) … … 1935 1935 { 1936 1936 LayoutUnit logicalRightOffset = style().isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); 1937 if (shouldPlace BlockDirectionScrollbarOnLeft())1937 if (shouldPlaceVerticalScrollbarOnLeft() && isHorizontalWritingMode()) 1938 1938 logicalRightOffset += verticalScrollbarWidth(); 1939 1939 logicalRightOffset += availableLogicalWidth(); -
trunk/Source/WebCore/rendering/RenderBlockFlow.cpp
r275494 r276182 884 884 { 885 885 LayoutUnit startPosition = borderStart() + paddingStart(); 886 if (shouldPlace BlockDirectionScrollbarOnLeft())886 if (shouldPlaceVerticalScrollbarOnLeft() && isHorizontalWritingMode()) 887 887 startPosition += (style().isLeftToRightDirection() ? 1 : -1) * verticalScrollbarWidth(); 888 888 LayoutUnit totalAvailableLogicalWidth = borderAndPaddingLogicalWidth() + availableLogicalWidth(); -
trunk/Source/WebCore/rendering/RenderBox.cpp
r275908 r276182 723 723 { 724 724 auto verticalScrollbarWidth = this->verticalScrollbarWidth(); 725 LayoutUnit offsetForScrollbar = shouldPlace BlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth : 0;725 LayoutUnit offsetForScrollbar = shouldPlaceVerticalScrollbarOnLeft() ? verticalScrollbarWidth : 0; 726 726 727 727 return LayoutRect(borderLeft() + offsetForScrollbar, borderTop(), … … 737 737 LayoutPoint RenderBox::contentBoxLocation() const 738 738 { 739 LayoutUnit scrollbarSpace = shouldPlace BlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth() : 0;739 LayoutUnit scrollbarSpace = shouldPlaceVerticalScrollbarOnLeft() ? verticalScrollbarWidth() : 0; 740 740 return { borderLeft() + paddingLeft() + scrollbarSpace, borderTop() + paddingTop() }; 741 741 } … … 1965 1965 // Subtract out scrollbars if we have them. 1966 1966 if (auto* scrollableArea = layer() ? layer()->scrollableArea() : nullptr) { 1967 if (shouldPlace BlockDirectionScrollbarOnLeft())1967 if (shouldPlaceVerticalScrollbarOnLeft()) 1968 1968 clipRect.move(scrollableArea->verticalScrollbarWidth(relevancy), 0); 1969 1969 clipRect.contract(scrollableArea->verticalScrollbarWidth(relevancy), scrollableArea->horizontalScrollbarHeight(relevancy)); … … 3760 3760 if (is<RenderBox>(containerBlock)) { 3761 3761 auto& containingBox = downcast<RenderBox>(containerBlock); 3762 if (containingBox.shouldPlace BlockDirectionScrollbarOnLeft())3762 if (containingBox.shouldPlaceVerticalScrollbarOnLeft() && isHorizontalWritingMode()) 3763 3763 computedValues.m_position += containingBox.verticalScrollbarWidth(); 3764 3764 } … … 4981 4981 // Subtract space occupied by scrollbars. They are at their physical edge in this coordinate 4982 4982 // system, so order is important here: first flip, then subtract scrollbars. 4983 if (shouldPlace BlockDirectionScrollbarOnLeft())4983 if (shouldPlaceVerticalScrollbarOnLeft() && isHorizontalWritingMode()) 4984 4984 rect.move(verticalScrollbarWidth(), 0); 4985 4985 rect.contract(verticalScrollbarWidth(), horizontalScrollbarHeight()); -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r275758 r276182 557 557 558 558 float scrollbarOffset = 0; 559 if (enclosingClippingBox.hasLayer() && enclosingClippingBox.shouldPlace BlockDirectionScrollbarOnLeft() && scrollableArea)559 if (enclosingClippingBox.hasLayer() && enclosingClippingBox.shouldPlaceVerticalScrollbarOnLeft() && scrollableArea) 560 560 scrollbarOffset = scrollableArea->verticalScrollbarWidth(IgnoreOverlayScrollbarSize); 561 561 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r275641 r276182 2431 2431 localExposeRect.moveBy(-LayoutPoint(box->borderLeft(), box->borderTop())); 2432 2432 2433 if (box->shouldPlaceBlockDirectionScrollbarOnLeft()) { 2434 // For direction: rtl; writing-mode: horizontal-tb box, the scroll bar is on the left side. The visible rect 2435 // starts from the right side of scroll bar. So the x of localExposeRect should start from the same position too. 2433 if (box->shouldPlaceVerticalScrollbarOnLeft()) { 2434 // For `direction: rtl; writing-mode: horizontal-{tb,bt}` and `writing-mode: vertical-rl` 2435 // boxes, the scroll bar is on the left side. The visible rect starts from the right side 2436 // of the scroll bar. So the x of localExposeRect should start from the same position too. 2436 2437 localExposeRect.moveBy(LayoutPoint(-scrollableArea->verticalScrollbarWidth(), 0)); 2437 2438 } … … 2677 2678 2678 2679 LayoutSize adjustedOldOffset = LayoutSize(oldOffset.width() / zoomFactor, oldOffset.height() / zoomFactor); 2679 if (renderer->shouldPlace BlockDirectionScrollbarOnLeft()) {2680 if (renderer->shouldPlaceVerticalScrollbarOnLeft()) { 2680 2681 newOffset.setWidth(-newOffset.width()); 2681 2682 adjustedOldOffset.setWidth(-adjustedOldOffset.width()); … … 2734 2735 auto overflowControlsPositioningRect = snappedIntRect(renderBox.paddingBoxRectIncludingScrollbar()); 2735 2736 2736 bool placeVerticalScrollbarOnTheLeft = renderBox.shouldPlace BlockDirectionScrollbarOnLeft();2737 bool placeVerticalScrollbarOnTheLeft = renderBox.shouldPlaceVerticalScrollbarOnLeft(); 2737 2738 bool haveResizer = renderer().style().resize() != Resize::None; 2738 2739 … … 2787 2788 { 2788 2789 auto resizerRect = overflowControlsRects().resizer; 2789 auto resizeCorner = renderer().shouldPlace BlockDirectionScrollbarOnLeft() ? resizerRect.minXMaxYCorner() : resizerRect.maxXMaxYCorner();2790 auto resizeCorner = renderer().shouldPlaceVerticalScrollbarOnLeft() ? resizerRect.minXMaxYCorner() : resizerRect.maxXMaxYCorner(); 2790 2791 return localPoint - resizeCorner; 2791 2792 } -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r276085 r276182 2231 2231 2232 2232 return FloatPoint( 2233 frameView.shouldPlace BlockDirectionScrollbarOnLeft() ? frameView.horizontalScrollbarIntrusion() : 0,2233 frameView.shouldPlaceVerticalScrollbarOnLeft() ? frameView.horizontalScrollbarIntrusion() : 0, 2234 2234 FrameView::yPositionForInsetClipLayer(frameView.scrollPosition(), frameView.topContentInset())); 2235 2235 } -
trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp
r275641 r276182 208 208 } 209 209 210 bool RenderLayerModelObject::shouldPlace BlockDirectionScrollbarOnLeft() const210 bool RenderLayerModelObject::shouldPlaceVerticalScrollbarOnLeft() const 211 211 { 212 212 // RTL Scrollbars require some system support, and this system support does not exist on certain versions of OS X. iOS uses a separate mechanism. … … 216 216 switch (settings().userInterfaceDirectionPolicy()) { 217 217 case UserInterfaceDirectionPolicy::Content: 218 return style().shouldPlace BlockDirectionScrollbarOnLeft();218 return style().shouldPlaceVerticalScrollbarOnLeft(); 219 219 case UserInterfaceDirectionPolicy::System: 220 220 return settings().systemLayoutDirection() == TextDirection::RTL; 221 221 } 222 222 ASSERT_NOT_REACHED(); 223 return style().shouldPlace BlockDirectionScrollbarOnLeft();223 return style().shouldPlaceVerticalScrollbarOnLeft(); 224 224 #endif 225 225 } -
trunk/Source/WebCore/rendering/RenderLayerModelObject.h
r275641 r276182 57 57 virtual bool isScrollableOrRubberbandableBox() const { return false; } 58 58 59 bool shouldPlace BlockDirectionScrollbarOnLeft() const;59 bool shouldPlaceVerticalScrollbarOnLeft() const; 60 60 61 61 Optional<LayerRepaintRects> layerRepaintRects() const; -
trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp
r275811 r276182 120 120 } 121 121 122 bool RenderLayerScrollableArea::shouldPlace BlockDirectionScrollbarOnLeft() const123 { 124 return m_layer.renderer().shouldPlace BlockDirectionScrollbarOnLeft();122 bool RenderLayerScrollableArea::shouldPlaceVerticalScrollbarOnLeft() const 123 { 124 return m_layer.renderer().shouldPlaceVerticalScrollbarOnLeft(); 125 125 } 126 126 … … 655 655 bool haveNonOverlayHorizontalScrollbar = isNonOverlayScrollbar(m_hBar.get()); 656 656 bool haveNonOverlayVerticalScrollbar = isNonOverlayScrollbar(m_vBar.get()); 657 bool placeVerticalScrollbarOnTheLeft = shouldPlace BlockDirectionScrollbarOnLeft();657 bool placeVerticalScrollbarOnTheLeft = shouldPlaceVerticalScrollbarOnLeft(); 658 658 bool haveResizer = renderer.style().resize() != Resize::None; 659 659 bool scrollbarsAvoidCorner = (haveNonOverlayHorizontalScrollbar && haveNonOverlayVerticalScrollbar) || (haveResizer && (haveNonOverlayHorizontalScrollbar || haveNonOverlayVerticalScrollbar)); … … 1022 1022 1023 1023 int scrollableLeftOverflow = roundToInt(overflowLeft() - box->borderLeft()); 1024 if (shouldPlace BlockDirectionScrollbarOnLeft())1024 if (shouldPlaceVerticalScrollbarOnLeft() /*|| box->style().writingMode() == WritingMode::RightToLeft*/) 1025 1025 scrollableLeftOverflow -= verticalScrollbarWidth(); 1026 1026 int scrollableTopOverflow = roundToInt(overflowTop() - box->borderTop()); … … 1105 1105 setHasVerticalScrollbar(hasVerticalOverflow); 1106 1106 1107 if (autoVerticalScrollBarChanged && shouldPlace BlockDirectionScrollbarOnLeft())1107 if (autoVerticalScrollBarChanged && shouldPlaceVerticalScrollbarOnLeft()) 1108 1108 computeScrollOrigin(); 1109 1109 … … 1349 1349 } 1350 1350 1351 if (shouldPlace BlockDirectionScrollbarOnLeft()) {1351 if (shouldPlaceVerticalScrollbarOnLeft()) { 1352 1352 context.save(); 1353 1353 context.translate(resizerCornerRect.x() + cornerResizerSize.width(), resizerCornerRect.y() + resizerCornerRect.height() - cornerResizerSize.height()); … … 1510 1510 1511 1511 auto cornerRectInFragment = [&](const IntRect& fragmentBounds, const IntRect& resizerRect) { 1512 if (shouldPlace BlockDirectionScrollbarOnLeft()) {1512 if (shouldPlaceVerticalScrollbarOnLeft()) { 1513 1513 IntSize offsetFromBottomLeft = borderBoxRect.minXMaxYCorner() - resizerRect.minXMaxYCorner(); 1514 1514 return IntRect { fragmentBounds.minXMaxYCorner() - offsetFromBottomLeft - IntSize { 0, resizerRect.height() }, resizerRect.size() }; … … 1571 1571 setHasVerticalScrollbar(needsVerticalScrollbar); 1572 1572 1573 if (hadVerticalScrollbar != needsVerticalScrollbar || (needsVerticalScrollbar && oldStyle && box->style().shouldPlace BlockDirectionScrollbarOnLeft() != oldStyle->shouldPlaceBlockDirectionScrollbarOnLeft()))1573 if (hadVerticalScrollbar != needsVerticalScrollbar || (needsVerticalScrollbar && oldStyle && box->style().shouldPlaceVerticalScrollbarOnLeft() != oldStyle->shouldPlaceVerticalScrollbarOnLeft())) 1574 1574 computeScrollOrigin(); 1575 1575 -
trunk/Source/WebCore/rendering/RenderLayerScrollableArea.h
r275811 r276182 168 168 bool usesAsyncScrolling() const final; 169 169 170 bool shouldPlace BlockDirectionScrollbarOnLeft() const final;170 bool shouldPlaceVerticalScrollbarOnLeft() const final; 171 171 172 172 bool isRenderLayer() const final { return true; } -
trunk/Source/WebCore/rendering/RenderListBox.cpp
r275413 r276182 282 282 { 283 283 LayoutUnit x = additionalOffset.x() + borderLeft() + paddingLeft(); 284 if (shouldPlace BlockDirectionScrollbarOnLeft() && m_vBar)284 if (shouldPlaceVerticalScrollbarOnLeft() && m_vBar) 285 285 x += m_vBar->occupiedWidth(); 286 286 LayoutUnit y = additionalOffset.y() + borderTop() + paddingTop() + itemHeight() * (index - m_indexOffset); … … 364 364 return; 365 365 366 LayoutUnit left = paintOffset.x() + (shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - m_vBar->width());366 LayoutUnit left = paintOffset.x() + (shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - m_vBar->width()); 367 367 LayoutUnit top = paintOffset.y() + borderTop(); 368 368 LayoutUnit width = m_vBar->width(); … … 470 470 return false; 471 471 472 LayoutUnit x = accumulatedOffset.x() + (shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - m_vBar->width());472 LayoutUnit x = accumulatedOffset.x() + (shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - m_vBar->width()); 473 473 LayoutUnit y = accumulatedOffset.y() + borderTop(); 474 474 LayoutUnit width = m_vBar->width(); … … 492 492 493 493 int scrollbarWidth = m_vBar ? m_vBar->width() : 0; 494 if (shouldPlace BlockDirectionScrollbarOnLeft() && (offset.width() < borderLeft() + paddingLeft() + scrollbarWidth || offset.width() > width() - borderRight() - paddingRight()))494 if (shouldPlaceVerticalScrollbarOnLeft() && (offset.width() < borderLeft() + paddingLeft() + scrollbarWidth || offset.width() > width() - borderRight() - paddingRight())) 495 495 return -1; 496 if (!shouldPlace BlockDirectionScrollbarOnLeft() && (offset.width() < borderLeft() + paddingLeft() || offset.width() > width() - borderRight() - paddingRight() - scrollbarWidth))496 if (!shouldPlaceVerticalScrollbarOnLeft() && (offset.width() < borderLeft() + paddingLeft() || offset.width() > width() - borderRight() - paddingRight() - scrollbarWidth)) 497 497 return -1; 498 498 … … 801 801 { 802 802 IntRect scrollRect = rect; 803 scrollRect.move(shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(), borderTop());803 scrollRect.move(shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(), borderTop()); 804 804 repaintRectangle(scrollRect); 805 805 } … … 808 808 { 809 809 IntRect rect = scrollbarRect; 810 int scrollbarLeft = shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width();810 int scrollbarLeft = shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(); 811 811 int scrollbarTop = borderTop(); 812 812 rect.move(scrollbarLeft, scrollbarTop); … … 817 817 { 818 818 IntRect rect = view().frameView().convertFromContainingViewToRenderer(this, parentRect); 819 int scrollbarLeft = shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width();819 int scrollbarLeft = shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(); 820 820 int scrollbarTop = borderTop(); 821 821 rect.move(-scrollbarLeft, -scrollbarTop); … … 826 826 { 827 827 IntPoint point = scrollbarPoint; 828 int scrollbarLeft = shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width();828 int scrollbarLeft = shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(); 829 829 int scrollbarTop = borderTop(); 830 830 point.move(scrollbarLeft, scrollbarTop); … … 835 835 { 836 836 IntPoint point = view().frameView().convertFromContainingViewToRenderer(this, parentPoint); 837 int scrollbarLeft = shouldPlace BlockDirectionScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width();837 int scrollbarLeft = shouldPlaceVerticalScrollbarOnLeft() ? borderLeft() : width() - borderRight() - scrollbar.width(); 838 838 int scrollbarTop = borderTop(); 839 839 point.move(-scrollbarLeft, -scrollbarTop); -
trunk/Source/WebCore/rendering/RenderListBox.h
r275413 r276182 173 173 void scrollToRevealSelection(); 174 174 175 bool shouldPlace BlockDirectionScrollbarOnLeft() const final { return RenderBlockFlow::shouldPlaceBlockDirectionScrollbarOnLeft(); }175 bool shouldPlaceVerticalScrollbarOnLeft() const final { return RenderBlockFlow::shouldPlaceVerticalScrollbarOnLeft(); } 176 176 177 177 bool m_optionsChanged; -
trunk/Source/WebCore/rendering/RenderView.cpp
r271906 r276182 474 474 // left scrollbar (if one exists). 475 475 FrameView& frameView = this->frameView(); 476 if (frameView.shouldPlace BlockDirectionScrollbarOnLeft() && frameView.verticalScrollbar())476 if (frameView.shouldPlaceVerticalScrollbarOnLeft() && frameView.verticalScrollbar()) 477 477 adjustedRect.move(LayoutSize(frameView.verticalScrollbar()->occupiedWidth(), 0)); 478 478 -
trunk/Source/WebCore/rendering/style/RenderStyle.cpp
r275650 r276182 2582 2582 } 2583 2583 2584 bool RenderStyle::shouldPlace BlockDirectionScrollbarOnLeft() const2585 { 2586 return !isLeftToRightDirection() && isHorizontalWritingMode();2584 bool RenderStyle::shouldPlaceVerticalScrollbarOnLeft() const 2585 { 2586 return (!isLeftToRightDirection() && isHorizontalWritingMode()) || writingMode() == WritingMode::RightToLeft; 2587 2587 } 2588 2588 -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r275199 r276182 830 830 #endif 831 831 832 bool shouldPlace BlockDirectionScrollbarOnLeft() const;832 bool shouldPlaceVerticalScrollbarOnLeft() const; 833 833 834 834 #if ENABLE(CSS_TRAILING_WORD) -
trunk/Source/WebKit/ChangeLog
r276181 r276182 1 2021-04-16 Cameron McCormack <heycam@apple.com> 2 3 Place vertical scrollbars at (inline/block)-end edge in all writing modes. 4 https://bugs.webkit.org/show_bug.cgi?id=224224 5 6 Reviewed by Simon Fraser. 7 8 * UIProcess/win/WebPopupMenuProxyWin.h: 9 * WebProcess/Plugins/PDF/PDFPlugin.h: 10 1 11 2021-04-16 Wenson Hsieh <wenson_hsieh@apple.com> 2 12 -
trunk/Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.h
r259597 r276182 81 81 WebCore::IntSize contentsSize() const override; 82 82 WebCore::IntRect scrollableAreaBoundingBox(bool* = nullptr) const override; 83 bool shouldPlace BlockDirectionScrollbarOnLeft() const override { return false; }83 bool shouldPlaceVerticalScrollbarOnLeft() const override { return false; } 84 84 bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const override { return false; } 85 85 bool isScrollableOrRubberbandable() override { return true; } -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h
r273833 r276182 257 257 WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar&, const WebCore::IntPoint& parentPoint) const final; 258 258 bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const final; 259 bool shouldPlace BlockDirectionScrollbarOnLeft() const final { return false; }259 bool shouldPlaceVerticalScrollbarOnLeft() const final { return false; } 260 260 String debugDescription() const final; 261 261
Note:
See TracChangeset
for help on using the changeset viewer.