Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1662)

Unified Diff: Source/core/platform/ScrollView.cpp

Issue 16982005: Allow objects without scrollbars to be scrollable (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed ScrollbarGroup pageStep Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/platform/ScrollView.h ('k') | Source/core/platform/ScrollableArea.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/ScrollView.cpp
diff --git a/Source/core/platform/ScrollView.cpp b/Source/core/platform/ScrollView.cpp
index d9f0e35de07d4fe9f50edcdaddb1a7884ba8f4d0..0efe2ad5748d624788dad4a1e1115fe57f485f11 100644
--- a/Source/core/platform/ScrollView.cpp
+++ b/Source/core/platform/ScrollView.cpp
@@ -43,7 +43,6 @@ ScrollView::ScrollView()
, m_verticalScrollbarMode(ScrollbarAuto)
, m_horizontalScrollbarLock(false)
, m_verticalScrollbarLock(false)
- , m_prohibitsScrolling(false)
, m_canBlitOnScroll(true)
, m_scrollbarsAvoidingResizer(0)
, m_scrollbarsSuppressed(false)
@@ -282,15 +281,16 @@ IntPoint ScrollView::adjustScrollPositionWithinRange(const IntPoint& scrollPoint
int ScrollView::scrollSize(ScrollbarOrientation orientation) const
{
- // If no scrollbars are present, it does not indicate content is not be scrollable.
- if (!m_horizontalScrollbar && !m_verticalScrollbar && !prohibitsScrolling()) {
+ Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get();
+
+ // If no scrollbars are present, the content may still be scrollable.
+ if (!scrollbar) {
IntSize scrollSize = m_contentsSize - visibleContentRect().size();
scrollSize.clampNegativeToZero();
return orientation == HorizontalScrollbar ? scrollSize.width() : scrollSize.height();
}
- Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get();
- return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0;
+ return scrollbar->totalSize() - scrollbar->visibleSize();
}
void ScrollView::notifyPageThatContentAreaWillPaint() const
@@ -317,20 +317,8 @@ void ScrollView::scrollTo(const IntSize& newOffset)
updateFixedElementsAfterScrolling();
}
-int ScrollView::scrollPosition(Scrollbar* scrollbar) const
-{
- if (scrollbar->orientation() == HorizontalScrollbar)
- return scrollPosition().x() + scrollOrigin().x();
- if (scrollbar->orientation() == VerticalScrollbar)
- return scrollPosition().y() + scrollOrigin().y();
- return 0;
-}
-
void ScrollView::setScrollPosition(const IntPoint& scrollPoint)
{
- if (prohibitsScrolling())
- return;
-
IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint);
if (newScrollPosition == scrollPosition())
@@ -372,7 +360,7 @@ static const unsigned cMaxUpdateScrollbarsPass = 2;
void ScrollView::updateScrollbars(const IntSize& desiredOffset)
{
- if (m_inUpdateScrollbars || prohibitsScrolling())
+ if (m_inUpdateScrollbars)
return;
// If we came in here with the view already needing a layout, then go ahead and do that
@@ -473,7 +461,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
}
}
- // Set up the range (and page step/line step), but only do this if we're not in a nested call (to avoid
+ // Set up the range, but only do this if we're not in a nested call (to avoid
// doing it multiple times).
if (m_updateScrollbarsPass)
return;
@@ -482,7 +470,6 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
if (m_horizontalScrollbar) {
int clientWidth = visibleWidth();
- int pageStep = max(max<int>(clientWidth * Scrollbar::minFractionToStepWhenPaging(), clientWidth - Scrollbar::maxOverlapBetweenPages()), 1);
IntRect oldRect(m_horizontalScrollbar->frameRect());
IntRect hBarRect(0,
height() - m_horizontalScrollbar->height(),
@@ -495,7 +482,6 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
if (m_scrollbarsSuppressed)
m_horizontalScrollbar->setSuppressInvalidation(true);
m_horizontalScrollbar->setEnabled(contentsWidth() > clientWidth);
- m_horizontalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep);
m_horizontalScrollbar->setProportion(clientWidth, contentsWidth());
if (m_scrollbarsSuppressed)
m_horizontalScrollbar->setSuppressInvalidation(false);
@@ -503,7 +489,6 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
if (m_verticalScrollbar) {
int clientHeight = visibleHeight();
- int pageStep = max(max<int>(clientHeight * Scrollbar::minFractionToStepWhenPaging(), clientHeight - Scrollbar::maxOverlapBetweenPages()), 1);
IntRect oldRect(m_verticalScrollbar->frameRect());
IntRect vBarRect(width() - m_verticalScrollbar->width(),
0,
@@ -516,7 +501,6 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
if (m_scrollbarsSuppressed)
m_verticalScrollbar->setSuppressInvalidation(true);
m_verticalScrollbar->setEnabled(contentsHeight() > clientHeight);
- m_verticalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep);
m_verticalScrollbar->setProportion(clientHeight, contentsHeight());
if (m_scrollbarsSuppressed)
m_verticalScrollbar->setSuppressInvalidation(false);
@@ -814,6 +798,14 @@ void ScrollView::positionScrollbarLayers()
positionScrollCornerLayer(layerForScrollCorner(), scrollCornerRect());
}
+bool ScrollView::userInputScrollable(ScrollbarOrientation orientation) const
+{
+ ScrollbarMode mode = (orientation == HorizontalScrollbar) ?
+ m_horizontalScrollbarMode : m_verticalScrollbarMode;
+
+ return mode == ScrollbarAuto || mode == ScrollbarAlwaysOn;
+}
+
void ScrollView::repaintContentRectangle(const IntRect& rect)
{
IntRect paintRect = rect;
@@ -1175,4 +1167,13 @@ void ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePositionAtAl
updateScrollbars(scrollOffset());
}
+int ScrollView::pageStep(ScrollbarOrientation orientation) const
+{
+ int length = (orientation == HorizontalScrollbar) ? visibleWidth() : visibleHeight();
+ int minPageStep = static_cast<float>(length) * minFractionToStepWhenPaging();
+ int pageStep = std::max(minPageStep, length - maxOverlapBetweenPages());
+
+ return std::max(pageStep, 1);
}
+
+} // namespace WebCore
« no previous file with comments | « Source/core/platform/ScrollView.h ('k') | Source/core/platform/ScrollableArea.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698