April 21st, 2009

Substance 5.2 – extended support for very large fonts

Supporting wide variety of font sizes in modern UI toolkits is a necessity, and previous entry provided a little background on the topic. The keen-eyed readers might have noticed the gaps in the curved corners of the combobox arrow button:

What happened here? The border painter in Substance gets two contours – the outer and the inner. For buttons, these contours are computed by matching the button shaper, ClassicButtonShaper in case of combobox arrow buttons. The problem in the computation was that it used the same curvature radius for both outer and inner contours, which resulted in the visible visual gaps under large font sizes.

The correct solution is to subtract the border stroke weight from the outer radius, and use the resulting value for the inner radius. Unfortunately, the API signature of the SubstanceButtonShaper interface had to be changed in order to accommodate this functionality – so if you have a custom button shaper, you will need to implement a new method added to this interface.

The following screenshot shows a large checkmark icon under Substance 5.2dev (on left) and Substance 5.1 (on right):

https://substance.dev.java.net/release-info/5.2/inner-controur-radius-checkmarks.png

The next screenshot shows a combobox under Substance 5.2dev (on top) and Substance 5.1 (on bottom):

https://substance.dev.java.net/release-info/5.2/inner-controur-radius-combos.png

As you can see in both screenshots, the inner contour is now aligned with the outer contour in the corners.

This work will continue in the next releases to make sure that all core Swing controls look correctly under different font sizes, including very large values such as shown in this entry. In the meantime, you’re welcome to take the latest 5.2dev drop of core Substance (code-named Quebec) for a spin. Release candidate for Substance 5.2 is scheduled for May 11 and the final release is scheduled for May 25.