mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
LibWeb: Convert marker painting to new pixel units
This commit is contained in:
parent
fb43a71981
commit
a72302342a
Notes:
sideshowbarker
2024-07-18 08:59:31 +09:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/SerenityOS/serenity/commit/a72302342a Pull-request: https://github.com/SerenityOS/serenity/pull/16448 Reviewed-by: https://github.com/awesomekling ✅
1 changed files with 16 additions and 12 deletions
|
@ -31,24 +31,28 @@ void MarkerPaintable::paint(PaintContext& context, PaintPhase phase) const
|
|||
if (phase != PaintPhase::Foreground)
|
||||
return;
|
||||
|
||||
auto enclosing = enclosing_int_rect(absolute_rect());
|
||||
CSSPixelRect enclosing = absolute_rect().to_rounded<float>().to_type<CSSPixels>();
|
||||
auto device_enclosing = context.enclosing_device_rect(enclosing);
|
||||
|
||||
int marker_width = (int)enclosing.height() / 2;
|
||||
CSSPixels marker_width = enclosing.height() / 2.0f;
|
||||
|
||||
if (auto const* list_style_image = layout_box().list_style_image()) {
|
||||
Gfx::IntRect image_rect {
|
||||
CSSPixelRect image_rect {
|
||||
0, 0,
|
||||
list_style_image->natural_width().value_or(marker_width),
|
||||
list_style_image->natural_height().value_or(marker_width)
|
||||
list_style_image->natural_width().value_or(marker_width.value()),
|
||||
list_style_image->natural_height().value_or(marker_width.value())
|
||||
};
|
||||
image_rect.center_within(enclosing);
|
||||
list_style_image->resolve_for_size(layout_box(), image_rect.size().to_type<float>());
|
||||
list_style_image->paint(context, image_rect, computed_values().image_rendering());
|
||||
|
||||
auto device_image_rect = context.enclosing_device_rect(image_rect);
|
||||
list_style_image->resolve_for_size(layout_box(), device_image_rect.size().to_type<int>().to_type<float>());
|
||||
list_style_image->paint(context, device_image_rect.to_type<int>(), computed_values().image_rendering());
|
||||
return;
|
||||
}
|
||||
|
||||
Gfx::IntRect marker_rect { 0, 0, marker_width, marker_width };
|
||||
CSSPixelRect marker_rect { 0, 0, marker_width, marker_width };
|
||||
marker_rect.center_within(enclosing);
|
||||
auto device_marker_rect = context.enclosing_device_rect(marker_rect);
|
||||
|
||||
auto color = computed_values().color();
|
||||
|
||||
|
@ -56,13 +60,13 @@ void MarkerPaintable::paint(PaintContext& context, PaintPhase phase) const
|
|||
|
||||
switch (layout_box().list_style_type()) {
|
||||
case CSS::ListStyleType::Square:
|
||||
context.painter().fill_rect(marker_rect, color);
|
||||
context.painter().fill_rect(device_marker_rect.to_type<int>(), color);
|
||||
break;
|
||||
case CSS::ListStyleType::Circle:
|
||||
aa_painter.draw_ellipse(marker_rect, color, 1);
|
||||
aa_painter.draw_ellipse(device_marker_rect.to_type<int>(), color, 1);
|
||||
break;
|
||||
case CSS::ListStyleType::Disc:
|
||||
aa_painter.fill_ellipse(marker_rect, color);
|
||||
aa_painter.fill_ellipse(device_marker_rect.to_type<int>(), color);
|
||||
break;
|
||||
case CSS::ListStyleType::Decimal:
|
||||
case CSS::ListStyleType::DecimalLeadingZero:
|
||||
|
@ -74,7 +78,7 @@ void MarkerPaintable::paint(PaintContext& context, PaintPhase phase) const
|
|||
case CSS::ListStyleType::UpperRoman:
|
||||
if (layout_box().text().is_null())
|
||||
break;
|
||||
context.painter().draw_text(enclosing, layout_box().text(), Gfx::TextAlignment::Center);
|
||||
context.painter().draw_text(device_enclosing.to_type<int>(), layout_box().text(), Gfx::TextAlignment::Center);
|
||||
break;
|
||||
case CSS::ListStyleType::None:
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue