about summary refs log tree commit diff stats
path: root/src/server/buffer.nim
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-05-03 17:30:56 +0200
committerbptato <nincsnevem662@gmail.com>2025-05-03 17:49:32 +0200
commit015aa0fd92ece4bdc1f645131b96369f801ed961 (patch)
tree1563324b8e12ad6f9275704285fa0e91c941f3be /src/server/buffer.nim
parentcdfa5ea9aa451b6be5790382881431eec2722394 (diff)
downloadchawan-015aa0fd92ece4bdc1f645131b96369f801ed961.tar.gz
layout, csstree: build stacking contexts together with tree
We often redo sub-layouts in layout, and this makes stacking contexts
very hard to build reliably there.

This fixes a bug where positioned descendants of flex items would
sometimes mysteriously disappear.
Diffstat (limited to 'src/server/buffer.nim')
-rw-r--r--src/server/buffer.nim5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index f8ced08d..6f3e004f 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -725,9 +725,10 @@ proc maybeReshape(buffer: Buffer) =
   if document == nil or document.documentElement == nil:
     return # not parsed yet, nothing to render
   if document.invalid:
-    buffer.rootBox = document.documentElement.buildTree(buffer.rootBox,
+    let stack = document.documentElement.buildTree(buffer.rootBox,
       buffer.config.markLinks)
-    let stack = buffer.rootBox.layout(addr buffer.attrs)
+    buffer.rootBox = BlockBox(stack.box)
+    buffer.rootBox.layout(addr buffer.attrs)
     buffer.lines.render(buffer.bgcolor, stack, addr buffer.attrs, buffer.images)
     document.invalid = false
     if buffer.hasTask(bcOnReshape):