summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc70
1 files changed, 42 insertions, 28 deletions
diff --git a/chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc b/chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc
index d74be1608f4..37a92dbf142 100644
--- a/chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc
+++ b/chromium/third_party/blink/renderer/core/frame/root_frame_viewport.cc
@@ -70,10 +70,10 @@ ScrollableArea& RootFrameViewport::LayoutViewport() const {
return *layout_viewport_;
}
-LayoutRect RootFrameViewport::RootContentsToLayoutViewportContents(
+PhysicalRect RootFrameViewport::RootContentsToLayoutViewportContents(
LocalFrameView& root_frame_view,
- const LayoutRect& rect) const {
- LayoutRect ret(rect);
+ const PhysicalRect& rect) const {
+ PhysicalRect ret = rect;
// If the root LocalFrameView is the layout viewport then coordinates in the
// root LocalFrameView's content space are already in the layout viewport's
@@ -85,7 +85,8 @@ LayoutRect RootFrameViewport::RootContentsToLayoutViewportContents(
// by adding the scroll position.
// TODO(bokan): This will have to be revisited if we ever remove the
// restriction that a root scroller must be exactly screen filling.
- ret.Move(LayoutSize(LayoutViewport().GetScrollOffset()));
+ ret.Move(
+ PhysicalOffset::FromFloatSizeRound(LayoutViewport().GetScrollOffset()));
return ret;
}
@@ -163,8 +164,7 @@ int RootFrameViewport::VerticalScrollbarWidth(
}
void RootFrameViewport::UpdateScrollAnimator() {
- GetScrollAnimator().SetCurrentOffset(
- ToFloatSize(ScrollOffsetFromScrollAnimators()));
+ GetScrollAnimator().SetCurrentOffset(ScrollOffsetFromScrollAnimators());
}
ScrollOffset RootFrameViewport::ScrollOffsetFromScrollAnimators() const {
@@ -179,21 +179,22 @@ IntRect RootFrameViewport::VisibleContentRect(
VisualViewport().VisibleContentRect(scrollbar_inclusion).Size());
}
-LayoutRect RootFrameViewport::VisibleScrollSnapportRect(
+PhysicalRect RootFrameViewport::VisibleScrollSnapportRect(
IncludeScrollbarsInRect scrollbar_inclusion) const {
// The effective viewport is the intersection of the visual viewport with the
// layout viewport.
- LayoutRect frame_rect_in_content = LayoutRect(
- FloatPoint(LayoutViewport().GetScrollOffset()),
- FloatSize(
+ PhysicalRect frame_rect_in_content(
+ PhysicalOffset::FromFloatSizeRound(LayoutViewport().GetScrollOffset()),
+ PhysicalSize(
LayoutViewport().VisibleContentRect(scrollbar_inclusion).Size()));
- LayoutRect visual_rect_in_content = LayoutRect(
- FloatPoint(LayoutViewport().GetScrollOffset() +
- VisualViewport().GetScrollAnimator().CurrentOffset()),
- FloatSize(
+ PhysicalRect visual_rect_in_content(
+ PhysicalOffset::FromFloatSizeRound(
+ LayoutViewport().GetScrollOffset() +
+ VisualViewport().GetScrollAnimator().CurrentOffset()),
+ PhysicalSize(
VisualViewport().VisibleContentRect(scrollbar_inclusion).Size()));
- LayoutRect visible_scroll_snapport =
+ PhysicalRect visible_scroll_snapport =
Intersection(visual_rect_in_content, frame_rect_in_content);
if (!LayoutViewport().GetLayoutBox())
return visible_scroll_snapport;
@@ -282,13 +283,14 @@ ScrollOffset RootFrameViewport::ClampToUserScrollableOffset(
return scroll_offset;
}
-LayoutRect RootFrameViewport::ScrollIntoView(
- const LayoutRect& rect_in_absolute,
+PhysicalRect RootFrameViewport::ScrollIntoView(
+ const PhysicalRect& rect_in_absolute,
const WebScrollIntoViewParams& params) {
- LayoutRect scroll_snapport_rect(VisibleScrollSnapportRect());
+ PhysicalRect scroll_snapport_rect = VisibleScrollSnapportRect();
- LayoutRect rect_in_document = rect_in_absolute;
- rect_in_document.Move(LayoutSize(LayoutViewport().GetScrollOffset()));
+ PhysicalRect rect_in_document = rect_in_absolute;
+ rect_in_document.Move(
+ PhysicalOffset::FromFloatSizeFloor(LayoutViewport().GetScrollOffset()));
ScrollOffset new_scroll_offset =
ClampScrollOffset(ScrollAlignment::GetScrollOffsetToExpose(
@@ -328,7 +330,8 @@ LayoutRect RootFrameViewport::ScrollIntoView(
// Return the newly moved rect to absolute coordinates.
// TODO(szager): PaintLayerScrollableArea::ScrollIntoView clips the return
// value to the visible content rect, but this does not.
- rect_in_document.Move(-LayoutSize(LayoutViewport().GetScrollOffset()));
+ rect_in_document.Move(
+ -PhysicalOffset::FromFloatSizeRound(LayoutViewport().GetScrollOffset()));
return rect_in_document;
}
@@ -476,8 +479,12 @@ GraphicsLayer* RootFrameViewport::LayerForScrollCorner() const {
return LayoutViewport().LayerForScrollCorner();
}
-ScrollResult RootFrameViewport::UserScroll(ScrollGranularity granularity,
- const FloatSize& delta) {
+ScrollResult RootFrameViewport::UserScroll(
+ ScrollGranularity granularity,
+ const FloatSize& delta,
+ ScrollableArea::ScrollCallback on_finish) {
+ base::ScopedClosureRunner run_on_return(std::move(on_finish));
+
// TODO(bokan/ymalik): Once smooth scrolling is permanently enabled we
// should be able to remove this method override and use the base class
// version: ScrollableArea::userScroll.
@@ -525,14 +532,21 @@ ScrollResult RootFrameViewport::UserScroll(ScrollGranularity granularity,
// TODO(bokan): Why do we call userScroll on the animators directly and
// not through the ScrollableAreas?
- ScrollResult visual_result = VisualViewport().GetScrollAnimator().UserScroll(
- granularity, visual_consumed_delta);
-
- if (visual_consumed_delta == pixel_delta)
+ if (visual_consumed_delta == pixel_delta) {
+ ScrollResult visual_result =
+ VisualViewport().GetScrollAnimator().UserScroll(
+ granularity, visual_consumed_delta, run_on_return.Release());
return visual_result;
+ }
+
+ ScrollableArea::ScrollCallback callback = run_on_return.Release();
+ auto all_done = callback ? base::BarrierClosure(2, std::move(callback))
+ : base::RepeatingClosure();
+ ScrollResult visual_result = VisualViewport().GetScrollAnimator().UserScroll(
+ granularity, visual_consumed_delta, all_done);
ScrollResult layout_result = LayoutViewport().GetScrollAnimator().UserScroll(
- granularity, scrollable_axis_delta);
+ granularity, scrollable_axis_delta, all_done);
// Remember to add any delta not used because of !userInputScrollable to the
// unusedScrollDelta in the result.