diff --git a/src/core/draw/group.typ b/src/core/draw/group.typ index 25aafaf..8604eaa 100644 --- a/src/core/draw/group.typ +++ b/src/core/draw/group.typ @@ -1,7 +1,7 @@ #import "/src/cetz.typ": draw #import "/src/consts.typ": * -#import "/src/core/utils.typ": get-ctx, set-ctx +#import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group #let render-start(grp) = get-ctx(ctx => { let grp = grp @@ -18,14 +18,21 @@ ) ) ctx.groups = ctx.groups.map(g => { - if g.at(1).min-i == grp.min-i { g.at(2) += 1 } - if g.at(1).max-i == grp.max-i { g.at(3) += 1 } + if g.group.min-i == grp.min-i { g.start-lvl += 1 } + if g.group.max-i == grp.max-i { g.end-lvl += 1 } g }) if grp.grp-type == "alt" { grp.insert("elses", ()) } - ctx.groups.push((ctx.y, grp, 0, 0)) + ctx.groups.push(( + start-y: ctx.y, + group: grp, + start-lvl: 0, + end-lvl: 0, + min-x: ctx.x-pos.at(grp.min-i) - 10, + max-x: ctx.x-pos.at(grp.max-i) + 10 + )) ctx.y -= m.height / 1pt set-ctx(c => { @@ -87,9 +94,16 @@ #let render-end(group) = get-ctx(ctx => { ctx.y -= Y-SPACE - let (start-y, group, start-lvl, end-lvl) = ctx.groups.pop() - let x0 = ctx.x-pos.at(group.min-i) - start-lvl * 10 - 20 - let x1 = ctx.x-pos.at(group.max-i) + end-lvl * 10 + 20 + let ( + start-y, + group, + start-lvl, + end-lvl, + min-x, + max-x + ) = ctx.groups.pop() + let x0 = min-x - 10 + let x1 = max-x + 10 draw-group(x0, x1, start-y, ctx.y, group) @@ -104,12 +118,14 @@ c.groups = ctx.groups return c }) + + expand-parent-group(x0, x1) }) #let render-else(else_) = set-ctx(ctx => { ctx.y -= Y-SPACE let m = measure(text([\[#else_.desc\]], weight: "bold", size: .8em)) - ctx.groups.last().at(1).elses.push(( + ctx.groups.last().group.elses.push(( ctx.y, else_ )) ctx.y -= m.height / 1pt diff --git a/src/core/draw/note.typ b/src/core/draw/note.typ index d8b353d..33b33aa 100644 --- a/src/core/draw/note.typ +++ b/src/core/draw/note.typ @@ -1,7 +1,7 @@ #import "/src/cetz.typ": draw #import "/src/consts.typ": * -#import "/src/core/utils.typ": get-ctx, set-ctx +#import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group #let get-size(note) = { let PAD = if note.shape == "hex" {NOTE-HEX-PAD} else {NOTE-PAD} @@ -159,5 +159,7 @@ return c }) } + + expand-parent-group(x0, x2) }) } \ No newline at end of file diff --git a/src/core/utils.typ b/src/core/utils.typ index 7698037..4d6d003 100644 --- a/src/core/utils.typ +++ b/src/core/utils.typ @@ -104,4 +104,14 @@ #let get-ctx(func) = draw.get-ctx(c => { let ctx = c.shared-state.chronos func(ctx) +}) + +#let expand-parent-group(x0, x1) = set-ctx(ctx => { + if ctx.groups.len() != 0 { + let group = ctx.groups.last() + group.min-x = calc.min(group.min-x, x0) + group.max-x = calc.max(group.max-x, x1) + ctx.groups.last() = group + } + return ctx }) \ No newline at end of file