about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-25 18:21:47 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-25 18:21:47 +0100
commit0195586128131d19ef6460ed18a045029671ba7b (patch)
treeae3b097a88965cc0476cc0553d11bbaafdb96242
parent72513f0c4c8159032283c0989efc0399274e6b0b (diff)
downloadchawan-0195586128131d19ef6460ed18a045029671ba7b.tar.gz
cascade, layout: blockify flex in cascade
Both simpler and more efficient.
-rw-r--r--src/css/cascade.nim4
-rw-r--r--src/css/layout.nim23
2 files changed, 4 insertions, 23 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim
index 137d216b..37661ec0 100644
--- a/src/css/cascade.nim
+++ b/src/css/cascade.nim
@@ -340,7 +340,9 @@ proc applyDeclarations(rules: RuleList; parent, element: Element;
   if result{"position"} in {PositionAbsolute, PositionFixed}:
     if result{"display"} == DisplayInline:
       result{"display"} = DisplayInlineBlock
-  elif result{"float"} != FloatNone:
+  elif result{"float"} != FloatNone or
+      ctx.parentComputed != nil and
+        ctx.parentComputed{"display"} == DisplayFlex:
     result{"display"} = result{"display"}.blockify()
   if (result{"overflow-x"} in {OverflowVisible, OverflowClip}) !=
       (result{"overflow-y"} in {OverflowVisible, OverflowClip}):
diff --git a/src/css/layout.nim b/src/css/layout.nim
index b2a45aa6..aaac434a 100644
--- a/src/css/layout.nim
+++ b/src/css/layout.nim
@@ -3274,29 +3274,8 @@ proc buildBlock(ctx: var BlockBuilderContext) =
     ctx.inline = nil
   ctx.flushInlineGroup()
 
-proc buildInnerFlex(ctx: var BlockBuilderContext) =
-  let inlineComputed = ctx.outer.computed.inheritProperties()
-  for child in ctx.styledNode.children:
-    case child.t
-    of stElement:
-      let display = child.computed{"display"}.blockify()
-      let computed = if display != child.computed{"display"}:
-        let computed = child.computed.copyProperties()
-        computed{"display"} = display
-        computed
-      else:
-        child.computed
-      ctx.buildFromElem(child, computed)
-    of stText:
-      let text = child.text
-      if ctx.canBuildAnonInline(ctx.outer.computed, text.data):
-        ctx.pushInlineText(inlineComputed, ctx.styledNode.element, text)
-    of stReplacement:
-      ctx.buildReplacement(child, ctx.styledNode.element, inlineComputed)
-  ctx.iflush()
-
 proc buildFlex(ctx: var BlockBuilderContext) =
-  ctx.buildInnerFlex()
+  ctx.buildInnerBlock()
   # Flush anonymous tables here, to avoid setting inline layout with tables.
   ctx.flushTable()
   # (flush here, because why not)