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

15704 commits

Author SHA1 Message Date
reuk
9a66deaaa4 MIDI (Linux): Fix issue where enumerating devices at app startup could fail to return any devices 2026-02-03 13:10:37 +00:00
reuk
8352680839 Desktop: Use SafePointer to hold current kiosk component 2026-02-03 12:30:27 +00:00
reuk
1796ae16ff
Projucer: Use parentheses for explicit method calls in generated build.gradle 2026-01-30 16:26:59 +00:00
reuk
8c264cc8bb
Projucer: Enforce old Java language version for Android projects
Although Java bytecode/language features are supported on higher Android
API levels, JUCE must support back to Android 24, which requires Java
version 8 or earlier.
2026-01-30 15:19:39 +00:00
reuk
4023687d89
Projucer: Fix typo in Android help text 2026-01-30 15:19:39 +00:00
reuk
537f0a740a
Projucer: Use more modern alternative to variantFilter in build.gradle 2026-01-30 15:19:39 +00:00
reuk
3904381e7d
Projucer: Use assignments in generated build.gradle 2026-01-30 15:19:39 +00:00
reuk
15d0d170e6
Projucer: Update formatting 2026-01-30 15:19:39 +00:00
reuk
4fafc4ca18
Projucer: Update Android default toolchain versions 2026-01-30 15:19:39 +00:00
reuk
0767527740
Android: Suppress deprecation warnings in JuceActivity.java 2026-01-30 15:19:39 +00:00
reuk
82c9354280
AndroidTypeface: Avoid using moved-from HbFont 2026-01-30 15:19:39 +00:00
reuk
8840ac478b
AudioPluginHost: Avoid assertion when reopening InternalPlugin editor 2026-01-30 15:19:39 +00:00
reuk
40368666db
ScopedThreadDPIAwarenessSetter: Allow null constructor argument 2026-01-29 15:02:56 +00:00
reuk
c2ba24b4d0
OpenGL: Fix listener deregistration when removing child components
Previously, if parent.removeChildComponent (child) was called, passing a
child component that was attached to an OpenGL context, the child
component would fail to inform its old peer that it no longer wanted to
receive scale notification callbacks. This in turn could result in the
peer continuing to send callbacks to a dangling pointer.
2026-01-29 15:02:56 +00:00
reuk
5aa4954311
OpenGL (Windows): Tidy up implemenation 2026-01-29 15:02:53 +00:00
attila
f4aa869679 ARA: Add option for plugins to report ARA 2.3 compatibility
Compatible plugins must call the new
ARA::PlugIn::HostModelUpdateController::notifyDocumentDataChanged()
function whenever appropriate to avoid data loss.
2026-01-28 17:49:17 +01:00
attila
3d02e524bf Update required ARA SDK version to 2.3.0 2026-01-28 17:49:17 +01:00
reuk
65e48c7232 Linux: Fix ComponentBoundsCosntrainer not having an effect 2026-01-27 12:07:57 +01:00
reuk
b4144aa78c
Windows: Invalidate entire window when custom scale factor changes
This fixes a bug where the window area intersecting the old and new
sizes would not be repainted correctly.
2026-01-21 18:26:09 +00:00
reuk
d371a31b78
OpenGLContext: Fix positioning of GL components on Windows in non-DPI-aware processes 2026-01-21 18:26:09 +00:00
reuk
a819cd14a6
OpenGLContext: Fix scaling mismatch between opengl peer and desktop 2026-01-21 18:26:09 +00:00
reuk
815603e61c
Label: Fix typo in variable name 2026-01-21 18:26:09 +00:00
reuk
0a1929944b
Direct2D: Draw images correctly when transformed with a vertical or horizontal flip
Previously, drawing a mirrored image would produce incorrect results.
Scaling transforms were applied correctly, but mirroring was not.  The
following code is an example of a drawing routine that previously
produced incorrect results.

g.fillAll (juce::Colours::grey);

juce::Image image { juce::Image::PixelFormat::ARGB, 512, 512, false };

{
    juce::Graphics h { image };
    h.setGradientFill (juce::ColourGradient { juce::Colours::cyan,
                                              {},
                                              juce::Colours::magenta,
                                              { 512, 512 },
                                              false });
    h.fillAll();
}

const auto cy = getHeight() / 2;

g.drawImageWithin (image,
                   0,
                   0,
                   getWidth(),
                   cy,
                   juce::RectanglePlacement::stretchToFit);
const auto transform = juce::AffineTransform::verticalFlip ((float) cy)
                       .translated (0, (float) cy);
g.addTransform (transform);
g.drawImageWithin (image,
                   0,
                   0,
                   getWidth(),
                   cy,
                   juce::RectanglePlacement::stretchToFit);
2026-01-21 18:26:09 +00:00
reuk
198af04a4a
AudioPluginHost: Allow plugin windows to handle application key commands 2026-01-21 10:36:19 +00:00
reuk
fc3b460900
ComponentDragger: Remove virtual destructor 2026-01-21 10:36:15 +00:00
Simon Weis
631ae72b11 FIR Filter: Fix a bug resetting the state 2026-01-20 16:38:54 +00:00
Tom Poole
d1fc79aef0 Docs: Fix some broken Doxygen links 2026-01-20 16:28:09 +00:00
reuk
61c9456010
HWNDComponentPeer: Fix scaling bug in contains()
This bug was introduced in b4c28db765.

The argument to contains() is in peer space (logical pixels relative to
the peer's top left). To convert to relative physical pixels, logical
pixels should be multiplied by the peer's scale factor, *not* divided.
2026-01-20 10:55:13 +00:00
reuk
7685a84c81
HWNDComponentPeer: Avoid glitches and sluggishness during live resize
258203706c introduced a problem where
live-resize of a window would cause the window content to flash and slow
down.

The cause of the errant behaviour seems to be that, during resize, many
WM_PAINT messages might be dispatched over the course of a single vblank
interval. Then, each of these paint calls was waiting for the next
vblank interval to display. This additional waiting resulted in
sluggishness, since many frames would have to be presented before the
presentation 'caught up' with the current window size. This also meant
that many consecutive frames were presented with stale window size
information.

The solution added here simply checks whether we're live resizing, and
uses the vblank instead of WM_PAINT to synchronise repaints during the
resize operation.
2026-01-20 10:55:13 +00:00
reuk
d5a84475da
HWNDComponentPeer: Remove handling for WM_ERASEBKGND
We'll always paint over the entirity of the invalid area, so filling in
the background is redundant work.
2026-01-20 10:55:13 +00:00
reuk
11e8149e65
HWNDComponentPeer: Avoid static bool for reentrancy check
It probably makes more sense to restrict the reentrancy check to the
current peer, rather than using a single flag for all peers.
2026-01-20 10:55:13 +00:00
reuk
5f032cff63
SwapChain: Remove unused event
Now that we're no longer using the swap chain as a vblank timer, we can
avoid fetching the event that was previously used for synchronisation.
2026-01-20 10:55:13 +00:00
reuk
cf3dbc8d88
UpdateRegion: Validate window on receiving NULLREGION
This fixes a bug where opening a foreground window could occasionally
prevent background windows from repainting. The symptom seems to be
caused by the system repeatedly sending WM_PAINT messages to the
foreground window and ignoring the background window. It seems that the
system will repeatedly call WM_PAINT until the entire region has been
validated - even if that region is null.
2026-01-20 10:55:13 +00:00
reuk
be99ae4c05
Add some missing nodiscards 2026-01-20 10:55:13 +00:00
Tom Poole
cca93a4b6a Docs: Add a course link to the Doxygen layout 2026-01-16 14:56:27 +00:00
Tom Poole
bd2f465321 Docs: Add some missing code formatting 2026-01-16 14:09:22 +00:00
attila
23ed760572 WebBrowserComponent: Windows: Fix WebView2 compilation in x86
The COM interface functions use __stdcall, which can't be passed to a
function expecting a __thiscall function. This distinction is irrelevant
when compiling in x64 mode.
2026-01-16 13:49:29 +01:00
attila
150f7c5bd9 Button: Make setToggleState effective even when disabled
This commit partially reverts 07f801143c.

While it's justifiable that triggerClick() is guarded and ineffective
when the button is disabled, setToggleState() needs to work to correctly
represent the underlying parameter state.
2026-01-13 15:58:22 +01:00
reuk
8ab6c3bb9e
CoreAudio: Fix build issue with Xcode 15.2 due to iterator traits requirement 2026-01-13 12:38:44 +00:00
reuk
d2b9952f7a
Projucer: Avoid enabling legacy coroutine support for projects that depend on Windows MIDI Services
A dependency on CppWinRT will add the /await flag to our command line
flags unless we explicitly opt-out. /await is deprecated in Visual
Studio 2026.
2026-01-13 12:36:50 +00:00
reuk
3f5cf5ec70
Projucer: Update required version of the CppWinRT nuget package 2026-01-13 12:36:46 +00:00
reuk
52dc03bec1
Projucer: Update required version of the Windows MIDI Services nuget package 2026-01-13 12:36:42 +00:00
attila
c3ca21e73d WebBrowserComponent: Improve ResourceProvider performance on Linux
By writing the data member into the pipe without serialisation, the
throughput between the main application and the WebView subprocess
increases from 0.7 MB/s to over 100 MB/s. Measured on a 2.2 GHz Intel
8th gen CPU in Debug build.
2026-01-13 11:18:51 +01:00
Tom Poole
6612193301 Docs: Include a course link in the header 2026-01-12 20:50:52 +00:00
Tom Poole
00e8128f18 Docs: Include a marketplace link in the header 2026-01-12 20:47:04 +00:00
Tom Poole
43dd9913c1 CI: Update artifact upload action 2026-01-12 11:06:10 +00:00
attila
bc7339fe07 VST Host: Linux: Map plugin window even with XEMBED_MAPPED unset 2026-01-08 12:40:43 +01:00
attila
04bba0f2be VST3 Host: Linux: Map plugin window even with XEMBED_MAPPED unset 2026-01-08 12:40:43 +01:00
attila
9d45b5bc30 XEmbedComponent: Add new option to ignore the XEMBED_MAPPED flag 2026-01-08 12:40:43 +01:00
attila
fde2512f64 XEmbedComponent: Add new constructor taking XEmbedComponentOptions 2026-01-08 12:40:43 +01:00