From 22da83c295b9c67151c65cf0306d8ea5183671d3 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 26 Feb 2024 10:13:55 +0100 Subject: [PATCH] LibWeb: Resolve "object-position" without unwrapping raw percentage Use `to_px()` that accepts reference value instead. No behaviour change intended. --- .../LibWeb/Painting/ImagePaintable.cpp | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp index e2aa43c5ce..9d2b0d5c25 100644 --- a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp @@ -121,8 +121,8 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const auto scaled_bitmap_width = bitmap_rect.width() * scale_x; auto scaled_bitmap_height = bitmap_rect.height() * scale_y; - auto residual_horizontal = image_int_rect.width() - scaled_bitmap_width; - auto residual_vertical = image_int_rect.height() - scaled_bitmap_height; + auto residual_horizontal = CSSPixels::nearest_value_for(image_int_rect.width() - scaled_bitmap_width); + auto residual_vertical = CSSPixels::nearest_value_for(image_int_rect.height() - scaled_bitmap_height); bitmap_intersect.set_x((bitmap_rect.width() - bitmap_intersect.width()) / 2); bitmap_intersect.set_y((bitmap_rect.height() - bitmap_intersect.height()) / 2); @@ -135,17 +135,10 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const auto const& horizontal_edge = horizontal->as_edge(); auto const& offset = horizontal_edge.offset(); if (horizontal_edge.edge() == CSS::PositionEdge::Left) { - if (offset.is_percentage()) - offset_x = (double)(residual_horizontal)*offset.percentage().as_fraction(); - else - offset_x = offset.length().to_px(layout_node()).to_int(); - + offset_x = offset.to_px(layout_node(), residual_horizontal).to_int(); bitmap_intersect.set_x(0); } else if (horizontal_edge.edge() == CSS::PositionEdge::Right) { - if (offset.is_percentage()) - offset_x = (double)residual_horizontal - (double)(residual_horizontal)*offset.percentage().as_fraction(); - else - offset_x = residual_horizontal - offset.length().to_px(layout_node()).to_int(); + offset_x = residual_horizontal.to_int() - offset.to_px(layout_node(), residual_horizontal).to_int(); } if (image_int_rect.width() < scaled_bitmap_width) bitmap_intersect.set_x(-(offset_x / scale_x)); @@ -157,17 +150,10 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const auto const& vertical_edge = vertical->as_edge(); auto const& offset = vertical_edge.offset(); if (vertical_edge.edge() == CSS::PositionEdge::Top) { - if (offset.is_percentage()) - offset_y = (double)(residual_vertical)*offset.percentage().as_fraction(); - else - offset_y = offset.length().to_px(layout_node()).to_int(); - + offset_y = offset.to_px(layout_node(), residual_vertical).to_int(); bitmap_intersect.set_y(0); } else if (vertical_edge.edge() == CSS::PositionEdge::Bottom) { - if (offset.is_percentage()) - offset_y = (double)residual_vertical - (double)(residual_vertical)*offset.percentage().as_fraction(); - else - offset_y = residual_vertical - offset.length().to_px(layout_node()).to_int(); + offset_y = residual_vertical.to_int() - offset.to_px(layout_node(), residual_vertical).to_int(); } if (image_int_rect.height() < scaled_bitmap_height) bitmap_intersect.set_y(-(offset_y / scale_y));