diff --git a/src/core/draw/group.typ b/src/core/draw/group.typ index 8604eaa..a182594 100644 --- a/src/core/draw/group.typ +++ b/src/core/draw/group.typ @@ -3,6 +3,9 @@ #import "/src/consts.typ": * #import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group +#let display-name(name) = text(name, weight: "bold") +#let display-desc(desc) = text([\[#desc\]], weight: "bold", size: .8em) + #let render-start(grp) = get-ctx(ctx => { let grp = grp ctx.y -= Y-SPACE @@ -44,8 +47,8 @@ #let draw-group(x0, x1, y0, y1, group) = { - let name = text(group.name, weight: "bold") - let m = measure(box(name)) + let name = display-name(group.name) + let m = measure(name) let w = m.width / 1pt + 15 let h = m.height / 1pt + 6 draw.rect( @@ -71,7 +74,7 @@ if group.desc != none { draw.content( (x0 + w, y0), - text([\[#group.desc\]], weight: "bold", size: .8em), + display-desc(group.desc), anchor: "north-west", padding: 3pt ) @@ -86,7 +89,7 @@ ) draw.content( (x0, y), - text([\[#elmt.desc\]], weight: "bold", size: .8em), + display-desc(elmt.desc), anchor: "north-west", padding: 3pt ) @@ -105,6 +108,22 @@ let x0 = min-x - 10 let x1 = max-x + 10 + // Fit name and descriptions + let name-m = measure(display-name(group.name)) + let width = name-m.width / 1pt + 15 + if group.desc != none { + let desc-m = measure(display-desc(group.desc)) + width += desc-m.width / 1pt + 6 + } + if group.grp-type == "alt" { + width = calc.max(width, ..group.elses.map(e => { + let elmt = e.at(1) + let desc-m = measure(display-desc(elmt.desc)) + return desc-m.width / 1pt + 6 + })) + } + x1 = calc.max(x1, x0 + width + 3) + draw-group(x0, x1, start-y, ctx.y, group) if group.grp-type == "alt" {