Jelajahi Sumber

LibWeb: Add -libweb-left and -libweb-right text-align values

These ensure that block level elements are also left and right aligned
respectively on top of the regular text alignment, matching
-libweb-center.
kamp 2 tahun lalu
induk
melakukan
4ac7c41483

+ 3 - 1
Userland/Libraries/LibWeb/CSS/Enums.json

@@ -242,7 +242,9 @@
         "justify",
         "left",
         "right",
-        "-libweb-center"
+        "-libweb-center",
+        "-libweb-left",
+        "-libweb-right"
     ],
     "text-decoration-line": [
         "blink",

+ 2 - 0
Userland/Libraries/LibWeb/CSS/Identifiers.json

@@ -1,5 +1,7 @@
 [
   "-libweb-center",
+  "-libweb-left",
+  "-libweb-right",
   "-libweb-link",
   "-libweb-palette-active-link",
   "-libweb-palette-active-window-border1",

+ 3 - 0
Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp

@@ -815,6 +815,9 @@ void BlockFormattingContext::place_block_level_element_in_normal_flow_horizontal
 
     if (child_box.containing_block()->computed_values().text_align() == CSS::TextAlign::LibwebCenter) {
         x += (available_width_within_containing_block / 2) - box_state.content_width() / 2;
+    } else if (child_box.containing_block()->computed_values().text_align() == CSS::TextAlign::LibwebRight) {
+        // Subtracting the left margin here because left and right margins need to be swapped when aligning to the right
+        x += available_width_within_containing_block - box_state.content_width() - box_state.margin_box_left();
     } else {
         x += box_state.margin_box_left();
     }

+ 2 - 0
Userland/Libraries/LibWeb/Layout/LineBuilder.cpp

@@ -180,9 +180,11 @@ void LineBuilder::update_last_line()
             x_offset += excess_horizontal_space / 2;
             break;
         case CSS::TextAlign::Right:
+        case CSS::TextAlign::LibwebRight:
             x_offset += excess_horizontal_space;
             break;
         case CSS::TextAlign::Left:
+        case CSS::TextAlign::LibwebLeft:
         case CSS::TextAlign::Justify:
         default:
             break;