From 3c6fdde4668032aba3d7a6841f97519829398dd1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 15 Jul 2023 16:32:13 +0200 Subject: [PATCH] LibWeb: Fix hit testing for fixed position nodes Subtract the scroll offset translation from the position when checking for intersection between boxes within fixed position nodes. --- Userland/Libraries/LibWeb/Painting/StackingContext.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp index 796cd2c44c..ebce39212b 100644 --- a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp +++ b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp @@ -482,6 +482,11 @@ Optional StackingContext::hit_test(CSSPixelPoint position, HitTes }; auto transformed_position = affine_transform_matrix().inverse().value_or({}).map(offset_position).to_type() + transform_origin; + if (paintable_box().layout_box().is_fixed_position()) { + auto scroll_offset = paintable_box().document().browsing_context()->viewport_scroll_offset(); + transformed_position.translate_by(-scroll_offset); + } + // FIXME: Support more overflow variations. if (paintable_box().computed_values().overflow_x() == CSS::Overflow::Hidden && paintable_box().computed_values().overflow_y() == CSS::Overflow::Hidden) { if (!paintable_box().absolute_border_box_rect().contains(transformed_position.x(), transformed_position.y()))