ja, do you use any space partitioning ? .. nothing, a grid or a tree ? just curious
Scroll back a few posts and you'll get the general gist of it... basically I traverse the tree from the root to the leaves, applying constraints to the widths and heights of each component, first from its parent (a component can never be bigger than its parent), then its own constraints. Then recurse down to the children. When all the children are done (or if there are none) we ask the component how big its contents are going to be based on the constraints we've been given, and that becomes our minimum size. The contents is the larger of any text area, or child component, or the size of any calculated layout.
Maximum size overrides minimum size. If we discover that our maximum size now equals our mimimum size, we're done at this level and we know exactly how big we are going to be, and that means we can tell all our child components that they can now position themselves within our bounds, recursively. Where any child component does not yet have matching minimum or maximum size we decide to use the minimum size.
That's the layout part.
The interpolation part isn't all that complicated or clever and literally just interpolates things like colours and constraints.
The event handling stuff is... more fiddly
Basically it's a tick-based state transition manager which receives events from the input system every tick (it's possible to get several mouse events per video frame, which is how often the LWJGL input system is polled). Every component gets every event every tick. Then they all sort of figure out what's happened in isolation from each other, leading to events being fired.
It will doubtless end up open-sourced at some point in Battledroid, the plan for which is most likely to give the source away in some charitable event one day.