From 7458c27c4b2a429a7aa857d581664b5a7da2d1cf Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Tue, 19 Dec 2023 15:51:21 +0100 Subject: [PATCH] WebContent: Pre-emptively update viewport offset on request to scroll --- Userland/Services/WebContent/PageClient.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Userland/Services/WebContent/PageClient.cpp b/Userland/Services/WebContent/PageClient.cpp index 25a9463282..81c3c5a930 100644 --- a/Userland/Services/WebContent/PageClient.cpp +++ b/Userland/Services/WebContent/PageClient.cpp @@ -281,6 +281,13 @@ void PageClient::page_did_request_scroll(i32 x_delta, i32 y_delta) void PageClient::page_did_request_scroll_to(Web::CSSPixelPoint scroll_position) { + // NOTE: The viewport scroll position is updated preemptively, so that subsequent + // viewport offset calculation could use new offset even before actual + // scroll on browser side happens. + auto viewport = page().top_level_traversable()->viewport_rect(); + viewport.set_location(scroll_position); + page().top_level_traversable()->set_viewport_rect(viewport); + auto device_scroll_position = page().css_to_device_point(scroll_position); client().async_did_request_scroll_to(device_scroll_position.to_type()); }