Changeset 246488 in webkit
- Timestamp:
- Jun 16, 2019, 5:33:32 PM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 20 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/page/FrameView.h (modified) (1 diff)
-
WebCore/platform/ScrollView.cpp (modified) (3 diffs)
-
WebCore/platform/ScrollView.h (modified) (1 diff)
-
WebCore/platform/ScrollableArea.cpp (modified) (3 diffs)
-
WebCore/platform/ScrollableArea.h (modified) (5 diffs)
-
WebCore/platform/Scrollbar.cpp (modified) (2 diffs)
-
WebCore/platform/ios/ScrollAnimatorIOS.mm (modified) (1 diff)
-
WebCore/platform/win/PopupMenuWin.cpp (modified) (3 diffs)
-
WebCore/platform/win/PopupMenuWin.h (modified) (2 diffs)
-
WebCore/rendering/RenderLayer.cpp (modified) (1 diff)
-
WebCore/rendering/RenderLayer.h (modified) (3 diffs)
-
WebCore/rendering/RenderListBox.cpp (modified) (1 diff)
-
WebCore/rendering/RenderListBox.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp (modified) (4 diffs)
-
WebKit/UIProcess/win/WebPopupMenuProxyWin.h (modified) (1 diff)
-
WebKit/WebProcess/Plugins/PDF/PDFPlugin.h (modified) (1 diff)
-
WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm (modified) (2 diffs)
-
WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r246486 r246488 1 2019-06-16 Simon Fraser <simon.fraser@apple.com> 2 3 Implement ScrollableArea::scrollOffset() 4 https://bugs.webkit.org/show_bug.cgi?id=198895 5 6 Reviewed by Antti Koivisto. 7 8 Remove from ScrollableArea the following: 9 virtual int scrollSize(ScrollbarOrientation) const = 0; 10 virtual int scrollOffset(ScrollbarOrientation) const = 0; 11 and instead implement ScrollOffset scrollOffset() const. 12 13 Also make scrollPosition() pure virtual, avoiding the reverse dependency where 14 this base class implementation got values from scrollbars. 15 16 scrollSize(ScrollbarOrientation) was only used by ScrollAnimatorIOS and we can 17 do the same computation via min/max scroll positions. 18 19 RenderListBox and PopupMenuWin need implementations of scrollPosition(). 20 21 Remove some PLATFORM(IOS_FAMILY) #ifdefs from ScrollableArea for code that compiles 22 on all platforms. 23 24 * page/FrameView.h: 25 * platform/ScrollView.cpp: 26 (WebCore::ScrollView::overhangAmount const): 27 (WebCore::ScrollView::scrollSize const): Deleted. 28 (WebCore::ScrollView::scrollOffset const): Deleted. 29 * platform/ScrollView.h: 30 * platform/ScrollableArea.cpp: 31 (WebCore::ScrollableArea::isPinnedVerticallyInDirection const): 32 (WebCore::ScrollableArea::scrollOffset const): 33 (WebCore::ScrollableArea::scrollPosition const): Deleted. 34 * platform/ScrollableArea.h: 35 (WebCore::offsetForOrientation): 36 (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition const): 37 (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition const): 38 (WebCore::ScrollableArea::isVerticalScrollerPinnedToMinimumPosition const): 39 (WebCore::ScrollableArea::isVerticalScrollerPinnedToMaximumPosition const): 40 (WebCore::ScrollableArea::tiledBacking const): Deleted. 41 * platform/Scrollbar.cpp: 42 (WebCore::Scrollbar::Scrollbar): 43 (WebCore::Scrollbar::offsetDidChange): 44 * platform/ios/ScrollAnimatorIOS.mm: 45 (WebCore::ScrollAnimatorIOS::handleTouchEvent): 46 * platform/win/PopupMenuWin.cpp: 47 (WebCore::PopupMenuWin::scrollPosition const): 48 (WebCore::PopupMenuWin::wndProc): 49 (WebCore::PopupMenuWin::scrollSize const): Deleted. 50 (WebCore::PopupMenuWin::scrollOffset const): Deleted. 51 * platform/win/PopupMenuWin.h: 52 (WebCore::PopupMenuWin::scrollOffset const): Deleted. 53 * rendering/RenderLayer.cpp: 54 (WebCore::RenderLayer::scrollSize const): Deleted. 55 (WebCore::RenderLayer::scrollOffset const): Deleted. 56 * rendering/RenderLayer.h: 57 * rendering/RenderListBox.cpp: 58 (WebCore::RenderListBox::scrollPosition const): 59 (WebCore::RenderListBox::scrollSize const): Deleted. 60 (WebCore::RenderListBox::scrollOffset const): Deleted. 61 * rendering/RenderListBox.h: 62 1 63 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 64 -
trunk/Source/WebCore/page/FrameView.h
r245787 r246488 154 154 WEBCORE_EXPORT void scheduleLayerFlushAllowingThrottling(); 155 155 156 WEBCORE_EXPORT TiledBacking* tiledBacking() const final;156 WEBCORE_EXPORT TiledBacking* tiledBacking() const; 157 157 158 158 ScrollingNodeID scrollingNodeID() const override; -
trunk/Source/WebCore/platform/ScrollView.cpp
r245320 r246488 379 379 } 380 380 381 int ScrollView::scrollSize(ScrollbarOrientation orientation) const382 {383 // If no scrollbars are present, it does not indicate content is not be scrollable.384 if (!m_horizontalScrollbar && !m_verticalScrollbar && !prohibitsScrolling()) {385 IntSize scrollSize = m_contentsSize - visibleContentRect(LegacyIOSDocumentVisibleRect).size();386 scrollSize.clampNegativeToZero();387 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollSize.height();388 }389 390 Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get();391 return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0;392 }393 394 381 void ScrollView::notifyPageThatContentAreaWillPaint() const 395 382 { … … 475 462 } 476 463 477 int ScrollView::scrollOffset(ScrollbarOrientation orientation) const478 {479 ScrollOffset offset = scrollOffsetFromPosition(scrollPosition());480 481 if (orientation == HorizontalScrollbar)482 return offset.x();483 484 if (orientation == VerticalScrollbar)485 return offset.y();486 487 return 0;488 }489 490 464 void ScrollView::setScrollPosition(const ScrollPosition& scrollPosition) 491 465 { … … 529 503 530 504 // FIXME: use maximumScrollOffset() 531 ScrollOffset scrollOffset = scrollOffsetFromPosition(scrollPosition());505 ScrollOffset scrollOffset = this->scrollOffset(); 532 506 if (scrollOffset.y() < 0) 533 507 stretch.setHeight(scrollOffset.y()); -
trunk/Source/WebCore/platform/ScrollView.h
r245987 r246488 70 70 71 71 // ScrollableArea functions. 72 int scrollSize(ScrollbarOrientation) const final;73 int scrollOffset(ScrollbarOrientation) const final;74 72 WEBCORE_EXPORT void setScrollOffset(const ScrollOffset&) final; 75 73 bool isScrollCornerVisible() const final; -
trunk/Source/WebCore/platform/ScrollableArea.cpp
r243919 r246488 573 573 } 574 574 575 #if PLATFORM(IOS_FAMILY)576 575 bool ScrollableArea::isPinnedInBothDirections(const IntSize& scrollDelta) const 577 576 { … … 596 595 return false; 597 596 } 598 #endif // PLATFORM(IOS_FAMILY)599 597 600 598 int ScrollableArea::horizontalScrollbarIntrusion() const … … 613 611 } 614 612 615 ScrollPosition ScrollableArea::scrollPosition() const 616 { 617 // FIXME: This relationship seems to be inverted. Scrollbars should be 'view', not 'model', and should get their values from us. 618 int x = horizontalScrollbar() ? horizontalScrollbar()->value() : 0; 619 int y = verticalScrollbar() ? verticalScrollbar()->value() : 0; 620 return IntPoint(x, y); 613 ScrollOffset ScrollableArea::scrollOffset() const 614 { 615 return scrollOffsetFromPosition(scrollPosition()); 621 616 } 622 617 -
trunk/Source/WebCore/platform/ScrollableArea.h
r243919 r246488 49 49 typedef IntPoint ScrollOffset; 50 50 51 52 inline int offsetForOrientation(ScrollOffset offset, ScrollbarOrientation orientation) 53 { 54 switch (orientation) { 55 case HorizontalScrollbar: return offset.x(); 56 case VerticalScrollbar: return offset.y(); 57 } 58 ASSERT_NOT_REACHED(); 59 return 0; 60 } 61 62 51 63 class ScrollableArea : public CanMakeWeakPtr<ScrollableArea> { 52 64 public: … … 158 170 159 171 virtual bool isActive() const = 0; 160 virtual int scrollSize(ScrollbarOrientation) const = 0;161 virtual int scrollOffset(ScrollbarOrientation) const = 0;162 172 WEBCORE_EXPORT virtual void invalidateScrollbar(Scrollbar&, const IntRect&); 163 173 virtual bool isScrollCornerVisible() const = 0; … … 197 207 bool scrollOriginChanged() const { return m_scrollOriginChanged; } 198 208 199 virtual ScrollPosition scrollPosition() const ;209 virtual ScrollPosition scrollPosition() const = 0; 200 210 virtual ScrollPosition minimumScrollPosition() const; 201 211 virtual ScrollPosition maximumScrollPosition() const; … … 205 215 return position.constrainedBetween(minimumScrollPosition(), maximumScrollPosition()); 206 216 } 217 218 WEBCORE_EXPORT ScrollOffset scrollOffset() const; 207 219 208 220 ScrollOffset maximumScrollOffset() const; … … 299 311 void serviceScrollAnimations(); 300 312 301 #if PLATFORM(IOS_FAMILY) 302 bool isHorizontalScrollerPinnedToMinimumPosition() const { return !horizontalScrollbar() || scrollOffset(HorizontalScrollbar) <= 0; } 303 bool isHorizontalScrollerPinnedToMaximumPosition() const { return !horizontalScrollbar() || scrollOffset(HorizontalScrollbar) >= maximumScrollOffset().x(); } 304 bool isVerticalScrollerPinnedToMinimumPosition() const { return !verticalScrollbar() || scrollOffset(VerticalScrollbar) <= 0; } 305 bool isVerticalScrollerPinnedToMaximumPosition() const { return !verticalScrollbar() || scrollOffset(VerticalScrollbar) >= maximumScrollOffset().y(); } 313 bool isHorizontalScrollerPinnedToMinimumPosition() const { return !horizontalScrollbar() || scrollOffset().x() <= 0; } 314 bool isHorizontalScrollerPinnedToMaximumPosition() const { return !horizontalScrollbar() || scrollOffset().x() >= maximumScrollOffset().x(); } 315 bool isVerticalScrollerPinnedToMinimumPosition() const { return !verticalScrollbar() || scrollOffset().y() <= 0; } 316 bool isVerticalScrollerPinnedToMaximumPosition() const { return !verticalScrollbar() || scrollOffset().y() >= maximumScrollOffset().y(); } 306 317 307 318 bool isPinnedInBothDirections(const IntSize&) const; 308 319 bool isPinnedHorizontallyInDirection(int horizontalScrollDelta) const; 309 320 bool isPinnedVerticallyInDirection(int verticalScrollDelta) const; 310 #endif311 312 virtual TiledBacking* tiledBacking() const { return nullptr; }313 321 314 322 // True if scrolling happens by moving compositing layers. -
trunk/Source/WebCore/platform/Scrollbar.cpp
r239984 r246488 70 70 Widget::setFrameRect(IntRect(0, 0, thickness, thickness)); 71 71 72 m_currentPos = static_cast<float>( m_scrollableArea.scrollOffset(m_orientation));72 m_currentPos = static_cast<float>(offsetForOrientation(m_scrollableArea.scrollOffset(), m_orientation)); 73 73 } 74 74 … … 92 92 void Scrollbar::offsetDidChange() 93 93 { 94 float position = static_cast<float>( m_scrollableArea.scrollOffset(m_orientation));94 float position = static_cast<float>(offsetForOrientation(m_scrollableArea.scrollOffset(), m_orientation)); 95 95 if (position == m_currentPos) 96 96 return; -
trunk/Source/WebCore/platform/ios/ScrollAnimatorIOS.mm
r237266 r246488 104 104 105 105 if (!m_committedToScrollAxis) { 106 bool horizontallyScrollable = m_scrollableArea.scrollSize(HorizontalScrollbar); 107 bool verticallyScrollable = m_scrollableArea.scrollSize(VerticalScrollbar); 106 auto scrollSize = m_scrollableArea.maximumScrollPosition() - m_scrollableArea.minimumScrollPosition(); 107 bool horizontallyScrollable = scrollSize.width(); 108 bool verticallyScrollable = scrollSize.height(); 108 109 109 110 if (!horizontallyScrollable && !verticallyScrollable) -
trunk/Source/WebCore/platform/win/PopupMenuWin.cpp
r239201 r246488 680 680 } 681 681 682 int PopupMenuWin::scrollSize(ScrollbarOrientation orientation) const 683 { 684 return ((orientation == VerticalScrollbar) && m_scrollbar) ? (m_scrollbar->totalSize() - m_scrollbar->visibleSize()) : 0; 685 } 686 687 int PopupMenuWin::scrollOffset(ScrollbarOrientation) const 688 { 689 return m_scrollOffset; 682 ScrollPosition PopupMenuWin::scrollPosition() const 683 { 684 return { 0, m_scrollOffset }; 690 685 } 691 686 … … 893 888 break; 894 889 case VK_PRIOR: 895 if (focusedIndex() != scrollOffset()) {890 if (focusedIndex() != m_scrollOffset) { 896 891 // Set the selection to the first visible item 897 int firstVisibleItem = scrollOffset();892 int firstVisibleItem = m_scrollOffset; 898 893 up(focusedIndex() - firstVisibleItem); 899 894 } else { … … 903 898 break; 904 899 case VK_NEXT: { 905 int lastVisibleItem = scrollOffset()+ visibleItems() - 1;900 int lastVisibleItem = m_scrollOffset + visibleItems() - 1; 906 901 if (focusedIndex() != lastVisibleItem) { 907 902 // Set the selection to the last visible item -
trunk/Source/WebCore/platform/win/PopupMenuWin.h
r239201 r246488 78 78 bool wasClicked() const { return m_wasClicked; } 79 79 80 int scrollOffset() const { return m_scrollOffset; }81 82 80 bool scrollToRevealSelection(); 83 81 … … 90 88 91 89 // ScrollableArea 92 int scrollSize(ScrollbarOrientation) const override; 93 int scrollOffset(ScrollbarOrientation) const override; 90 ScrollPosition scrollPosition() const override; 94 91 void setScrollOffset(const IntPoint&) override; 95 92 void invalidateScrollbarRect(Scrollbar&, const IntRect&) override; -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r246407 r246488 2899 2899 } 2900 2900 2901 int RenderLayer::scrollSize(ScrollbarOrientation orientation) const2902 {2903 Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_hBar : m_vBar).get();2904 return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0;2905 }2906 2907 2901 void RenderLayer::setScrollOffset(const ScrollOffset& offset) 2908 2902 { 2909 2903 scrollTo(scrollPositionFromOffset(offset)); 2910 }2911 2912 int RenderLayer::scrollOffset(ScrollbarOrientation orientation) const2913 {2914 if (orientation == HorizontalScrollbar)2915 return scrollOffset().x();2916 2917 if (orientation == VerticalScrollbar)2918 return scrollOffset().y();2919 2920 return 0;2921 2904 } 2922 2905 -
trunk/Source/WebCore/rendering/RenderLayer.h
r245837 r246488 443 443 void applyPostLayoutScrollPositionIfNeeded(); 444 444 445 ScrollOffset scrollOffset() const { return scrollOffsetFromPosition(m_scrollPosition); }446 447 445 void availableContentSizeChanged(AvailableSizeChangeReason) override; 448 446 … … 1074 1072 bool shouldBeSelfPaintingLayer() const; 1075 1073 1076 int scrollOffset(ScrollbarOrientation) const override;1077 1078 1074 // ScrollableArea interface 1079 1075 void invalidateScrollbarRect(Scrollbar&, const IntRect&) override; … … 1086 1082 IntPoint convertFromScrollbarToContainingView(const Scrollbar&, const IntPoint&) const override; 1087 1083 IntPoint convertFromContainingViewToScrollbar(const Scrollbar&, const IntPoint&) const override; 1088 int scrollSize(ScrollbarOrientation) const override;1089 1084 void setScrollOffset(const ScrollOffset&) override; 1090 1085 ScrollingNodeID scrollingNodeID() const override; -
trunk/Source/WebCore/rendering/RenderListBox.cpp
r246389 r246488 646 646 } 647 647 648 int RenderListBox::scrollSize(ScrollbarOrientation orientation) const 649 { 650 return ((orientation == VerticalScrollbar) && m_vBar) ? (m_vBar->totalSize() - m_vBar->visibleSize()) : 0; 651 } 652 653 int RenderListBox::scrollOffset(ScrollbarOrientation) const 654 { 655 return m_indexOffset; 648 ScrollPosition RenderListBox::scrollPosition() const 649 { 650 return { 0, m_indexOffset }; 656 651 } 657 652 -
trunk/Source/WebCore/rendering/RenderListBox.h
r243701 r246488 113 113 114 114 // ScrollableArea interface. 115 int scrollSize(ScrollbarOrientation) const override;116 int scrollOffset(ScrollbarOrientation) const override;117 115 void setScrollOffset(const ScrollOffset&) override; 116 117 ScrollPosition scrollPosition() const override; 118 118 ScrollPosition minimumScrollPosition() const override; 119 119 ScrollPosition maximumScrollPosition() const override; 120 120 121 void invalidateScrollbarRect(Scrollbar&, const IntRect&) override; 121 122 bool isActive() const override; -
trunk/Source/WebKit/ChangeLog
r246472 r246488 1 2019-06-16 Simon Fraser <simon.fraser@apple.com> 2 3 Implement ScrollableArea::scrollOffset() 4 https://bugs.webkit.org/show_bug.cgi?id=198895 5 6 Reviewed by Antti Koivisto. 7 8 * UIProcess/win/WebPopupMenuProxyWin.cpp: 9 (WebKit::PopupMenuWin::scrollPosition const): 10 (WebKit::WebPopupMenuProxyWin::onKeyDown): Just use m_scrollOffset. 11 (WebKit::WebPopupMenuProxyWin::scrollSize const): Deleted. 12 * UIProcess/win/WebPopupMenuProxyWin.h: Remove the one-axis scrollOffset() 13 * WebProcess/Plugins/PDF/PDFPlugin.h: 14 * WebProcess/Plugins/PDF/PDFPlugin.mm: 15 (WebKit::PDFPlugin::scrollSize const): Deleted. 16 (WebKit::PDFPlugin::scrollOffset const): Deleted. 17 * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: 18 (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): 19 1 20 2019-06-15 Youenn Fablet <youenn@apple.com> 2 21 -
trunk/Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp
r239366 r246488 442 442 } 443 443 444 int WebPopupMenuProxyWin::scrollSize(ScrollbarOrientation orientation) const445 { 446 return ((orientation == VerticalScrollbar) && m_scrollbar) ? (m_scrollbar->totalSize() - m_scrollbar->visibleSize()) : 0;444 ScrollPosition WebPopupMenuProxyWin::scrollPosition() const 445 { 446 return { 0, m_scrollOffset }; 447 447 } 448 448 … … 555 555 break; 556 556 case VK_PRIOR: 557 if (focusedIndex() != scrollOffset(VerticalScrollbar)) {557 if (focusedIndex() != m_scrollOffset) { 558 558 // Set the selection to the first visible item 559 int firstVisibleItem = scrollOffset(VerticalScrollbar);559 int firstVisibleItem = m_scrollOffset; 560 560 up(focusedIndex() - firstVisibleItem); 561 561 } else { … … 565 565 break; 566 566 case VK_NEXT: { 567 int lastVisibleItem = scrollOffset(VerticalScrollbar)+ visibleItems() - 1;567 int lastVisibleItem = m_scrollOffset + visibleItems() - 1; 568 568 if (focusedIndex() != lastVisibleItem) { 569 569 // Set the selection to the last visible item … … 922 922 } 923 923 924 925 924 void WebPopupMenuProxyWin::incrementWheelDelta(int delta) 926 925 { -
trunk/Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.h
r239366 r246488 59 59 60 60 // ScrollableArea 61 int scrollSize(WebCore::ScrollbarOrientation) const override;61 WebCore::ScrollPosition scrollPosition() const override; 62 62 void setScrollOffset(const WebCore::IntPoint&) override; 63 int scrollOffset(WebCore::ScrollbarOrientation) const override { return m_scrollOffset; }64 63 65 64 void invalidateScrollbarRect(WebCore::Scrollbar&, const WebCore::IntRect&) override; -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h
r238771 r246488 203 203 void invalidateScrollCornerRect(const WebCore::IntRect&) final; 204 204 WebCore::IntPoint lastKnownMousePosition() const final { return m_lastMousePositionInPluginCoordinates; } 205 int scrollSize(WebCore::ScrollbarOrientation) const final;206 205 bool isActive() const final; 207 206 bool isScrollCornerVisible() const final { return false; } 208 int scrollOffset(WebCore::ScrollbarOrientation) const final;209 207 WebCore::ScrollPosition scrollPosition() const final; 210 208 WebCore::ScrollPosition minimumScrollPosition() const final; -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm
r244405 r246488 864 864 } 865 865 866 int PDFPlugin::scrollSize(ScrollbarOrientation orientation) const867 {868 Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get();869 return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0;870 }871 872 866 bool PDFPlugin::isActive() const 873 867 { … … 888 882 889 883 return false; 890 }891 892 int PDFPlugin::scrollOffset(ScrollbarOrientation orientation) const893 {894 if (orientation == HorizontalScrollbar)895 return m_scrollOffset.width();896 897 if (orientation == VerticalScrollbar)898 return m_scrollOffset.height();899 900 ASSERT_NOT_REACHED();901 return 0;902 884 } 903 885 -
trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm
r246142 r246488 254 254 255 255 #if !PLATFORM(IOS_FAMILY) 256 if (m_viewExposedRect) { 257 ScrollOffset scrollOffset = frameView->scrollOffsetFromPosition(frameView->scrollPosition()); 258 m_scrolledViewExposedRect.value().moveBy(scrollOffset); 259 } 256 if (m_viewExposedRect) 257 m_scrolledViewExposedRect.value().moveBy(frameView->scrollOffset()); 260 258 #endif 261 259
Note:
See TracChangeset
for help on using the changeset viewer.