From e2b2b2439c2fc5dc6aa7c3f90a0191768ec3df65 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 25 May 2024 19:07:58 +0100 Subject: [PATCH] LibWeb: Apply corner clip before scroll offset for PaintableWithLines Fixes bug when corner clip mask moves along with the scrolled text. --- ...crolled-text-with-clipped-corners-ref.html | 36 +++++++++++++++++++ .../scrolled-text-with-clipped-corners.html | 29 +++++++++++++++ .../LibWeb/Painting/PaintableBox.cpp | 5 +-- 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 Tests/LibWeb/Ref/reference/scrolled-text-with-clipped-corners-ref.html create mode 100644 Tests/LibWeb/Ref/scrolled-text-with-clipped-corners.html diff --git a/Tests/LibWeb/Ref/reference/scrolled-text-with-clipped-corners-ref.html b/Tests/LibWeb/Ref/reference/scrolled-text-with-clipped-corners-ref.html new file mode 100644 index 00000000000..b3f0ad58095 --- /dev/null +++ b/Tests/LibWeb/Ref/reference/scrolled-text-with-clipped-corners-ref.html @@ -0,0 +1,36 @@ + + +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultrices neque eu nisi facilisis + viverra. Integer lacinia, lacus vel condimentum suscipit, lacus felis porta nulla, eget + lacinia sem neque ut neque. In sagittis, eros vel interdum porta, quam ex rhoncus lectus, + vitae suscipit risus orci sit amet velit. Praesent imperdiet condimentum rutrum. Cras vitae + nisl sapien. Curabitur ligula diam, tincidunt congue tincidunt nec, sodales nec orci. + Vestibulum tincidunt non elit in vehicula. Etiam malesuada neque eu porta rhoncus. Curabitur + vel nunc finibus ligula posuere venenatis. +
+
+ diff --git a/Tests/LibWeb/Ref/scrolled-text-with-clipped-corners.html b/Tests/LibWeb/Ref/scrolled-text-with-clipped-corners.html new file mode 100644 index 00000000000..a451ec39305 --- /dev/null +++ b/Tests/LibWeb/Ref/scrolled-text-with-clipped-corners.html @@ -0,0 +1,29 @@ + + + +
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultrices neque eu nisi facilisis + viverra. Integer lacinia, lacus vel condimentum suscipit, lacus felis porta nulla, eget lacinia + sem neque ut neque. In sagittis, eros vel interdum porta, quam ex rhoncus lectus, vitae suscipit + risus orci sit amet velit. Praesent imperdiet condimentum rutrum. Cras vitae nisl sapien. + Curabitur ligula diam, tincidunt congue tincidunt nec, sodales nec orci. Vestibulum tincidunt + non elit in vehicula. Etiam malesuada neque eu porta rhoncus. Curabitur vel nunc finibus ligula + posuere venenatis. +
+ diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp index 1ee9f177bc1..b7053d48bfa 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -679,8 +679,6 @@ void PaintableWithLines::paint(PaintContext& context, PaintPhase phase) const context.recording_painter().save(); // FIXME: Handle overflow-x and overflow-y being different values. context.recording_painter().add_clip_rect(context.rounded_device_rect(clip_box).to_type()); - auto scroll_offset = context.rounded_device_point(this->scroll_offset()); - context.recording_painter().translate(-scroll_offset.to_type()); auto border_radii = normalized_border_radii_data(ShrinkRadiiForBorders::Yes); CornerRadii corner_radii { @@ -693,6 +691,9 @@ void PaintableWithLines::paint(PaintContext& context, PaintPhase phase) const corner_clip_id = context.allocate_corner_clipper_id(); context.recording_painter().sample_under_corners(*corner_clip_id, corner_radii, context.rounded_device_rect(clip_box).to_type(), CornerClip::Outside); } + + auto scroll_offset = context.rounded_device_point(this->scroll_offset()); + context.recording_painter().translate(-scroll_offset.to_type()); } // Text shadows