1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00
Commit graph

10665 commits

Author SHA1 Message Date
reuk
e5049ad6e9
SimpleShapedText: Avoid UTF8-lookup allocations 2025-06-16 16:59:55 +01:00
reuk
a3d64c7784
Typeface: Enable advanced colour glyph rendering on Android
Android 15+ removed the 'legacy' png-based emoji font. Modern Android
versions may include only a COLR-v1-based font, which JUCE cannot
render itself.

As a workaround, on Android, we use a Canvas object to render each emoji
glyph into a bitmap, and then render that bitmap in the same way as a
legacy png-based glyph. This won't look as crisp as rendering COLRv1
glyphs directly, especially at larger sizes, but this is a sufficient
stop-gap for the time being.
2025-06-16 16:59:55 +01:00
reuk
70a2dd7e15
UIViewComponentPeer: Adopt the UIScene lifecycle on iOS 13+ 2025-06-16 16:59:55 +01:00
reuk
2c5b1fbb6f
NativeMessageBox: On iOS, prefer the peer of the associatedComponent to the focused peer to determine the parent controller 2025-06-16 16:59:55 +01:00
attila
1ce35453db Deprecate the old AudioFormat::createWriterFor functions 2025-06-12 20:02:33 +02:00
attila
386daafe23 WavAudioFormat: Add support for writing 32 bit integral (PCM) format 2025-06-12 20:02:33 +02:00
Anthony Nicholls
34675235e5 VST3: Prevent some warnings 2025-06-12 15:52:01 +01:00
Anthony Nicholls
26edac975d VST3: Fix a bug converting a compatibility ID to a string 2025-06-12 15:52:01 +01:00
Anthony Nicholls
7c7e51176e VST3: Include the name and version in the moduleinfo 2025-06-12 15:52:01 +01:00
Anthony Nicholls
af256aab02 VST3: Prevent a compiler warning 2025-06-11 15:50:44 +01:00
reuk
37bb7a6c30
iOS: Fix deprecation warning 2025-06-10 20:16:02 +01:00
reuk
6f1d116279
macOS: Add initial macOS 26 suport 2025-06-10 20:15:58 +01:00
Anthony Nicholls
46703f3e65 PluginListComponent: Replace inappropriate naming with more suitable alternatives 2025-06-10 16:14:06 +01:00
Anthony Nicholls
f3d7c74ea1 VST3: Allow manifest helper to run independently 2025-06-10 16:13:33 +01:00
Anthony Nicholls
80116d60da VST3: Platform header should be included from user supplied SDK 2025-06-10 16:13:33 +01:00
Anthony Nicholls
c1c8eccb99 Core: Prevent a preprocessor definition leak in zlib 2025-06-10 16:13:33 +01:00
Anthony Nicholls
0181f52c48 OpenGL: Document blend parameter for copyTexture method 2025-06-10 16:13:33 +01:00
Anthony Nicholls
b6d6ec573d GlyphArrangement: Add documentation tag 2025-06-10 16:13:33 +01:00
attila
8ea8cdac6d TextEditor: Allow soft breaks inside words in multi-line mode
This restores the JUCE 7 behaviour.
2025-06-10 12:49:23 +02:00
reuk
492738c9c5
Docs: Fix typo in AudioFormatManager 2025-06-09 11:22:19 +01:00
reuk
5c34248d00
PluginListComponent: Wait for current scan to complete before calling owner.scanFinished()
I observed a deadlock when scanning AU plugins in-process in the
AudioPluginHost, and then clicking the "cancel" button in the scan
progress alert window.

The cause of the deadlock seems to be that JUCE uses async messages to
create and destroy AU plugins on the main thread. When running a plugin
scanner on a background thread, it was possible to end up in a situation
where the background thread was waiting on the message thread to process
a create/destroy message; and, at the same time, the main thread was
blocked waiting for all scan jobs to complete. This seemed to happen
because scanFinished() was called directly from the Scanner's
timerCallback as soon as the progress window was cancelled, even if
there was still a scan in progress at that point.

To avoid the deadlock, we now wait until the current scan has completely
finished before allowing the timerCallback to call scanFinished(). If no
scan is in progress, then the main thread can safely destroy the scanner
ThreadPool without needing to wait at that point.
2025-06-06 23:12:16 +01:00
reuk
dc890c69c2
PluginListComponent: Use lambda form of ModalCallbackFunction 2025-06-06 23:12:16 +01:00
reuk
6cd9566868
GenericAudioProcessorEditor: Avoid creating choice parameter components for discrete parameters with large numbers of steps 2025-06-06 23:12:16 +01:00
reuk
b349531966
AU Host: Avoid caching parameter value strings when getNumSteps() returns a large value 2025-06-03 16:12:00 +01:00
reuk
15f05443d0
Graphics: Add missing JUCE_API annotation to ScopedSaveState 2025-06-03 16:12:00 +01:00
reuk
5208b3ffc0
GlyphArrangement: Use portable string trimming 2025-06-03 16:12:00 +01:00
reuk
08f449d2b0
AudioVisualiserComponent: Fix potential data races
In the old implementation, because pushSample() could be called on the
audio thread, and updated the levels array and the nextSample value
non-atomically, other threads (e.g. the UI thread) were not guaranteed
to see these updates in a consistent order.
2025-06-03 16:12:00 +01:00
reuk
dcf0bf1c2a
WASAPI: Fix bug where attempting to clear output buffers had no effect 2025-06-03 16:12:00 +01:00
reuk
4045b0f8f6
WASAPI: Attempt to avoid potential races on state flags 2025-06-03 16:11:59 +01:00
reuk
86e0248f79
WASAPI: Use more early returns 2025-06-03 16:11:59 +01:00
reuk
b20df8d713
PopupMenu: Add missing target components for menus created by built-in widgets 2025-06-03 16:08:56 +01:00
reuk
336a475921
PluginListComponent: Pass associatedComponent for temporary AlertWindows
This should allow these alert windows to display at the correct scale on
HiDPI Windows machines.
2025-06-03 16:08:56 +01:00
reuk
fc32ca8641
AlertWindow: Store a SafePointer to the associatedComponent 2025-06-03 16:08:56 +01:00
reuk
4ec935c709
Android: Refactor mouse handling to avoid repeated code 2025-06-03 16:08:56 +01:00
reuk
1741f6df29
Android: Update handling of ACTION_CANCEL to terminate all ongoing pointer events, instead of just the primary pointer 2025-06-03 16:08:56 +01:00
reuk
3c1012baeb
AudioDeviceManager: Handle loading of XML with missing fields more gracefully 2025-06-03 16:08:56 +01:00
reuk
f6df3e3ce1
CoreAudio: Respect buffer size passed to audio callback
We now query the incoming buffers to see how many samples are available.

If the callback's buffers will fit into our preallocated buffer (i.e. the
length in samples is smaller or equal to the preallocated buffer), then
we perform an audio callback with the provided data, even if the number
of samples is smaller than expected.

If the callback's buffers are larger than expected, we split the
incoming buffer into chunks that are no larger than the prepared
buffer-size.
2025-06-03 16:08:20 +01:00
reuk
ff99341179
CoreAudio: Replace HeapBlock with vector to retain allocation size 2025-06-03 16:08:20 +01:00
reuk
f904fd356a
Android: Improve screen safe-area reporting
The goal of this change is to ensure that the safeAreaInsets and
keyboardInsets members of Display correctly take the current system UI
and screen cutouts into account.

This change also enables rendering behind the status bar and navigation
bar for JUCE applications. This is in line with the new defaults in
Android 15, where building against the Android SDK 35 will automatically
enable "edge-to-edge" drawing. Enabling this behaviour on older
platforms too provides a more consistent experience.
2025-06-03 16:08:20 +01:00
reuk
cfc006aaf9
SidePanel: Add an option to restrict content to the safe screen area
A major benefit of this change is that the menu in the DemoRunner will
now display reasonably on mobile devices with notches or other
decorations.
2025-06-03 16:08:20 +01:00
Anthony Nicholls
34c32cbaf0 VST3: Add flag for ignoring parameter migration warning to the module header 2025-06-03 14:17:26 +01:00
Tom Poole
b0d569c74b Bump version number to 8.0.8 2025-06-02 09:24:54 +01:00
reuk
72e345cdd7
Direct2DImage: Add missing data change notification when creating writable BitmapData
The OpenGL renderer listens for imageDataChanged() to invalidated cached
textures.

Before this change, the SimpleFFTDemo would display a static (outdated)
image on Windows when using the OpenGLRenderer.
2025-05-27 18:01:53 +01:00
reuk
415aed4bea
Direct2DImage: Sync CPU storage when creating a BitmapData view over a subsection of the image
When syncing from CPU->GPU storage, we currently copy the entire image
contents. The contents of the CPU backup completely replace the old GPU
image. Therefore, if any pixels need to retain their existing values, we
need to read those pixels before overwriting them. This in turn implies
that, when a BitmapData refers to a subsection of the image, we should
always flush GPU->CPU storage first, so that the subsequent CPU->GPU
sync doesn't clobber pixels outside of the BitmapData region with
outdated values.

It's clear that copying the entire image back and forth could be
suboptimal when writing to image subsections, but to optimise this
process we'd have to keep track of dirty image regions or similar, which
may in turn pessimise more common cases.
2025-05-27 18:01:53 +01:00
reuk
4012677fdf
Direct2DImage: Mark CPU storage as outdated after modifying GPU storage by copying 2025-05-27 18:01:53 +01:00
reuk
457de394e0
iOS Audio: Remove buffer size assertion
This assertion is no longer relevant now that the AudioDeviceManager
enforces the maximum buffer size.
2025-05-27 14:39:27 +01:00
reuk
b4f71ab6db
AudioDeviceManager: Tidy up CallbackMaxSizeEnforcer 2025-05-27 14:39:25 +01:00
reuk
ee37564083
AudioDeviceManager: Move CallbackMaxSizeEnforcer from StandaloneFilterWindow 2025-05-27 14:39:25 +01:00
reuk
28a2700a28
AudioDeviceSelectorComponent: Tweak buffer size combo box to display the actual buffer size, even it it does not match any reported available buffer size 2025-05-27 14:38:56 +01:00
reuk
e92cac9ae0
VST3 Client: Clarify documentation for compatibility extensions 2025-05-22 11:15:46 +01:00