Paint layers sounds good. Don't be afraid of overdraw (instead of clipping) because that's what allows high-performance rendering in games etc.
I have been thinking a "shadow" plugin would be the most elegant solution;
1. Start with a simple implementation that just renders a grey rectangle before rendering each window.
2. Get the stacking order right -- draw window and shadow layers back-to-front.
3. Implement smooth gradients (Gaussian?).
I would expect some fixes required in core here and there, but mostly shadows can be the sole job of a new plugin.
Paint layers sounds good. Don't be afraid of overdraw (instead of clipping) because that's what allows high-performance rendering in games etc.
I have been thinking a "shadow" plugin would be the most elegant solution;
1. Start with a simple implementation that just renders a grey rectangle before rendering each window.
2. Get the stacking order right -- draw window and shadow layers back-to-front.
3. Implement smooth gradients (Gaussian?).
I would expect some fixes required in core here and there, but mostly shadows can be the sole job of a new plugin.