Lots of stuff, a fair amount of which is done.
- Removing the separation of tickers/drawers, the library in general has been refactored to run at any frame rate, making it much smoother than it used to be.
- Affine transformations on elements, allowing any element to be rotated, offset, sheared, scaled, etc.
- An API for defining custom "stylers" for visually complicated elements like buttons. For example, you can use this to add hover animations to a button without messily putting this functionality into something like a hover handler.
- A fully-fledged animation system heavily inspired by (and in some respects matching in power) the CSS animation system. This allows you to automatically run animations without writing the logic yourself, including a standard library of easing functions from https://easings.net, with the capability to define easing functions yourself. It can animate any double-type property in the entire library, and has functionality for changing the speed of and pausing animations, and calling a function when an animation ends.
- The most drastic thing, which unfortunately is a non-trivial API break (hence me doing all this work on a branch until I'm confident of it!) is a fully-fledged layout system for defining menus without manually specifying coordinates for things. This is what is currently WIP, though progress is coming along quickly. I did do something like this before, but it was based on a very different principle and didn't hold up in runtime performance. The new system is inspired by UI systems like SwiftUI by Apple. Luckily, nothing particularly changes besides API surface - manual coordinates are still totally supported because a lot of game menus work best specified like that at least to some degree.
I think that's all but this is a lot of work in total.
A note on the layout system in particular - back when I started ZForms, it wasn't something I wanted to do because my main layout experience was with the CSS layout system, which is, to be honest, pretty terrible. It's more like 4+ layout systems that interact in weird ways, with the "old one" having different rules to flexbox which has different rules to grid. This made me think that a layout system wouldn't be worthwhile for game menus, which are often more freeform than websites. I have since looked at many more systems here and found ones that
do allow for a better mixture of free-form and layouted parts, with every part following the same rules.
Once all of this is finalized it'll be documented and then I'd like to produce some tutorials, because some bits can be initially confusing.
Here's an example of the layout system running: