// layouter: voidfunc(Container) // or func(Container) -> Dimension [preferred size] // or func(Container) -> Pair(Dimension, Dimension) [preferred, minimum] static LayoutManager layoutManagerFromFunction(fO layouter) { if (layouter cast LayoutManager) ret 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 = (Dimension) size.a; minimumSize = (Dimension) size.b; } } }; }