fixed group width containing notes
This commit is contained in:
@ -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
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
@ -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
|
||||
})
|
Reference in New Issue
Block a user