On Fri, 2023-12-15 at 13:40 -0800, Philip Race wrote: > I already gave a brief explanation of why FX text rendering is what > it is. > I will expand on it a bit but a number of the salient points have > already been made by others. > It is unlikely we will make anything other than carefully considered > tweaks, so this is by way of explanation.
I'm actually not even asking to change the defaults. The dictated-from- above defaults are the problem. I am inevitably going to fork JavaFX and maintain a patched version even if the changes won't be accepted upstream. These are the changes I intend to make: 1. Add an -fx-font-bitmaps CSS attribute that, by default, will be set to false. Setting this value to true will cause bitmap information to be loaded if present, and ignored otherwise. 2. Add an -fx-font-hinting CSS attribute that, by default, will be set to false. Setting this value to true will enable hinting using whatever is the default (in other words, not setting FT_LOAD_NO_HINTING). 3. Add an extra value to -fx-font-smoothing: none. Setting this will use FT_LOAD_TARGET_MONO and disable effectively disable antialiasing. This is important for my users for small-text console components. I'm just tired of my applications looking like optical migraines when everyone else on the planet (including the UI library in the JDK itself) manages to look better, regardless of the apparent technical consequences for frankly niche cases. > Some people absolutely insist that being true to the design is what > is most important > A high contrast is the most important to someone else. > No jaggies is important to another person. > Hinting is essential to some people in some cases. To other people it > is anathema. etc, etc. And by disallowing developers to change the behaviour in any way, you're deciding this for them. You're effectively pleasing the smallest set of people possible. > And then on top of that hinting is not even designed to be used in > such rotated cases. So we must all pay for ugly text because someone somewhere wants to spin text around, and we don't get to opt-out. > And as the Amble case points out, you are dependent on the quality of > the hinting which is very expensive. Poor hinting is worse than none. So JavaFX, which has no idea which fonts I'm bundling, is clearly more qualified than I am to decide whether I want hinting or not. > And animations using text - not common in Swing, but central to FX - > are very jerky if you use hinting. It's almost as if there's some kind of design flaw, and a ton of work to maintain a feature that I've yet to see anyone actually say that they care about. Take a look at any modern 3D rendering engine with UI support, and you won't see these issues, and they not only perform scaling and rotation but frequently perspective projection onto 3D surfaces. > And "bitmaps" in a font are extremely rare. Maybe in the fonts you use. "Extremely rare" is entirely subjective; there's an entire field of programmer fonts that use carefully tuned bitmaps to stay sharp. Guess we're just not allowed to use those either, because JavaFX says so. > LCD text also doesn't work well with rotations because the 3X > resolution you get is only in one orientation. On that we agree. I have no interest in LCD text on any platform. Guess I'll get working on the fork. -- Mark Raynsford | https://www.io7m.com