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

Unified Diff: third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md Created 4 years, 2 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
Index: third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
index b9139ac47eee7b99576d2275e78458766796e4dd..b991948fc11d2ae8bbdbd734b007b4528396ef94 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
@@ -32,9 +32,6 @@
#include "platform/scroll/ScrollableArea.h"
#include "platform/HostWindow.h"
-#include "platform/geometry/DoubleRect.h"
-#include "platform/geometry/FloatPoint.h"
-#include "platform/geometry/LayoutRect.h"
#include "platform/graphics/GraphicsLayer.h"
#include "platform/scroll/MainThreadScrollingReason.h"
#include "platform/scroll/ProgrammaticScrollAnimator.h"
@@ -147,14 +144,14 @@ float ScrollableArea::scrollStep(ScrollGranularity granularity,
}
ScrollResult ScrollableArea::userScroll(ScrollGranularity granularity,
- const FloatSize& delta) {
+ const ScrollOffset& delta) {
float stepX = scrollStep(granularity, HorizontalScrollbar);
float stepY = scrollStep(granularity, VerticalScrollbar);
- FloatSize pixelDelta(delta);
+ ScrollOffset pixelDelta(delta);
pixelDelta.scale(stepX, stepY);
- FloatSize scrollableAxisDelta(
+ ScrollOffset scrollableAxisDelta(
userInputScrollable(HorizontalScrollbar) ? pixelDelta.width() : 0,
userInputScrollable(VerticalScrollbar) ? pixelDelta.height() : 0);
@@ -168,20 +165,18 @@ ScrollResult ScrollableArea::userScroll(ScrollGranularity granularity,
// Delta that wasn't scrolled because the axis is !userInputScrollable
// should count as unusedScrollDelta.
- FloatSize unscrollableAxisDelta = pixelDelta - scrollableAxisDelta;
+ ScrollOffset unscrollableAxisDelta = pixelDelta - scrollableAxisDelta;
result.unusedScrollDeltaX += unscrollableAxisDelta.width();
result.unusedScrollDeltaY += unscrollableAxisDelta.height();
return result;
}
-void ScrollableArea::setScrollPosition(const DoublePoint& position,
- ScrollType scrollType,
- ScrollBehavior behavior) {
- DoublePoint clampedPosition = clampScrollPosition(position);
- if (shouldUseIntegerScrollOffset())
- clampedPosition = flooredIntPoint(clampedPosition);
- if (clampedPosition == scrollPositionDouble())
+void ScrollableArea::setScrollOffset(const ScrollOffset& offset,
+ ScrollType scrollType,
+ ScrollBehavior behavior) {
+ ScrollOffset clampedOffset = clampScrollOffset(offset);
+ if (clampedOffset == scrollOffset())
return;
if (behavior == ScrollBehaviorAuto)
@@ -189,68 +184,66 @@ void ScrollableArea::setScrollPosition(const DoublePoint& position,
switch (scrollType) {
case CompositorScroll:
- scrollPositionChanged(clampedPosition, scrollType);
+ scrollOffsetChanged(clampedOffset, scrollType);
break;
case AnchoringScroll:
- scrollAnimator().adjustAnimationAndSetScrollPosition(clampedPosition,
- scrollType);
+ scrollAnimator().adjustAnimationAndSetScrollOffset(clampedOffset,
+ scrollType);
break;
case ProgrammaticScroll:
- programmaticScrollHelper(clampedPosition, behavior);
+ programmaticScrollHelper(clampedOffset, behavior);
break;
case UserScroll:
- userScrollHelper(clampedPosition, behavior);
+ userScrollHelper(clampedOffset, behavior);
break;
default:
ASSERT_NOT_REACHED();
}
}
-void ScrollableArea::scrollBy(const DoubleSize& delta,
+void ScrollableArea::scrollBy(const ScrollOffset& delta,
ScrollType type,
ScrollBehavior behavior) {
- setScrollPosition(scrollPositionDouble() + delta, type, behavior);
+ setScrollOffset(scrollOffset() + delta, type, behavior);
}
-void ScrollableArea::setScrollPositionSingleAxis(
- ScrollbarOrientation orientation,
- double position,
- ScrollType scrollType,
- ScrollBehavior behavior) {
- DoublePoint newPosition;
+void ScrollableArea::setScrollOffsetSingleAxis(ScrollbarOrientation orientation,
+ float offset,
+ ScrollType scrollType,
+ ScrollBehavior behavior) {
+ ScrollOffset newOffset;
if (orientation == HorizontalScrollbar)
- newPosition = DoublePoint(position, scrollAnimator().currentPosition().y());
+ newOffset = ScrollOffset(offset, scrollAnimator().currentOffset().height());
else
- newPosition = DoublePoint(scrollAnimator().currentPosition().x(), position);
+ newOffset = ScrollOffset(scrollAnimator().currentOffset().width(), offset);
// TODO(bokan): Note, this doesn't use the derived class versions since this
// method is currently used exclusively by code that adjusts the position by
// the scroll origin and the derived class versions differ on whether they
// take that into account or not.
- ScrollableArea::setScrollPosition(newPosition, scrollType, behavior);
+ ScrollableArea::setScrollOffset(newOffset, scrollType, behavior);
}
-void ScrollableArea::programmaticScrollHelper(const DoublePoint& position,
+void ScrollableArea::programmaticScrollHelper(const ScrollOffset& offset,
ScrollBehavior scrollBehavior) {
cancelScrollAnimation();
if (scrollBehavior == ScrollBehaviorSmooth)
- programmaticScrollAnimator().animateToOffset(toFloatPoint(position));
+ programmaticScrollAnimator().animateToOffset(offset);
else
- programmaticScrollAnimator().scrollToOffsetWithoutAnimation(
- toFloatPoint(position));
+ programmaticScrollAnimator().scrollToOffsetWithoutAnimation(offset);
}
-void ScrollableArea::userScrollHelper(const DoublePoint& position,
+void ScrollableArea::userScrollHelper(const ScrollOffset& offset,
ScrollBehavior scrollBehavior) {
cancelProgrammaticScrollAnimation();
- double x = userInputScrollable(HorizontalScrollbar)
- ? position.x()
- : scrollAnimator().currentPosition().x();
- double y = userInputScrollable(VerticalScrollbar)
- ? position.y()
- : scrollAnimator().currentPosition().y();
+ float x = userInputScrollable(HorizontalScrollbar)
+ ? offset.width()
+ : scrollAnimator().currentOffset().width();
+ float y = userInputScrollable(VerticalScrollbar)
+ ? offset.height()
+ : scrollAnimator().currentOffset().height();
// Smooth user scrolls (keyboard, wheel clicks) are handled via the userScroll
// method.
@@ -258,7 +251,7 @@ void ScrollableArea::userScrollHelper(const DoublePoint& position,
// method and ScrollAnimatorBase to have a simpler
// animateToOffset method like the ProgrammaticScrollAnimator.
ASSERT(scrollBehavior == ScrollBehaviorInstant);
- scrollAnimator().scrollToOffsetWithoutAnimation(FloatPoint(x, y));
+ scrollAnimator().scrollToOffsetWithoutAnimation(ScrollOffset(x, y));
}
LayoutRect ScrollableArea::scrollIntoView(const LayoutRect& rectInContent,
@@ -271,33 +264,31 @@ LayoutRect ScrollableArea::scrollIntoView(const LayoutRect& rectInContent,
return LayoutRect();
}
-void ScrollableArea::scrollPositionChanged(const DoublePoint& position,
- ScrollType scrollType) {
- TRACE_EVENT0("blink", "ScrollableArea::scrollPositionChanged");
+void ScrollableArea::scrollOffsetChanged(const ScrollOffset& offset,
+ ScrollType scrollType) {
+ TRACE_EVENT0("blink", "ScrollableArea::scrollOffsetChanged");
- DoublePoint oldPosition = scrollPositionDouble();
- DoublePoint truncatedPosition =
- shouldUseIntegerScrollOffset() ? flooredIntPoint(position) : position;
+ ScrollOffset oldOffset = scrollOffset();
+ ScrollOffset truncatedOffset = shouldUseIntegerScrollOffset()
+ ? ScrollOffset(flooredIntSize(offset))
+ : offset;
// Tell the derived class to scroll its contents.
- setScrollOffset(truncatedPosition, scrollType);
+ updateScrollOffset(truncatedOffset, scrollType);
// Tell the scrollbars to update their thumb postions.
// If the scrollbar does not have its own layer, it must always be
- // invalidated to reflect the new thumb position, even if the theme did not
+ // invalidated to reflect the new thumb offset, even if the theme did not
// invalidate any individual part.
if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar())
horizontalScrollbar->offsetDidChange();
if (Scrollbar* verticalScrollbar = this->verticalScrollbar())
verticalScrollbar->offsetDidChange();
- if (scrollPositionDouble() != oldPosition) {
- // FIXME: Pass in DoubleSize. crbug.com/414283.
- scrollAnimator().notifyContentAreaScrolled(
- toFloatSize(scrollPositionDouble() - oldPosition));
- }
+ if (scrollOffset() != oldOffset)
+ scrollAnimator().notifyContentAreaScrolled(scrollOffset() - oldOffset);
- scrollAnimator().setCurrentPosition(toFloatPoint(position));
+ scrollAnimator().setCurrentOffset(offset);
}
bool ScrollableArea::scrollBehaviorFromString(const String& behaviorString,
@@ -315,8 +306,8 @@ bool ScrollableArea::scrollBehaviorFromString(const String& behaviorString,
}
// NOTE: Only called from Internals for testing.
-void ScrollableArea::setScrollOffsetFromInternals(const IntPoint& offset) {
- scrollPositionChanged(DoublePoint(offset), ProgrammaticScroll);
+void ScrollableArea::updateScrollOffsetFromInternals(const IntSize& offset) {
+ scrollOffsetChanged(ScrollOffset(offset), ProgrammaticScroll);
}
void ScrollableArea::contentAreaWillPaint() const {
@@ -537,11 +528,6 @@ bool ScrollableArea::shouldScrollOnMainThread() const {
return true;
}
-DoubleRect ScrollableArea::visibleContentRectDouble(
- IncludeScrollbarsInRect scrollbarInclusion) const {
- return visibleContentRect(scrollbarInclusion);
-}
-
IntRect ScrollableArea::visibleContentRect(
IncludeScrollbarsInRect scrollbarInclusion) const {
int scrollbarWidth =
@@ -549,21 +535,21 @@ IntRect ScrollableArea::visibleContentRect(
int scrollbarHeight =
scrollbarInclusion == IncludeScrollbars ? horizontalScrollbarHeight() : 0;
- return IntRect(scrollPosition().x(), scrollPosition().y(),
- std::max(0, visibleWidth() + scrollbarWidth),
- std::max(0, visibleHeight() + scrollbarHeight));
+ return enclosingIntRect(
+ IntRect(scrollOffset().width(), scrollOffset().height(),
+ std::max(0, visibleWidth() + scrollbarWidth),
+ std::max(0, visibleHeight() + scrollbarHeight)));
}
-IntPoint ScrollableArea::clampScrollPosition(
- const IntPoint& scrollPosition) const {
- return scrollPosition.shrunkTo(maximumScrollPosition())
- .expandedTo(minimumScrollPosition());
+IntSize ScrollableArea::clampScrollOffset(const IntSize& scrollOffset) const {
+ return scrollOffset.shrunkTo(maximumScrollOffsetInt())
+ .expandedTo(minimumScrollOffsetInt());
}
-DoublePoint ScrollableArea::clampScrollPosition(
- const DoublePoint& scrollPosition) const {
- return scrollPosition.shrunkTo(maximumScrollPositionDouble())
- .expandedTo(minimumScrollPositionDouble());
+ScrollOffset ScrollableArea::clampScrollOffset(
+ const ScrollOffset& scrollOffset) const {
+ return scrollOffset.shrunkTo(maximumScrollOffset())
+ .expandedTo(minimumScrollOffset());
}
int ScrollableArea::lineStep(ScrollbarOrientation) const {

Powered by Google App Engine
This is Rietveld 408576698