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

15044 commits

Author SHA1 Message Date
attila
9dd8a2af13 Fix SimpleShapedText::getTextRange() when the input text contains hard breaks
The issue prior to this commit would be observable when using the
GlyphArrangement functions e.g. addFittedText.

This is a fix for a regression introduced in
9223805b9c.
2024-12-17 18:27:30 +01:00
attila
633777e005 UnitTestRunner: call DeletedAtShutdown::deleteAll() before exiting
This allows us to exercise classes using DeletedAtShutdown in tests,
without triggering leaked object warnings
2024-12-17 18:27:30 +01:00
reuk
52beda1396 ImagePixelData: Speed up format conversions by hoisting switch statements out of tight loops 2024-12-13 14:49:46 +00:00
reuk
d3d7d4c89c VBlank: If previous frame is still in progress, wait until next frame to trigger a new vblank
Previously, the vblank's thread loop would block on each iteration until
the current async callback had finished, at which point a new async
callback would be immediately triggered.

The new implementation only waits on the vblank event. If a vblank
callback is still in progress the next time the vblank event is
signalled, we assume the last frame is overrunning and avoid sending a
new async update.

The intention of this change is to avoid saturating the message thread
with expensive vblank callbacks. It's also nice to remove a lock,
although that's just an incidental change.
2024-12-13 14:49:46 +00:00
reuk
f887979ec0 Direct2D: Fix performance issue when drawing transformed unclipped regions
This issue could be observed in the GraphicsDemo's SVG pane, when the
"rotation" option was enabled.

Drawables internally enable the unclipped painting flag, which normally
prevents slow clipping when drawing subcomponents of the drawable.

The Direct2D graphics context was using the frame area as the default
area, used to signal that no clipping should be applied. However, when
non-axis-aligned transform was active, this area was incorrectly applied
as a geometric clipping region. D2D geometric clips are relatively slow,
so this caused large slowdowns.

This solution adds a flag that is set whenever a clip is explicitly
requested. If no clip is explicitly requested, then clipping will be
entirely bypassed. This can make rendering of Drawables significantly
faster.
2024-12-13 14:49:46 +00:00
reuk
336dcfc08c Direct2DImage: Update interface to accept a Device instead of a DeviceContext 2024-12-13 14:43:06 +00:00
reuk
21357f26b5 OpenGLTexture: Respect pixelStride when loading Image to texture 2024-12-13 14:42:26 +00:00
reuk
f05031a898 Image: Convert structs to lambdas in implementation 2024-12-13 14:42:26 +00:00
reuk
dcca72484f Image: Update return type of getPixelData to avoid dangling pointers 2024-12-13 14:42:26 +00:00
reuk
0be5ad1afc CMake: Fix invalid DEPENDS argument passed to add_custom_command
add_custom_command rejects this argument in CMake 3.31+ according to
CMP0175.
2024-12-13 14:42:26 +00:00
reuk
80bb7b0861 ScopedThreadDPIAwarenessSetter: Make moveable 2024-12-13 14:42:26 +00:00
Anthony Nicholls
880b76983e Graphics: Use cached glyph shaping when only the position of text changes 2024-12-13 14:41:26 +00:00
reuk
4f474d97f4
FileChooser: Fix double-delete of UTType instances 2024-12-12 12:58:54 +00:00
Anthony Nicholls
34f7d467c9 VST2 Client: Fix compilation issue when compiling with JUCE_VST3_CAN_REPLACE_VST2 2024-12-11 14:50:49 +00:00
Oliver James
bc6a7ecdf5 Resave all projects 2024-12-11 13:50:13 +00:00
Oliver James
f608e7cce2 juce_audio_devices: Add support for JACK on Windows and macOS 2024-12-11 13:50:13 +00:00
Oliver James
b7d0364e69 AudioTransportSource: hasStreamFinished returns true when stream finished 2024-12-11 13:48:47 +00:00
attila
6f4a2f6b6a Upgrade to harfbuzz 10.1.0 2024-12-10 13:43:51 +01:00
reuk
9b73f07e07 AUv3 Client: Add support for MIDI sysex input 2024-12-08 22:25:11 +00:00
reuk
330792dcee AUv3 Client: Use MIDIEventList for output 2024-12-08 22:25:11 +00:00
reuk
a6fa345ccc SheenBidi: Disable implicit-fallthrough warning for clang/gcc 2024-12-08 22:25:11 +00:00
attila
67e7a638fd Fix VST3 plugin compilation when JUCE_PLUGINHOST_VST3=1 2024-12-06 15:24:41 +00:00
attila
4a5076d3a3 Fix WebControlRelays documentation 2024-12-06 15:24:41 +00:00
Oliver James
951b02c86d AudioDeviceManager: Always save audioDeviceBufferSize 2024-12-06 12:19:16 +00:00
reuk
914f55683c
StandardHeader: Fix missing definition of alignment_of_v
When building in C++23 mode for iOS with Xcode 16.1 and Ninja, this
symbol could not be found, presumably because it is no longer included
transitively via other standard headers.
2024-12-05 11:54:11 +00:00
Oliver James
7ba1107d24 Juceaide: Fix CMake not expanding passed through variables 2024-12-04 20:25:50 +00:00
attila
9223805b9c Refactor shaping to eliminate false soft break points at shaping parameter boundaries
Prior to this a soft break could occur between two characters printed in
different fonts, even though there was no break opportunity there in the
Unicode string.
2024-12-04 16:52:57 +01:00
attila
0474dacd31 Add Ranges::covers 2024-12-04 16:50:36 +01:00
attila
c69119a7b7 Add Ranges::find and RangedValues::find 2024-12-04 16:50:36 +01:00
attila
0dc97de993 Add Ranges::eraseUpTo 2024-12-04 16:48:12 +01:00
attila
5b604e6d3c Fix AudioFormatReaderSource::getNextAudioBlock
The issue occurred when using looping and reading a block that is larger
than the length of the underlying AudioFormatReader.
2024-12-04 15:40:21 +00:00
attila
1f8882dee0 Avoid assertions during AudioDeviceManagerTests 2024-12-04 15:40:21 +00:00
attila
9b87c1a50e Fix assertion during WaveAudioFormatTests 2024-12-04 15:40:21 +00:00
reuk
5d5829927a
AccessibilityDemo: Add local notifications example
Also updates the DemoRunner so that the new push notifications example
works properly on Android.
2024-12-04 11:13:44 +00:00
reuk
269ebbb525
Accessibility: Add AccessibilityHandler::postSystemNotification() function for posting an OS-specific accessible notification 2024-12-04 11:11:21 +00:00
reuk
6d10eb536f
PushNotifications: Update Android implementation to properly request permissions 2024-12-04 11:09:18 +00:00
reuk
ed0092a8bc
PushNotifications: Assert instead of crashing if Android notification icon cannot be located 2024-12-04 11:09:18 +00:00
reuk
98031a814c
PushNotifications: Remove unnecessary qualifications in Android impl 2024-12-04 11:09:18 +00:00
reuk
0329635ed2
RuntimePermissions: Allow requesting the POST_NOTIFICATIONS permission at runtime on Android 2024-12-04 11:09:18 +00:00
reuk
5878adaecd
Projucer: Add android.permission.POST_NOTIFICATIONS to manifest when push notifications enabled 2024-12-04 11:09:18 +00:00
reuk
051e701780 Windowing: Update mousewheel handler on Windows to always process messages in the context of the peer receiving the event 2024-12-03 14:26:21 +00:00
reuk
5c138561bb
MidiDeviceListConnectionBroadcaster: Avoid constructing MessageManager on incorrect thread
Previously, if the very first call to
MidiDeviceListConnectionBroadcaster::get() happened on a background
thread (which could happen on macOS in response to a MIDI setup
configuration change), then MessageManager::getInstance and
getAvailableDevices could be called on that same thread.

With this change in place, midi change notifications will be ignored if
there's no message manager available, and getAvailableDevices will only
be called on the message thread.
2024-12-03 12:24:35 +00:00
reuk
a889149cbd
PixelRGB: Fix pixel order issue when creating CGImages on iOS 2024-12-03 11:28:07 +00:00
Anthony Nicholls
0e12c2da92 VST3 Client: Fix an issue with the reporting of VST3 plugin IDs 2024-12-03 08:42:56 +00:00
reuk
cfee7cfc93
Windows: Fix bug where IME displayed at incorrect location on scaled displays 2024-12-02 17:20:43 +00:00
reuk
038b0d6c9e
Windows: Fix bug where IME failed to display on Windows 11 2024-12-02 17:20:42 +00:00
reuk
fc76e936d3
DragImageComponent: Avoid case where image may detach from mouse when dragging between screens
When two monitors are available, both with different scale factors, then
the drag-image may 'detach' from the mouse while the image's top-left
coordinate was on one display, and the mouse cursor was on the other
display.

This happened because, on Windows, the mouse cursor moves continuously
in physical (not logical!) space. In other words, the mouse may not move
continuously in logical space, and the discontinuity becomes visible
when components are positioned relative to the mouse in logical space.

In order to display consistently, the top-left position of the image
must be set relative to the physical position of the mouse.
2024-12-02 17:20:42 +00:00
reuk
2fcf9ebf38
Windowing: Fix issue where components dragged between monitors with different scalings could detach from the mouse
This bug could be observed by running the WidgetsDemo Drag+Drop pane on
Windows 10, and dragging an item between two displays at different scale
factors.

This is issue is a regression introduced in
9817a2bb66. The regression was caused by
the change in mouse position calculation. The incorrect version switched
to using ClientToScreen, but the correct version used
getPointFromLocalLParam.

The function getPointFromLocalLParam was replaced by clientLParamToPoint
in 24ab3cb6a3, and is restored by this
commit.
2024-12-02 17:20:42 +00:00
reuk
c24d1a17a7
Windowing: Avoid changing window bounds in WM_WINDOWPOSCHANGING
This change intends to address a bug observed only on Windows 10 with a
display scale factor of 125%.

When the native titlebar is enabled, and the window's border-resizer is
used to resize the window slowly the with mouse, the client area of the
window may move to the wrong location, or be drawn with some areas
obscured/clipped. This is especially observable when resizing the
WidgetsDemo to its smallest size, and then dragging the right border a
single pixel to the right. On my computer, this consistently causes the
client area to display at the wrong location.

I haven't been able to find any obvious bug in JUCE that might cause
this behaviour. In particular, it seems that the window begins
displaying incorrectly *before* the window ever actually resizes.

During the resize, the system sends events (WM_SIZING and
WM_WINDOWPOSCHANGING) to the window, and according to the documentation,
the window may modify the message parameters in order to constrain the
new window size. When running on a scaled display, JUCE attempts to map
the logical client area size to a sensible size in physical pixels, and
uses the sizing messages to enforce this size requirement.

In the case of the broken window rendering, the system requests a new
window size, which JUCE rejects. The window's display state doesn't
change, so the swap chain does not resize, and the swap chain does not
present. Put another way, the broken rendering happens *independently*
of JUCE modifying the swap chain in any way. Therefore, I believe that the
bug is introduced elsewhere, potentially by Windows itself.

I also checked to see whether the issue could be caused by mishandling
of the NCCALCSIZE message, which is normally used to configure the
relative positions of the client and nonclient areas. However, in the
buggy case, NCCALCSIZE is not sent until *after* the first 'broken'
frame is painted - and even then, the implementation immediately falls
back to DefWindowProc.

Given that the issue appears to be a bug in Windows, the proposed change
is a workaround, rather than a true fix. It appears as though the
problem goes away when WM_WINDOWPOSCHANGING does not modify the
requested bounds. Therefore, for windows with native titlebars, we rely
on the constraints to be applied in WM_SIZING only, when sizing the
window in a sizemove gesture.
2024-12-02 17:20:42 +00:00
reuk
81a95abb3c
Windowing: Use local coordinate space of component in call to findControlAtPoint 2024-12-02 17:20:42 +00:00