1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-09 09:34:57 +09:00

LibWeb: Ensure scroll offset is applied to mask-images

When recording the display list for a stacking context, the following
operations (relevant to this bug) happened:
* push a stacking context
  * as part of that push a None-value to the scroll frame id stack
* apply filters
* apply masking
* paint recursively

This meant that mask-images were always recorded without scroll frame
id, causing them to be painted without any scroll offset. As a result
mask-images would break as soon as the website using them was scrolled.

Instead, push to the scroll frame id stack later to solve the problem:
* push a stacking context
* apply filters
* apply masking
* push a None-value to the scroll frame id stack
* paint recursively
This commit is contained in:
InvalidUsernameException 2025-05-29 19:57:21 +02:00 committed by Alexander Kalenik
parent ed65d5b342
commit 164afdcc59
Notes: github-actions[bot] 2025-05-29 20:03:16 +00:00
4 changed files with 31 additions and 2 deletions

View file

@ -310,12 +310,10 @@ void DisplayListRecorder::push_stacking_context(PushStackingContextParams params
.matrix = params.transform.matrix,
},
.clip_path = params.clip_path });
m_scroll_frame_id_stack.append({});
}
void DisplayListRecorder::pop_stacking_context()
{
(void)m_scroll_frame_id_stack.take_last();
append(PopStackingContext {});
}

View file

@ -371,7 +371,9 @@ void StackingContext::paint(PaintContext& context) const
}
}
context.display_list_recorder().push_scroll_frame_id({});
paint_internal(context);
context.display_list_recorder().pop_scroll_frame_id();
if (!filter.is_empty()) {
context.display_list_recorder().restore();