diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-20 18:08:12 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-20 19:34:27 +0100 |
commit | 66b18695de1e6629341e08faf487a693cc26211a (patch) | |
tree | 23e5d44a803051d34040278bdc245cc92fbc418e /src/css/layout.nim | |
parent | 2291b75ed7133b77bce37fcc07500d5081682892 (diff) | |
download | chawan-66b18695de1e6629341e08faf487a693cc26211a.tar.gz |
cascade: collapse StyledNode tree into DOM
We now compute styles on-demand, which is both more efficient and simpler than the convoluted tree diffing logic we previously used.
Diffstat (limited to 'src/css/layout.nim')
-rw-r--r-- | src/css/layout.nim | 19 |
1 files changed, 1 insertions, 18 deletions
diff --git a/src/css/layout.nim b/src/css/layout.nim index de255afa..471c7364 100644 --- a/src/css/layout.nim +++ b/src/css/layout.nim @@ -2,9 +2,9 @@ import std/algorithm import std/math import css/box +import css/cascade import css/cssvalues import css/lunit -import css/stylednode import html/dom import types/bitmap import types/winattrs @@ -49,17 +49,10 @@ type myRootProperties: CSSValues # placeholder text data imgText: CharacterData - audioText: CharacterData - videoText: CharacterData - iframeText: CharacterData luctx: LUContext const DefaultSpan = Span(start: 0, send: LUnit.high) -# Defined here so it isn't accidentally used in dom. -func newCharacterData(data: sink string): CharacterData = - return CharacterData(data: data) - func minWidth(sizes: ResolvedSizes): LUnit = return sizes.bounds.a[dtHorizontal].start @@ -3158,7 +3151,6 @@ proc buildFromElem(ctx: var BlockBuilderContext; styledNode: StyledNode; proc buildReplacement(ctx: var BlockBuilderContext; child: StyledNode; parent: Element; computed: CSSValues) = case child.content.t - of ContentNone: assert false # unreachable for `content' of ContentOpenQuote: let quotes = parent.computed{"quotes"} let s = if quotes == nil: @@ -3199,12 +3191,6 @@ proc buildReplacement(ctx: var BlockBuilderContext; child: StyledNode; )) else: ctx.pushInlineText(computed, parent, ctx.lctx.imgText) - of ContentVideo: - ctx.pushInlineText(computed, parent, ctx.lctx.videoText) - of ContentAudio: - ctx.pushInlineText(computed, parent, ctx.lctx.audioText) - of ContentIFrame: - ctx.pushInlineText(computed, parent, ctx.lctx.iframeText) of ContentNewline: ctx.pushInline(InlineBox( t: ibtNewline, @@ -3446,9 +3432,6 @@ proc layout*(root: StyledNode; attrsp: ptr WindowAttributes): BlockBox = positioned: @[PositionedItem(), PositionedItem()], myRootProperties: rootProperties(), imgText: newCharacterData("[img]"), - videoText: newCharacterData("[video]"), - audioText: newCharacterData("[audio]"), - iframeText: newCharacterData("[iframe]"), luctx: LUContext() ) let box = BlockBox(computed: root.computed, node: root.element) |