Adds up the sizes of every parent and orders children from largest to smallest. Call it after adding nodes or changing sizes, before laying out.
recompute_if_dirty :: (treemap: *Treemap)
Parameters
- treemap: *Treemap
recompute_if_dirty :: (
display: *Treemap_Display,
outer_size: Vector2,
border_proc: Border_Proc = null,
force := false
)
Lays the tree out in a rectangle of outer_size, with each node's area proportional to its size,
and fills display.nodes. Does nothing if nothing changed since the last layout, unless force.
The treemap must be up to date first.
Parameters
- display: *Treemap_Display
- outer_size: Vector2
- border_proc: Border_Proc = null
- force := false
treemap: Treemap;
root := add_node(*treemap, "root", null);
a := add_node(*treemap, "a", root);
b := add_node(*treemap, "b", root);
a.size = 3;
b.size = 1;
recompute_if_dirty(*treemap);
display := init_treemap_display(*treemap);
recompute_if_dirty(*display, .{100, 100});
rect := display.nodes[get_index(*treemap, a)];
area := rect.size.x * rect.size.y;
assert(area > 7499 && area < 7501);