Fix notes width not taken into account #16
| @@ -1,7 +1,7 @@ | |||||||
| #import "/src/cetz.typ": draw | #import "/src/cetz.typ": draw | ||||||
|  |  | ||||||
| #import "/src/consts.typ": * | #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 render-start(grp) = get-ctx(ctx => { | ||||||
|   let grp = grp |   let grp = grp | ||||||
| @@ -18,14 +18,21 @@ | |||||||
|     ) |     ) | ||||||
|   ) |   ) | ||||||
|   ctx.groups = ctx.groups.map(g => { |   ctx.groups = ctx.groups.map(g => { | ||||||
|     if g.at(1).min-i == grp.min-i { g.at(2) += 1 } |     if g.group.min-i == grp.min-i { g.start-lvl += 1 } | ||||||
|     if g.at(1).max-i == grp.max-i { g.at(3) += 1 } |     if g.group.max-i == grp.max-i { g.end-lvl += 1 } | ||||||
|     g |     g | ||||||
|   }) |   }) | ||||||
|   if grp.grp-type == "alt" { |   if grp.grp-type == "alt" { | ||||||
|     grp.insert("elses", ()) |     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 |   ctx.y -= m.height / 1pt | ||||||
|  |  | ||||||
|   set-ctx(c => { |   set-ctx(c => { | ||||||
| @@ -87,9 +94,16 @@ | |||||||
|  |  | ||||||
| #let render-end(group) = get-ctx(ctx => { | #let render-end(group) = get-ctx(ctx => { | ||||||
|   ctx.y -= Y-SPACE |   ctx.y -= Y-SPACE | ||||||
|   let (start-y, group, start-lvl, end-lvl) = ctx.groups.pop() |   let ( | ||||||
|   let x0 = ctx.x-pos.at(group.min-i) - start-lvl * 10 - 20 |     start-y, | ||||||
|   let x1 = ctx.x-pos.at(group.max-i) + end-lvl * 10 + 20 |     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) |   draw-group(x0, x1, start-y, ctx.y, group) | ||||||
|  |  | ||||||
| @@ -104,12 +118,14 @@ | |||||||
|     c.groups = ctx.groups |     c.groups = ctx.groups | ||||||
|     return c |     return c | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|  |   expand-parent-group(x0, x1) | ||||||
| }) | }) | ||||||
|  |  | ||||||
| #let render-else(else_) = set-ctx(ctx => { | #let render-else(else_) = set-ctx(ctx => { | ||||||
|   ctx.y -= Y-SPACE |   ctx.y -= Y-SPACE | ||||||
|   let m = measure(text([\[#else_.desc\]], weight: "bold", size: .8em)) |   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, else_ | ||||||
|   )) |   )) | ||||||
|   ctx.y -= m.height / 1pt |   ctx.y -= m.height / 1pt | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| #import "/src/cetz.typ": draw | #import "/src/cetz.typ": draw | ||||||
|  |  | ||||||
| #import "/src/consts.typ": * | #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 get-size(note) = { | ||||||
|   let PAD = if note.shape == "hex" {NOTE-HEX-PAD} else {NOTE-PAD} |   let PAD = if note.shape == "hex" {NOTE-HEX-PAD} else {NOTE-PAD} | ||||||
| @@ -159,5 +159,7 @@ | |||||||
|         return c |         return c | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     expand-parent-group(x0, x2) | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
| @@ -104,4 +104,14 @@ | |||||||
| #let get-ctx(func) = draw.get-ctx(c => { | #let get-ctx(func) = draw.get-ctx(c => { | ||||||
|   let ctx = c.shared-state.chronos |   let ctx = c.shared-state.chronos | ||||||
|   func(ctx) |   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