LibWeb: Pass device_pixels_per_css_pixel into DisplayList constructor

Having a setter for `device_pixels_per_css_pixel` was confusing because
display lists are immutable, so it doesn't make sense to override this
value after the display list has been created.
This commit is contained in:
Aliaksandr Kalenik 2025-07-26 16:41:20 +02:00 committed by Jelle Raaijmakers
parent 8e3a42c54e
commit 789016841e
6 changed files with 11 additions and 12 deletions

View File

@ -82,7 +82,7 @@ Optional<Gfx::ImageCursor> CursorStyleValue::make_image_cursor(Layout::NodeWithS
painter->clear_rect(bitmap.rect().to_type<float>(), Color::Transparent);
// Paint the cursor into a bitmap.
auto display_list = Painting::DisplayList::create();
auto display_list = Painting::DisplayList::create(document.page().client().device_pixels_per_css_pixel());
Painting::DisplayListRecorder display_list_recorder(display_list);
PaintContext paint_context { display_list_recorder, document.page().palette(), document.page().client().device_pixels_per_css_pixel() };

View File

@ -6416,7 +6416,7 @@ RefPtr<Painting::DisplayList> Document::record_display_list(HTML::PaintConfig co
return m_cached_display_list;
}
auto display_list = Painting::DisplayList::create();
auto display_list = Painting::DisplayList::create(page().client().device_pixels_per_css_pixel());
Painting::DisplayListRecorder display_list_recorder(display_list);
// https://drafts.csswg.org/css-color-adjust-1/#color-scheme-effect
@ -6469,8 +6469,6 @@ RefPtr<Painting::DisplayList> Document::record_display_list(HTML::PaintConfig co
viewport_paintable.paint_all_phases(context);
display_list->set_device_pixels_per_css_pixel(page().client().device_pixels_per_css_pixel());
m_cached_display_list = display_list;
m_cached_display_list_paint_config = config;

View File

@ -20,7 +20,7 @@ namespace Web::Painting {
static RefPtr<DisplayList> compute_text_clip_paths(PaintContext& context, Paintable const& paintable, CSSPixelPoint containing_block_location)
{
auto text_clip_paths = DisplayList::create();
auto text_clip_paths = DisplayList::create(context.device_pixels_per_css_pixel());
DisplayListRecorder display_list_recorder(*text_clip_paths);
// Remove containing block offset, so executing the display list will produce mask at (0, 0)
display_list_recorder.translate(-context.floored_device_point(containing_block_location).to_type<int>());

View File

@ -84,9 +84,9 @@ private:
class DisplayList : public AtomicRefCounted<DisplayList> {
public:
static NonnullRefPtr<DisplayList> create()
static NonnullRefPtr<DisplayList> create(double device_pixels_per_css_pixel)
{
return adopt_ref(*new DisplayList());
return adopt_ref(*new DisplayList(device_pixels_per_css_pixel));
}
void append(Command&& command, Optional<i32> scroll_frame_id, RefPtr<ClipFrame const>);
@ -98,14 +98,15 @@ public:
};
AK::SegmentedVector<CommandListItem, 512> const& commands() const { return m_commands; }
void set_device_pixels_per_css_pixel(double device_pixels_per_css_pixel) { m_device_pixels_per_css_pixel = device_pixels_per_css_pixel; }
double device_pixels_per_css_pixel() const { return m_device_pixels_per_css_pixel; }
String dump() const;
private:
DisplayList() = default;
DisplayList(double device_pixels_per_css_pixel)
: m_device_pixels_per_css_pixel(device_pixels_per_css_pixel)
{
}
AK::SegmentedVector<CommandListItem, 512> m_commands;
double m_device_pixels_per_css_pixel;

View File

@ -83,7 +83,7 @@ RefPtr<Gfx::ImmutableBitmap> SVGMaskable::calculate_mask_of_svg(PaintContext& co
if (mask_bitmap_or_error.is_error())
return {};
mask_bitmap = mask_bitmap_or_error.release_value();
auto display_list = DisplayList::create();
auto display_list = DisplayList::create(context.device_pixels_per_css_pixel());
DisplayListRecorder display_list_recorder(*display_list);
display_list_recorder.translate(-mask_rect.location().to_type<int>());
auto paint_context = context.clone(display_list_recorder);

View File

@ -353,7 +353,7 @@ void StackingContext::paint(PaintContext& context) const
}
if (auto mask_image = computed_values.mask_image()) {
auto mask_display_list = DisplayList::create();
auto mask_display_list = DisplayList::create(context.device_pixels_per_css_pixel());
DisplayListRecorder display_list_recorder(*mask_display_list);
auto mask_painting_context = context.clone(display_list_recorder);
auto mask_rect_in_device_pixels = context.enclosing_device_rect(paintable_box().absolute_padding_box_rect());