mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-26 12:17:52 +00:00
LibWeb: Accept paintable instead of layout node in paint_background()
After InlinePaintable is gone it's possible to make this function accept a PaintableBox instead of more broad Layout::NodeWithStyleAndBoxModelMetrics type.
This commit is contained in:
parent
048b51eb54
commit
78d8989ea4
Notes:
github-actions[bot]
2024-10-18 13:00:41 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: 78d8989ea4
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1845
3 changed files with 17 additions and 20 deletions
|
@ -48,17 +48,17 @@ static RefPtr<DisplayList> compute_text_clip_paths(PaintContext& context, Painta
|
|||
return text_clip_paths;
|
||||
}
|
||||
|
||||
static BackgroundBox get_box(CSS::BackgroundBox box_clip, BackgroundBox border_box, auto const& layout_node)
|
||||
static BackgroundBox get_box(CSS::BackgroundBox box_clip, BackgroundBox border_box, auto const& paintable_box)
|
||||
{
|
||||
auto box = border_box;
|
||||
switch (box_clip) {
|
||||
case CSS::BackgroundBox::ContentBox: {
|
||||
auto& padding = layout_node.box_model().padding;
|
||||
auto& padding = paintable_box.box_model().padding;
|
||||
box.shrink(padding.top, padding.right, padding.bottom, padding.left);
|
||||
[[fallthrough]];
|
||||
}
|
||||
case CSS::BackgroundBox::PaddingBox: {
|
||||
auto& border = layout_node.box_model().border;
|
||||
auto& border = paintable_box.box_model().border;
|
||||
box.shrink(border.top, border.right, border.bottom, border.left);
|
||||
[[fallthrough]];
|
||||
}
|
||||
|
@ -69,13 +69,13 @@ static BackgroundBox get_box(CSS::BackgroundBox box_clip, BackgroundBox border_b
|
|||
}
|
||||
|
||||
// https://www.w3.org/TR/css-backgrounds-3/#backgrounds
|
||||
void paint_background(PaintContext& context, Layout::NodeWithStyleAndBoxModelMetrics const& layout_node, CSS::ImageRendering image_rendering, ResolvedBackground resolved_background, BorderRadiiData const& border_radii)
|
||||
void paint_background(PaintContext& context, PaintableBox const& paintable_box, CSS::ImageRendering image_rendering, ResolvedBackground resolved_background, BorderRadiiData const& border_radii)
|
||||
{
|
||||
auto& display_list_recorder = context.display_list_recorder();
|
||||
|
||||
DisplayListRecorderStateSaver state { display_list_recorder };
|
||||
if (resolved_background.needs_text_clip) {
|
||||
auto display_list = compute_text_clip_paths(context, *layout_node.first_paintable(), resolved_background.background_rect.location());
|
||||
auto display_list = compute_text_clip_paths(context, paintable_box, resolved_background.background_rect.location());
|
||||
auto rect = context.rounded_device_rect(resolved_background.background_rect);
|
||||
display_list_recorder.add_mask(move(display_list), rect.to_type<int>());
|
||||
}
|
||||
|
@ -102,10 +102,10 @@ void paint_background(PaintContext& context, Layout::NodeWithStyleAndBoxModelMet
|
|||
DevicePixels right { 0 };
|
||||
} clip_shrink;
|
||||
|
||||
auto border_top = layout_node.computed_values().border_top();
|
||||
auto border_bottom = layout_node.computed_values().border_bottom();
|
||||
auto border_left = layout_node.computed_values().border_left();
|
||||
auto border_right = layout_node.computed_values().border_right();
|
||||
auto border_top = paintable_box.computed_values().border_top();
|
||||
auto border_bottom = paintable_box.computed_values().border_bottom();
|
||||
auto border_left = paintable_box.computed_values().border_left();
|
||||
auto border_right = paintable_box.computed_values().border_right();
|
||||
|
||||
if (border_top.color.alpha() == 255 && border_bottom.color.alpha() == 255
|
||||
&& border_left.color.alpha() == 255 && border_right.color.alpha() == 255) {
|
||||
|
@ -120,7 +120,7 @@ void paint_background(PaintContext& context, Layout::NodeWithStyleAndBoxModelMet
|
|||
DisplayListRecorderStateSaver state { display_list_recorder };
|
||||
|
||||
// Clip
|
||||
auto clip_box = get_box(layer.clip, border_box, layout_node);
|
||||
auto clip_box = get_box(layer.clip, border_box, paintable_box);
|
||||
|
||||
CSSPixelRect const& css_clip_rect = clip_box.rect;
|
||||
auto clip_rect = context.rounded_device_rect(css_clip_rect);
|
||||
|
@ -139,15 +139,12 @@ void paint_background(PaintContext& context, Layout::NodeWithStyleAndBoxModelMet
|
|||
|
||||
switch (layer.attachment) {
|
||||
case CSS::BackgroundAttachment::Fixed:
|
||||
background_positioning_area.set_location(layout_node.root().navigable()->viewport_scroll_offset());
|
||||
background_positioning_area.set_location(paintable_box.layout_node().root().navigable()->viewport_scroll_offset());
|
||||
break;
|
||||
case CSS::BackgroundAttachment::Local:
|
||||
if (is<Layout::Box>(layout_node)) {
|
||||
auto const* paintable_box = static_cast<Layout::Box const&>(layout_node).paintable_box();
|
||||
if (paintable_box && !paintable_box->is_viewport()) {
|
||||
auto scroll_offset = paintable_box->scroll_offset();
|
||||
background_positioning_area.translate_by(-scroll_offset.x(), -scroll_offset.y());
|
||||
}
|
||||
if (!paintable_box.is_viewport()) {
|
||||
auto scroll_offset = paintable_box.scroll_offset();
|
||||
background_positioning_area.translate_by(-scroll_offset.x(), -scroll_offset.y());
|
||||
}
|
||||
break;
|
||||
case CSS::BackgroundAttachment::Scroll:
|
||||
|
@ -244,7 +241,7 @@ void paint_background(PaintContext& context, Layout::NodeWithStyleAndBoxModelMet
|
|||
CSSPixels initial_image_x = image_rect.x();
|
||||
CSSPixels image_y = image_rect.y();
|
||||
|
||||
image.resolve_for_size(layout_node, image_rect.size());
|
||||
image.resolve_for_size(paintable_box.layout_node_with_style_and_box_metrics(), image_rect.size());
|
||||
|
||||
auto for_each_image_device_rect = [&](auto callback) {
|
||||
while (image_y < css_clip_rect.bottom()) {
|
||||
|
|
|
@ -47,6 +47,6 @@ struct ResolvedBackground {
|
|||
|
||||
ResolvedBackground resolve_background_layers(Vector<CSS::BackgroundLayerData> const& layers, Layout::NodeWithStyleAndBoxModelMetrics const& layout_node, Color background_color, CSSPixelRect const& border_rect, BorderRadiiData const& border_radii);
|
||||
|
||||
void paint_background(PaintContext&, Layout::NodeWithStyleAndBoxModelMetrics const&, CSS::ImageRendering, ResolvedBackground resolved_background, BorderRadiiData const&);
|
||||
void paint_background(PaintContext&, PaintableBox const&, CSS::ImageRendering, ResolvedBackground resolved_background, BorderRadiiData const&);
|
||||
|
||||
}
|
||||
|
|
|
@ -476,7 +476,7 @@ void PaintableBox::paint_background(PaintContext& context) const
|
|||
if (layout_node_with_style_and_box_metrics().is_body() && document().html_element()->should_use_body_background_properties())
|
||||
return;
|
||||
|
||||
Painting::paint_background(context, layout_node_with_style_and_box_metrics(), computed_values().image_rendering(), m_resolved_background, normalized_border_radii_data());
|
||||
Painting::paint_background(context, *this, computed_values().image_rendering(), m_resolved_background, normalized_border_radii_data());
|
||||
}
|
||||
|
||||
void PaintableBox::paint_box_shadow(PaintContext& context) const
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue