39 lines
870 B
Typst
39 lines
870 B
Typst
#import "/src/cetz.typ": styles
|
|
|
|
#import "/src/consts.typ": *
|
|
#import "/src/core/utils.typ": get-ctx, set-ctx
|
|
|
|
#let render(evt) = get-ctx(ctx => {
|
|
let style = styles.resolve(
|
|
ctx.style,
|
|
merge: evt.style,
|
|
root: "event",
|
|
base: ()
|
|
)
|
|
|
|
let par-name = evt.participant
|
|
let i = ctx.pars-i.at(par-name)
|
|
let par = ctx.participants.at(i)
|
|
let line = ctx.lifelines.at(i)
|
|
let entry = (type: evt.event, y: ctx.y, style: style)
|
|
|
|
if evt.event == "disable" {
|
|
line.level -= 1
|
|
} else if evt.event == "enable" {
|
|
line.level += 1
|
|
} else if evt.event == "create" {
|
|
ctx.y -= CREATE-OFFSET
|
|
entry.y = ctx.y
|
|
(par.draw)(par, y: ctx.y)
|
|
} else if evt.event == "destroy" {
|
|
} else {
|
|
panic("Unknown event '" + evt.event + "'")
|
|
}
|
|
|
|
line.events.push(entry)
|
|
set-ctx(c => {
|
|
c.lifelines.at(i) = line
|
|
c.y = ctx.y
|
|
return c
|
|
})
|
|
}) |