This adds Windows ClearType font antialiasing back as a disabled-by-default option "JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING" in the juce_graphics module.
D2D repaints are always driven by a vblank timer, and D2D presentation
can't happen any faster than the vblank callbacks, so I think it's safe
to remove the swapchain machinery and to rely entirely on the vblank
callbacks instead.
This issue could be observed when loading the WebViewPluginDemo in the
AudioPluginHost, opening its editor, and then attempting to close the
editor window using the titlebar button. Tested on Fedora 42 with
libwebkit2gtk-4.1.
Unloading the webkit library with dlclose seems to cause the webview
process to crash, even if gtk_main() has already exited at that point.
Maybe this points to a need to manually clean up the webview somehow
before calling gtk_main_quit, but I can't see any obvious candidate
functions in the docs (gtk_widget_destroy doesn't seem to help).
The workaround presented here just opens the webkit library with
RTLD_NODELETE, which isn't ideal but might be necessary if this library
hasn't been designed with dynamic load/unload in mind.
If the browser process happened to segfault, the old WIFEXITED check
would never succeed and the loop would never break.
The issue is resolved by additionally checking for other statuses that
also indicate that the child process is no longer alive.
Previously, on Linux, client plugin editors were embedded directly into the peer
displaying the client's AudioProcessorEditor.
Although this approach is simple and lightweight, it means that plugin
editors are able to reposition themselves over controls in the parent
window just by calling XMoveResizeWindow or similar on their own widget.
It's more desirable that the client editor should be clipped if it
attempts to draw outside the area of the AudioProcessorEditor.
In shared mode (i.e. non-low-latency, non-exclusive) the driver has sole
responsibility for setting the wakeup period, and this cannot be changed
by the application. This change ensures that the audio device always
uses the buffer size reported by the audio hardware, even when that
differs from the buffer size that was requested by the program.