mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-27 12:46:06 +00:00
LibWeb: Add missing border-radius clip in refresh_clip_state()
Adds missing clip of border-radius for clip frame. While we have already accounted for the border-radius of containing blocks, the box itself was not being clipped.
This commit is contained in:
parent
1829ec56e2
commit
e75791d9e1
Notes:
github-actions[bot]
2024-08-01 10:30:17 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: e75791d9e1
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/917
Reviewed-by: https://github.com/awesomekling ✅
1 changed files with 8 additions and 5 deletions
|
@ -156,9 +156,16 @@ void ViewportPaintable::refresh_clip_state()
|
|||
// Start from CSS clip property if it exists.
|
||||
Optional<CSSPixelRect> clip_rect = paintable_box.get_clip_rect();
|
||||
|
||||
auto add_border_radii_clip = [&](auto rect, auto border_radii_data) {
|
||||
if (border_radii_data.has_any_radius()) {
|
||||
BorderRadiiClip border_radii_clip { .rect = rect, .radii = border_radii_data };
|
||||
clip_frame.add_border_radii_clip(border_radii_clip);
|
||||
}
|
||||
};
|
||||
clip_frame.clear_border_radii_clips();
|
||||
if (overflow_x != CSS::Overflow::Visible && overflow_y != CSS::Overflow::Visible) {
|
||||
auto overflow_clip_rect = paintable_box.compute_absolute_padding_rect_with_css_transform_applied();
|
||||
add_border_radii_clip(overflow_clip_rect, paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes));
|
||||
for (auto const* block = &paintable_box.layout_box(); !block->is_viewport(); block = block->containing_block()) {
|
||||
auto const& block_paintable_box = *block->paintable_box();
|
||||
auto block_overflow_x = block_paintable_box.computed_values().overflow_x();
|
||||
|
@ -166,11 +173,7 @@ void ViewportPaintable::refresh_clip_state()
|
|||
if (block_overflow_x != CSS::Overflow::Visible && block_overflow_y != CSS::Overflow::Visible) {
|
||||
auto rect = block_paintable_box.compute_absolute_padding_rect_with_css_transform_applied();
|
||||
overflow_clip_rect.intersect(rect);
|
||||
auto border_radii_data = block_paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes);
|
||||
if (border_radii_data.has_any_radius()) {
|
||||
BorderRadiiClip border_radii_clip { .rect = rect, .radii = border_radii_data };
|
||||
clip_frame.add_border_radii_clip(border_radii_clip);
|
||||
}
|
||||
add_border_radii_clip(rect, block_paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes));
|
||||
}
|
||||
if (auto css_clip_property_rect = block->paintable_box()->get_clip_rect(); css_clip_property_rect.has_value())
|
||||
overflow_clip_rect.intersect(css_clip_property_rect.value());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue