forked from HEL/chronos
		
	fixed group width containing notes
This commit is contained in:
		@@ -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)
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -105,3 +105,13 @@
 | 
				
			|||||||
  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