diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-01 16:14:14 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-01 16:14:14 +0100 |
commit | 081b1a6c0ba8357c421e4d361a814b1f07bedffe (patch) | |
tree | 86ea2090bf6bc519520c8f75759822d310f99380 /src/css/layout.nim | |
parent | 585ca24c924cadf351d9a95143732f3051cb157e (diff) | |
download | chawan-081b1a6c0ba8357c421e4d361a814b1f07bedffe.tar.gz |
layout: fix regression in cd069a76e
Diffstat (limited to 'src/css/layout.nim')
-rw-r--r-- | src/css/layout.nim | 30 |
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. |