JUCE 9 focuses on UI features and performance, support for embedded Linux platforms and, as always, cross-platform compatibility.
JUCE 9 now pulls in lunasvg as a dependency, bringing new features and improved SVG spec conformance.
More complex SVGs are now possible, including those that take advantage of radial gradients, blend modes, dashed strokes, stroked text, texture fills, miter limiting, clip paths and referenced elements.
SVGs are parsed into a tree of Drawable objects, which have been stripped of the Component base and moved into juce_graphics, streamlining JUCE compilation.
Modern fonts, especially those designed for the web, are frequently distributed as variable fonts.
Unlike traditional fonts, variable fonts bundle multiple styles (such as bold, italic, and condensed) into a single streamlined file.
Variable fonts allow font "axes" like weight, width, and slant to be set to custom values, giving designers full dynamic control over the appearance of the face.
For an example of JUCE 9's new typographic capabilities, check out the FontVariablesDemo.
The Core Audio implementation on macOS has been redesigned to use Apple’s aggregate device API, improving performance and reliability with aggregate devices.
JUCE 9 creates a private aggregate device that combines the selected physical devices into a single logical device presented to the framework. End users on aggregate devices get lower latency and more reliable drift-compensation than previous JUCE versions. We saw latency decreases of up to 11-25ms in our development, you can check out your hardware via JUCE’s AudioLatencyDemo (and let us know!)
Buffer size and latency reporting is also more accurate, helping to reduce unexpected behaviour and configuration mismatches for end users. In addition, channel naming has been improved when using aggregate devices: names now include the originating physical sub-device for greater clarity.
JUCE 9 brings improvements to the software renderer, refactoring the internal structure of the PixelARGB class to better use auto-vectorised instructions when filling colours.
Embedded Linux devices typically use OpenGL ES rather than desktop OpenGL, and JUCE 9 now provides an automatic mechanism for selecting OpenGL ES on these platforms.
JUCE 9 now supports XInput multitouch on Linux, so any devices running embedded Linux can make use of multi-touch enabled displays.
JUCE 9 Windows applications and plugins now receive and process gestures from touch screens and touch pads by default. The old mode (where multiple touch points are reported) can be explicitly requested via the TopLevelWindow and AudioProcessorEditor classes.
In addition to adding support for OpenGL ES the new SVG work has allowed us to remove dependencies from juceaide, JUCE’s CMake helper executable. This has both lowered CMake configuration time and made it trivial to run builds in headless environments without UI operating system components present.