I think many people have missed this detail, but Font{FontOptions{}} is NOT a direct replacement for Font{}. For backwards compatibility you would need to use Font{FontOptions{}.withMetricsKind (TypefaceMetricsKind::legacy)}. If you use an empty FontOptions object you are implicitly specifying TypefaceMetricsKind::portable.
If we had just changed this default, the font size may have changed on some platforms and not others, which could be a subtle bug for a lot of our users. If we kept the old behaviour but didn’t deprecate the constructors the chances are users would continue constructing fonts in what we believe is the wrong way and could cause considerable pain for them further down the line. We did also have this change up on a public JUCE 8 branch for quite some time (~2 months I think), unfortunately I don’t think any issues were raised until it made it to master.
I dunno it’s not that bad and you get some good new features! Emojis in patch names has been missing in surge since we abandoned vstgui and folks are happy they are back.
For me to upgrade surge shortcircuit and a few of our other tools from 7-802 took me maybe a day or so. The tricky things were
Sharing 7/8 hence the macros
Moving our docker build image from u18 to u20
Finding new stuff deprecated at the 801/802 boundary (hence this thread)
Understanding the intent of the changes so I could code properly. For instance a font is now much more clumsy than a font option for a value at rest.
But I do agree with your (implicit) feedback that deprecating features can be more expensive on the user base than it is on the library team. I hope some of the suggestions for staging deprecation we offered here could make future workflows a bit more predictable and granular - especially since the compilers make deprecation “all or nothing” right now.