LibWeb: Pass sizes instead of rects to to_gfx_scaling_mode()

Position is irrelevant when determining the right scaling mode. No
functional changes.
This commit is contained in:
Jelle Raaijmakers 2025-11-12 09:37:53 +01:00 committed by Alexander Kalenik
parent 3f6cbeb87e
commit d352c4673c
Notes: github-actions[bot] 2025-11-12 15:00:11 +00:00
7 changed files with 11 additions and 10 deletions

View file

@ -453,9 +453,9 @@ struct TextDecorationThickness {
};
// FIXME: Find a better place for this helper.
inline Gfx::ScalingMode to_gfx_scaling_mode(ImageRendering css_value, Gfx::IntRect source, Gfx::IntRect target)
inline Gfx::ScalingMode to_gfx_scaling_mode(ImageRendering css_value, Gfx::IntSize source, Gfx::IntSize target)
{
if (source.size() == target.size())
if (source == target)
return Gfx::ScalingMode::None;
switch (css_value) {

View file

@ -156,9 +156,9 @@ void ImageStyleValue::paint(DisplayListRecordingContext& context, DevicePixelRec
if (!image_data)
return;
auto rect = image_data->frame_rect(m_current_frame_index).value_or(dest_rect.to_type<int>());
auto scaling_mode = to_gfx_scaling_mode(image_rendering, rect, dest_rect.to_type<int>());
auto dest_int_rect = dest_rect.to_type<int>();
auto rect = image_data->frame_rect(m_current_frame_index).value_or(dest_int_rect);
auto scaling_mode = to_gfx_scaling_mode(image_rendering, rect.size(), dest_int_rect.size());
image_data->paint(context, m_current_frame_index, dest_int_rect, dest_int_rect, scaling_mode);
}

View file

@ -322,7 +322,7 @@ void paint_background(DisplayListRecordingContext& context, PaintableBox const&
dest_rect.set_height(1);
auto const* bitmap = static_cast<CSS::ImageStyleValue const&>(image).current_frame_bitmap(dest_rect);
auto scaling_mode = to_gfx_scaling_mode(image_rendering, bitmap->rect(), dest_rect.to_type<int>());
auto scaling_mode = to_gfx_scaling_mode(image_rendering, bitmap->size(), dest_rect.size().to_type<int>());
context.display_list_recorder().draw_repeated_immutable_bitmap(dest_rect.to_type<int>(), clip_rect.to_type<int>(), *bitmap, scaling_mode, repeat_x, repeat_y);
} else {
for_each_image_device_rect([&](auto const& image_device_rect) {

View file

@ -36,8 +36,9 @@ void CanvasPaintable::paint(DisplayListRecordingContext& context, PaintPhase pha
if (auto surface = canvas_element.surface()) {
// FIXME: Remove this const_cast.
const_cast<HTML::HTMLCanvasElement&>(canvas_element).present();
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), surface->rect(), canvas_rect.to_type<int>());
context.display_list_recorder().draw_painting_surface(canvas_rect.to_type<int>(), *surface, surface->rect(), scaling_mode);
auto canvas_int_rect = canvas_rect.to_type<int>();
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), surface->size(), canvas_int_rect.size());
context.display_list_recorder().draw_painting_surface(canvas_int_rect, *surface, surface->rect(), scaling_mode);
}
}
}

View file

@ -77,7 +77,7 @@ void ImagePaintable::paint(DisplayListRecordingContext& context, PaintPhase phas
ScopedCornerRadiusClip corner_clip { context, image_rect_device_pixels, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) };
auto image_int_rect_device_pixels = image_rect_device_pixels.to_type<int>();
auto bitmap_rect = decoded_image_data->frame_rect(m_image_provider.current_frame_index()).value_or(image_int_rect_device_pixels);
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), bitmap_rect, image_int_rect_device_pixels);
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), bitmap_rect.size(), image_int_rect_device_pixels.size());
auto bitmap_aspect_ratio = (float)bitmap_rect.height() / bitmap_rect.width();
auto image_aspect_ratio = (float)image_rect.height() / (float)image_rect.width();

View file

@ -127,8 +127,8 @@ void VideoPaintable::paint(DisplayListRecordingContext& context, PaintPhase phas
}();
auto paint_frame = [&](auto const& frame) {
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), frame->rect(), video_rect.to_type<int>());
auto dst_rect = video_rect.to_type<int>();
auto scaling_mode = to_gfx_scaling_mode(computed_values().image_rendering(), frame->rect().size(), dst_rect.size());
context.display_list_recorder().draw_scaled_immutable_bitmap(dst_rect, dst_rect, Gfx::ImmutableBitmap::create(*frame), scaling_mode);
};

View file

@ -272,7 +272,7 @@ Optional<Gfx::Filter> SVGFilterElement::gfx_filter(Layout::NodeWithStyle const&
return IterationDecision::Continue;
auto dest_rect = Gfx::enclosing_int_rect(paintable_box->absolute_rect().to_type<float>());
auto scaling_mode = CSS::to_gfx_scaling_mode(paintable_box->computed_values().image_rendering(), *src_rect, dest_rect);
auto scaling_mode = CSS::to_gfx_scaling_mode(paintable_box->computed_values().image_rendering(), src_rect->size(), dest_rect.size());
root_filter = Gfx::Filter::image(*bitmap, *src_rect, dest_rect, scaling_mode);
update_result_map(*image_primitive);
} else if (auto* merge_primitive = as_if<SVGFEMergeElement>(node)) {