This code had grown overly complicated and hard to understand.
The improvements in this commit:
- Avoid allocating a duplicate of every active panel.
- Instead of complicated logic to calculate each panel's offset,
just keep track of the current offset while iterating through.
- More readable code structure, better comments.
Note that calcuting the X offset here is a relic from pre-2.5 when
panels could be aligned horizontally. I kept this in, but it would
be reasonable to remove it in the future.