LibWeb: Use separate restore() for each ApplyFilters display list item
ApplyFilter internally calls canvas.saveLayer() which requires a
matching canvas.restore() to be called.
Fixes painting on https://supabase.com/ regressed by
8562b0e33b
This commit is contained in:
parent
30c8510725
commit
c94b4316e7
Notes:
github-actions[bot]
2024-12-01 15:13:10 +00:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/LadybirdBrowser/ladybird/commit/c94b4316e7a Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2680
2 changed files with 18 additions and 4 deletions
|
@ -55,9 +55,9 @@ void SVGSVGPaintable::paint_svg_box(PaintContext& context, PaintableBox const& s
|
|||
{
|
||||
auto const& computed_values = svg_box.computed_values();
|
||||
|
||||
auto filters = svg_box.computed_values().filter();
|
||||
auto const& filter = svg_box.computed_values().filter();
|
||||
auto masking_area = svg_box.get_masking_area();
|
||||
auto needs_to_save_state = computed_values.opacity() < 1 || svg_box.has_css_transform() || svg_box.get_masking_area().has_value() || !filters.is_none();
|
||||
auto needs_to_save_state = computed_values.opacity() < 1 || svg_box.has_css_transform() || svg_box.get_masking_area().has_value();
|
||||
|
||||
if (needs_to_save_state) {
|
||||
context.display_list_recorder().save();
|
||||
|
@ -67,7 +67,9 @@ void SVGSVGPaintable::paint_svg_box(PaintContext& context, PaintableBox const& s
|
|||
context.display_list_recorder().apply_opacity(computed_values.opacity());
|
||||
}
|
||||
|
||||
context.display_list_recorder().apply_filters(filters);
|
||||
if (!filter.is_none()) {
|
||||
context.display_list_recorder().apply_filters(filter);
|
||||
}
|
||||
|
||||
if (svg_box.has_css_transform()) {
|
||||
auto transform_matrix = svg_box.transform();
|
||||
|
@ -93,6 +95,10 @@ void SVGSVGPaintable::paint_svg_box(PaintContext& context, PaintableBox const& s
|
|||
|
||||
paint_descendants(context, svg_box, phase);
|
||||
|
||||
if (!filter.is_none()) {
|
||||
context.display_list_recorder().restore();
|
||||
}
|
||||
|
||||
if (needs_to_save_state) {
|
||||
context.display_list_recorder().restore();
|
||||
}
|
||||
|
|
|
@ -327,7 +327,11 @@ void StackingContext::paint(PaintContext& context) const
|
|||
context.display_list_recorder().push_scroll_frame_id(*paintable_box().scroll_frame_id());
|
||||
}
|
||||
context.display_list_recorder().push_stacking_context(push_stacking_context_params);
|
||||
|
||||
auto const& filter = computed_values.filter();
|
||||
if (!filter.is_none()) {
|
||||
context.display_list_recorder().apply_filters(paintable_box().computed_values().filter());
|
||||
}
|
||||
|
||||
if (auto mask_image = computed_values.mask_image()) {
|
||||
auto mask_display_list = DisplayList::create();
|
||||
|
@ -348,6 +352,10 @@ void StackingContext::paint(PaintContext& context) const
|
|||
}
|
||||
}
|
||||
|
||||
if (!filter.is_none()) {
|
||||
context.display_list_recorder().restore();
|
||||
}
|
||||
|
||||
paint_internal(context);
|
||||
context.display_list_recorder().pop_stacking_context();
|
||||
if (paintable_box().scroll_frame_id().has_value()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue