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

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.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/core/paint/PaintLayerScrollableArea.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index 61f8dc43cdd717225dc6e5f145a83518d1726f71..9767274a2a6a1a2784f48e208702e6774aae7ad4 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -97,7 +97,7 @@ PaintLayerScrollableArea::PaintLayerScrollableArea(PaintLayer& layer)
m_needsCompositedScrolling(false),
m_rebuildHorizontalScrollbarLayer(false),
m_rebuildVerticalScrollbarLayer(false),
- m_needsScrollPositionClamp(false),
+ m_needsScrollOffsetClamp(false),
m_needsRelayout(false),
m_hadHorizontalScrollbarBeforeRelayout(false),
m_hadVerticalScrollbarBeforeRelayout(false),
@@ -116,11 +116,9 @@ PaintLayerScrollableArea::PaintLayerScrollableArea(PaintLayer& layer)
// recalculated.
Element* element = toElement(node);
m_scrollOffset = element->savedLayerScrollOffset();
- if (!m_scrollOffset.isZero()) {
- scrollAnimator().setCurrentPosition(
- FloatPoint(m_scrollOffset.width(), m_scrollOffset.height()));
- }
- element->setSavedLayerScrollOffset(IntSize());
+ if (!m_scrollOffset.isZero())
+ scrollAnimator().setCurrentOffset(m_scrollOffset);
+ element->setSavedLayerScrollOffset(ScrollOffset());
}
updateResizerAreaSet();
}
@@ -151,10 +149,8 @@ void PaintLayerScrollableArea::dispose() {
if (!box().documentBeingDestroyed()) {
Node* node = box().node();
// FIXME: Make setSavedLayerScrollOffset take DoubleSize. crbug.com/414283.
- if (node && node->isElementNode()) {
- toElement(node)->setSavedLayerScrollOffset(
- flooredIntSize(m_scrollOffset));
- }
+ if (node && node->isElementNode())
+ toElement(node)->setSavedLayerScrollOffset(m_scrollOffset);
}
if (LocalFrame* frame = box().frame()) {
@@ -356,19 +352,19 @@ IntPoint PaintLayerScrollableArea::convertFromContainingWidgetToScrollbar(
int PaintLayerScrollableArea::scrollSize(
ScrollbarOrientation orientation) const {
- IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition();
+ IntSize scrollDimensions =
+ maximumScrollOffsetInt() - minimumScrollOffsetInt();
return (orientation == HorizontalScrollbar) ? scrollDimensions.width()
: scrollDimensions.height();
}
-void PaintLayerScrollableArea::setScrollOffset(
- const DoublePoint& newScrollOffset,
- ScrollType scrollType) {
- if (scrollOffset() == toDoubleSize(newScrollOffset))
+void PaintLayerScrollableArea::updateScrollOffset(const ScrollOffset& newOffset,
+ ScrollType scrollType) {
+ if (scrollOffset() == newOffset)
return;
- DoubleSize scrollDelta = scrollOffset() - toDoubleSize(newScrollOffset);
- m_scrollOffset = toDoubleSize(newScrollOffset);
+ ScrollOffset scrollDelta = scrollOffset() - newOffset;
+ m_scrollOffset = newOffset;
LocalFrame* frame = box().frame();
ASSERT(frame);
@@ -464,19 +460,19 @@ void PaintLayerScrollableArea::setScrollOffset(
scrollAnchor()->clear();
}
-IntPoint PaintLayerScrollableArea::scrollPosition() const {
- return IntPoint(flooredIntSize(m_scrollOffset));
+IntSize PaintLayerScrollableArea::scrollOffsetInt() const {
+ return flooredIntSize(m_scrollOffset);
}
-DoublePoint PaintLayerScrollableArea::scrollPositionDouble() const {
- return DoublePoint(m_scrollOffset);
+ScrollOffset PaintLayerScrollableArea::scrollOffset() const {
+ return m_scrollOffset;
}
-IntPoint PaintLayerScrollableArea::minimumScrollPosition() const {
- return -scrollOrigin();
+IntSize PaintLayerScrollableArea::minimumScrollOffsetInt() const {
+ return toIntSize(-scrollOrigin());
}
-IntPoint PaintLayerScrollableArea::maximumScrollPosition() const {
+IntSize PaintLayerScrollableArea::maximumScrollOffsetInt() const {
IntSize contentSize;
IntSize visibleSize;
if (box().hasOverflowClip()) {
@@ -490,7 +486,7 @@ IntPoint PaintLayerScrollableArea::maximumScrollPosition() const {
// based on stale layout overflow data (http://crbug.com/576933).
contentSize = contentSize.expandedTo(visibleSize);
}
- return -scrollOrigin() + (contentSize - visibleSize);
+ return toIntSize(-scrollOrigin() + (contentSize - visibleSize));
}
IntRect PaintLayerScrollableArea::visibleContentRect(
@@ -510,7 +506,7 @@ IntRect PaintLayerScrollableArea::visibleContentRect(
// TODO(szager): Handle fractional scroll offsets correctly.
return IntRect(
- IntPoint(flooredIntSize(adjustedScrollOffset())),
+ flooredIntPoint(scrollPosition()),
IntSize(max(0, layer()->size().width() - verticalScrollbarWidth),
max(0, layer()->size().height() - horizontalScrollbarHeight)));
}
@@ -647,11 +643,11 @@ void PaintLayerScrollableArea::updateScrollDimensions() {
updateScrollOrigin();
}
-void PaintLayerScrollableArea::setScrollPositionUnconditionally(
- const DoublePoint& position,
+void PaintLayerScrollableArea::setScrollOffsetUnconditionally(
+ const ScrollOffset& offset,
ScrollType scrollType) {
cancelScrollAnimation();
- scrollPositionChanged(position, scrollType);
+ scrollOffsetChanged(offset, scrollType);
}
void PaintLayerScrollableArea::updateAfterLayout() {
@@ -794,7 +790,7 @@ void PaintLayerScrollableArea::updateAfterLayout() {
setHasVerticalScrollbar(false);
}
- clampScrollPositionsAfterLayout();
+ clampScrollOffsetsAfterLayout();
if (!scrollbarsAreFrozen) {
bool hasOverflow =
@@ -806,14 +802,14 @@ void PaintLayerScrollableArea::updateAfterLayout() {
positionOverflowControls();
}
-void PaintLayerScrollableArea::clampScrollPositionsAfterLayout() {
- // If a vertical scrollbar was removed, the min/max scroll positions may have
- // changed, so the scroll positions needs to be clamped. If the scroll
- // position did not change, but the scroll origin *did* change, we still need
- // to notify the scrollbars to update their dimensions.
+void PaintLayerScrollableArea::clampScrollOffsetsAfterLayout() {
+ // If a vertical scrollbar was removed, the min/max scroll offsets may have
+ // changed, so the scroll offsets needs to be clamped. If the scroll offset
+ // did not change, but the scroll origin *did* change, we still need to notify
+ // the scrollbars to update their dimensions.
- if (DelayScrollPositionClampScope::clampingIsDelayed()) {
- DelayScrollPositionClampScope::setNeedsClamp(this);
+ if (DelayScrollOffsetClampScope::clampingIsDelayed()) {
+ DelayScrollOffsetClampScope::setNeedsClamp(this);
return;
}
@@ -821,15 +817,12 @@ void PaintLayerScrollableArea::clampScrollPositionsAfterLayout() {
if (shouldPerformScrollAnchoring())
m_scrollAnchor.restore();
- if (scrollOriginChanged()) {
- setScrollPositionUnconditionally(
- clampScrollPosition(scrollPositionDouble()));
- } else {
- ScrollableArea::setScrollPosition(scrollPositionDouble(),
- ProgrammaticScroll);
- }
+ if (scrollOriginChanged())
+ setScrollOffsetUnconditionally(clampScrollOffset(scrollOffset()));
+ else
+ ScrollableArea::setScrollOffset(scrollOffset(), ProgrammaticScroll);
- setNeedsScrollPositionClamp(false);
+ setNeedsScrollOffsetClamp(false);
resetScrollOriginChanged();
m_scrollbarManager.destroyDetachedScrollbars();
}
@@ -1590,9 +1583,11 @@ LayoutRect PaintLayerScrollableArea::scrollIntoView(
LayoutRect r = ScrollAlignment::getRectToExpose(layerBounds, localExposeRect,
alignX, alignY);
- DoublePoint clampedScrollPosition = clampScrollPosition(
- scrollPositionDouble() + roundedIntSize(r.location()));
- if (clampedScrollPosition == scrollPositionDouble()) {
+ ScrollOffset oldScrollOffset = scrollOffset();
+ ScrollOffset newScrollOffset(clampScrollOffset(roundedIntSize(
+ toScrollOffset(FloatPoint(r.location()) + oldScrollOffset))));
+
+ if (newScrollOffset == oldScrollOffset) {
return LayoutRect(
box()
.localToAbsoluteQuad(FloatQuad(FloatRect(intersection(
@@ -1601,9 +1596,8 @@ LayoutRect PaintLayerScrollableArea::scrollIntoView(
.boundingBox());
}
- DoubleSize oldScrollOffset = adjustedScrollOffset();
- setScrollPosition(clampedScrollPosition, scrollType, ScrollBehaviorInstant);
- DoubleSize scrollOffsetDifference = adjustedScrollOffset() - oldScrollOffset;
+ setScrollOffset(newScrollOffset, scrollType, ScrollBehaviorInstant);
+ ScrollOffset scrollOffsetDifference = scrollOffset() - oldScrollOffset;
localExposeRect.move(-LayoutSize(scrollOffsetDifference));
return LayoutRect(
box()
@@ -1799,7 +1793,7 @@ void PaintLayerScrollableArea::ScrollbarManager::setHasHorizontalScrollbar(
}
} else {
m_hBarIsAttached = 0;
- if (!DelayScrollPositionClampScope::clampingIsDelayed())
+ if (!DelayScrollOffsetClampScope::clampingIsDelayed())
destroyScrollbar(HorizontalScrollbar);
}
}
@@ -1818,7 +1812,7 @@ void PaintLayerScrollableArea::ScrollbarManager::setHasVerticalScrollbar(
}
} else {
m_vBarIsAttached = 0;
- if (!DelayScrollPositionClampScope::clampingIsDelayed())
+ if (!DelayScrollOffsetClampScope::clampingIsDelayed())
destroyScrollbar(VerticalScrollbar);
}
}
@@ -1955,37 +1949,37 @@ void PaintLayerScrollableArea::PreventRelayoutScope::resetRelayoutNeeded() {
int PaintLayerScrollableArea::FreezeScrollbarsScope::s_count = 0;
-int PaintLayerScrollableArea::DelayScrollPositionClampScope::s_count = 0;
+int PaintLayerScrollableArea::DelayScrollOffsetClampScope::s_count = 0;
PersistentHeapVector<Member<PaintLayerScrollableArea>>*
- PaintLayerScrollableArea::DelayScrollPositionClampScope::s_needsClamp =
+ PaintLayerScrollableArea::DelayScrollOffsetClampScope::s_needsClamp =
nullptr;
-PaintLayerScrollableArea::DelayScrollPositionClampScope::
- DelayScrollPositionClampScope() {
+PaintLayerScrollableArea::DelayScrollOffsetClampScope::
+ DelayScrollOffsetClampScope() {
if (!s_needsClamp)
s_needsClamp = new PersistentHeapVector<Member<PaintLayerScrollableArea>>();
DCHECK(s_count > 0 || s_needsClamp->isEmpty());
s_count++;
}
-PaintLayerScrollableArea::DelayScrollPositionClampScope::
- ~DelayScrollPositionClampScope() {
+PaintLayerScrollableArea::DelayScrollOffsetClampScope::
+ ~DelayScrollOffsetClampScope() {
if (--s_count == 0)
- DelayScrollPositionClampScope::clampScrollableAreas();
+ DelayScrollOffsetClampScope::clampScrollableAreas();
}
-void PaintLayerScrollableArea::DelayScrollPositionClampScope::setNeedsClamp(
+void PaintLayerScrollableArea::DelayScrollOffsetClampScope::setNeedsClamp(
PaintLayerScrollableArea* scrollableArea) {
- if (!scrollableArea->needsScrollPositionClamp()) {
- scrollableArea->setNeedsScrollPositionClamp(true);
+ if (!scrollableArea->needsScrollOffsetClamp()) {
+ scrollableArea->setNeedsScrollOffsetClamp(true);
s_needsClamp->append(scrollableArea);
}
}
-void PaintLayerScrollableArea::DelayScrollPositionClampScope::
+void PaintLayerScrollableArea::DelayScrollOffsetClampScope::
clampScrollableAreas() {
for (auto& scrollableArea : *s_needsClamp)
- scrollableArea->clampScrollPositionsAfterLayout();
+ scrollableArea->clampScrollOffsetsAfterLayout();
delete s_needsClamp;
s_needsClamp = nullptr;
}

Powered by Google App Engine
This is Rietveld 408576698