// layouter: voidfunc(Container) // or func(Container) -> Dimension [preferred size] // or func(Container) -> Pair(Dimension, Dimension) [preferred, minimum] static LayoutManager layoutManagerFromFunction(fO layouter) { ret new AbstractLayoutManager { public void layoutContainer(Container parent) { O size = pcallF(layouter, parent); if (size cast Dimension) preferredSize = size; else if (size cast Pair) { preferredSize = size.a; minimumSize = size.b; } } }; }