mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 23:17:45 +00:00
LibWeb: Avoid text-aligning content that is too long for its line box
Previously, we would always respect the `text-align` property, even if the text being aligned was too long for its line box and would be clipped. This led to seeing the clipped middle/end of strings when we should instead always see the beginning of the text.
This commit is contained in:
parent
54fb9477a4
commit
de9604212f
3 changed files with 38 additions and 12 deletions
|
@ -170,18 +170,22 @@ void LineBuilder::update_last_line()
|
|||
|
||||
CSSPixels excess_horizontal_space = m_available_width_for_current_line - line_box.width();
|
||||
|
||||
switch (text_align) {
|
||||
case CSS::TextAlign::Center:
|
||||
case CSS::TextAlign::LibwebCenter:
|
||||
x_offset += excess_horizontal_space / 2;
|
||||
break;
|
||||
case CSS::TextAlign::Right:
|
||||
x_offset += excess_horizontal_space;
|
||||
break;
|
||||
case CSS::TextAlign::Left:
|
||||
case CSS::TextAlign::Justify:
|
||||
default:
|
||||
break;
|
||||
// If (after justification, if any) the inline contents of a line box are too long to fit within it,
|
||||
// then the contents are start-aligned: any content that doesn't fit overflows the line box’s end edge.
|
||||
if (excess_horizontal_space > 0) {
|
||||
switch (text_align) {
|
||||
case CSS::TextAlign::Center:
|
||||
case CSS::TextAlign::LibwebCenter:
|
||||
x_offset += excess_horizontal_space / 2;
|
||||
break;
|
||||
case CSS::TextAlign::Right:
|
||||
x_offset += excess_horizontal_space;
|
||||
break;
|
||||
case CSS::TextAlign::Left:
|
||||
case CSS::TextAlign::Justify:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
auto strut_baseline = [&] {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue