forked from HEL/chronos
		
	added auto fit wrapper function
This commit is contained in:
		| @@ -1,4 +1,4 @@ | ||||
| #import "utils.typ": get-group-span | ||||
| #import "utils.typ": get-group-span, fit-canvas | ||||
| #import "renderer.typ": render | ||||
| #import "participant.typ" as participant: _par, PAR-SPECIALS | ||||
|  | ||||
| @@ -18,7 +18,7 @@ | ||||
|   ),) | ||||
| } | ||||
|  | ||||
| #let diagram(elements) = { | ||||
| #let diagram(elements, width: auto) = { | ||||
|   if elements == none { | ||||
|     return | ||||
|   } | ||||
| @@ -188,7 +188,8 @@ | ||||
|   } | ||||
|  | ||||
|   set text(font: "Source Sans 3") | ||||
|   render(participants, elmts) | ||||
|   let canvas = render(participants, elmts) | ||||
|   fit-canvas(canvas, width: width) | ||||
| } | ||||
|  | ||||
| #let from-plantuml(code) = { | ||||
|   | ||||
| @@ -41,3 +41,23 @@ | ||||
|  | ||||
|   panic("Invalid type for parameter mods, expected auto or dictionary, got " + str(type(mods))) | ||||
| } | ||||
|  | ||||
| #let fit-canvas(canvas, width: auto) = layout(size => { | ||||
|   let m = measure(canvas) | ||||
|   let w = m.width | ||||
|   let h = m.height | ||||
|   let r = if w == 0pt {0} else { | ||||
|     if width == auto {1} else { | ||||
|       size.width * width / w | ||||
|     } | ||||
|   } | ||||
|   let new-w = w * r | ||||
|   let new-h = h * r | ||||
|   r *= 100% | ||||
|    | ||||
|   box( | ||||
|     width: new-w, | ||||
|     height: new-h, | ||||
|     scale(x: r, y: r, reflow: true, canvas) | ||||
|   ) | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user