浏览代码

LibWeb: Handle inline-start and inline-end as float values

Should resolve #449 for LTR languages at least
Colin Reeder 1 年之前
父节点
当前提交
d427344f39

+ 17 - 0
Tests/LibWeb/Layout/expected/block-and-inline/float-logical.txt

@@ -0,0 +1,17 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+  BlockContainer <html> at (0,0) content-size 800x60 [BFC] children: not-inline
+    BlockContainer <(anonymous)> at (0,0) content-size 800x0 children: inline
+      TextNode <#text>
+    BlockContainer <body> at (8,8) content-size 784x0 children: inline
+      TextNode <#text>
+      BlockContainer <div#b> at (9,9) content-size 50x50 floating [BFC] children: not-inline
+      TextNode <#text>
+      BlockContainer <div#c> at (741,9) content-size 50x50 floating [BFC] children: not-inline
+      TextNode <#text>
+
+ViewportPaintable (Viewport<#document>) [0,0 800x600]
+  PaintableWithLines (BlockContainer<HTML>) [0,0 800x60]
+    PaintableWithLines (BlockContainer(anonymous)) [0,0 800x0]
+    PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
+      PaintableWithLines (BlockContainer<DIV>#b) [8,8 52x52]
+      PaintableWithLines (BlockContainer<DIV>#c) [740,8 52x52]

+ 23 - 0
Tests/LibWeb/Layout/input/block-and-inline/float-logical.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+#b {
+    border: 1px solid red;
+    width: 50px;
+    height: 50px;
+    float: inline-start;
+}
+#c {
+    border: 1px solid blue;
+    width: 50px;
+    height: 50px;
+    float: inline-end;
+}
+</style>
+</head>
+<body>
+    <div id=b></div>
+    <div id=c></div>
+</body>
+</html>

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

@@ -195,7 +195,9 @@
   "float": [
     "none",
     "left",
-    "right"
+    "right",
+    "inline-start",
+    "inline-end"
   ],
   "font-variant": [
     "normal",

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

@@ -188,8 +188,10 @@
   "initial-only",
   "inline",
   "inline-block",
+  "inline-end",
   "inline-flex",
   "inline-grid",
+  "inline-start",
   "inline-table",
   "inset",
   "inside",

+ 13 - 0
Userland/Libraries/LibWeb/CSS/StyleComputer.cpp

@@ -711,6 +711,19 @@ void StyleComputer::for_each_property_expanding_shorthands(PropertyID property_i
         return;
     }
 
+    if (property_id == CSS::PropertyID::Float) {
+        auto ident = value.to_identifier();
+
+        // FIXME: Honor writing-mode, direction and text-orientation.
+        if (ident == CSS::ValueID::InlineStart) {
+            set_longhand_property(CSS::PropertyID::Float, IdentifierStyleValue::create(CSS::ValueID::Left));
+            return;
+        } else if (ident == CSS::ValueID::InlineEnd) {
+            set_longhand_property(CSS::PropertyID::Float, IdentifierStyleValue::create(CSS::ValueID::Right));
+            return;
+        }
+    }
+
     if (property_is_shorthand(property_id)) {
         // ShorthandStyleValue was handled already.
         // That means if we got here, that `value` must be a CSS-wide keyword, which we should apply to our longhand properties.