about summary refs log tree commit diff stats
path: root/src/css/layout.nim
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-01 16:14:14 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-01 16:14:14 +0100
commit081b1a6c0ba8357c421e4d361a814b1f07bedffe (patch)
tree86ea2090bf6bc519520c8f75759822d310f99380 /src/css/layout.nim
parent585ca24c924cadf351d9a95143732f3051cb157e (diff)
downloadchawan-081b1a6c0ba8357c421e4d361a814b1f07bedffe.tar.gz
layout: fix regression in cd069a76e
Diffstat (limited to 'src/css/layout.nim')
-rw-r--r--src/css/layout.nim30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/css/layout.nim b/src/css/layout.nim
index 531f8a19..76b2378c 100644
--- a/src/css/layout.nim
+++ b/src/css/layout.nim
@@ -1009,39 +1009,38 @@ func resolveBounds(lctx: LayoutContext; space: AvailableSpace; padding: Size;
 const CvalSizeMap = [dtHorizontal: cptWidth, dtVertical: cptHeight]
 
 proc resolveAbsoluteWidth(sizes: var ResolvedSizes; size: Size;
-    positioned: RelativeRect; computed: CSSValues;
-    lctx: LayoutContext) =
-  let padding = sizes.padding[dtHorizontal].sum()
+    positioned: RelativeRect; computed: CSSValues; lctx: LayoutContext) =
+  let paddingSum = sizes.padding[dtHorizontal].sum()
   if computed{"width"}.u == clAuto:
     let u = max(size.w - positioned[dtHorizontal].sum(), 0)
+    let marginSum = sizes.margin[dtHorizontal].sum()
     if computed{"left"}.u != clAuto and computed{"right"}.u != clAuto:
       # Both left and right are known, so we can calculate the width.
-      # Well, but subtract padding first.
-      sizes.space.w = stretch(u - padding)
+      # Well, but subtract padding and margin first.
+      sizes.space.w = stretch(u - paddingSum - marginSum)
     else:
       # Return shrink to fit and solve for left/right.
-      # Well, but subtract padding first.
-      sizes.space.w = fitContent(u - padding)
+      # Well, but subtract padding and margin first.
+      sizes.space.w = fitContent(u - paddingSum - marginSum)
   else:
-    let sizepx = computed{"width"}.spx(stretch(size.w), computed, padding)
+    let sizepx = computed{"width"}.spx(stretch(size.w), computed, paddingSum)
     sizes.space.w = stretch(sizepx)
 
 proc resolveAbsoluteHeight(sizes: var ResolvedSizes; size: Size;
-    positioned: RelativeRect; computed: CSSValues;
-    lctx: LayoutContext) =
+    positioned: RelativeRect; computed: CSSValues; lctx: LayoutContext) =
   if computed{"height"}.u == clAuto:
     let u = max(size.w - positioned[dtVertical].sum(), 0)
     if computed{"top"}.u != clAuto and computed{"bottom"}.u != clAuto:
       # Both top and bottom are known, so we can calculate the height.
-      # Well, but subtract padding first.
-      sizes.space.h = stretch(u - sizes.padding[dtVertical].sum())
+      # Well, but subtract padding and margin first.
+      sizes.space.h = stretch(u - sizes.padding[dtVertical].sum() -
+        sizes.margin[dtVertical].sum())
     else:
       # The height is based on the content.
       sizes.space.h = maxContent()
   else:
-    let padding = sizes.padding[dtVertical].sum()
     let sizepx = computed{"height"}.spx(stretch(size.h), computed,
-      padding)
+      sizes.padding[dtVertical].sum())
     sizes.space.h = stretch(sizepx)
 
 # Calculate and resolve available width & height for absolutely positioned
@@ -1056,9 +1055,6 @@ proc resolveAbsoluteSizes(lctx: LayoutContext; size: Size;
   )
   sizes.resolveAbsoluteWidth(size, positioned, computed, lctx)
   sizes.resolveAbsoluteHeight(size, positioned, computed, lctx)
-  # Subtract margins.
-  for dim, it in sizes.space.mpairs:
-    it.u = max(it.u - sizes.margin[dim].sum(), 0)
   return sizes
 
 # Calculate and resolve available width & height for floating boxes.