1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-31 03:00:05 +00:00
Commit graph

10060 commits

Author SHA1 Message Date
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
reuk
90d9f573c2
Windowing: Avoid using bogus window-border sizes when computing constrained window sizes
Previously, for windows with a native titlebar and a constrainer, the
window could be restored at the wrong size. This happened because
findPhysicalBorderSize() may return nonsensical values when called
during a SC_RESTORE, which in turn produces an unexpected window size
when adding the bogus border size to the constrained client area size.

We now avoid trying to constrain the window if we're unable to determine
the correct border size. I think this is only likely to happen during
SC_RESTORE, in which case the system should have a pretty good idea of
where the window should go, and constraining should not be necessary.
2024-12-02 17:20:42 +00:00
reuk
543ae06632
Windowing: Fix issue where edge resizers could incorrectly be displayed for non-resizable windows
The buggy behaviour could be seen in a blank GUI app project by setting
a native titlebar and calling setResizable (false, false). The resulting
window would still display a resize cursor when hovering the window
border.
2024-12-02 17:20:42 +00:00
reuk
4b9253dc76
DirectX: Make it easier to enable debug logging output 2024-12-02 17:20:42 +00:00
reuk
89a2407deb
AudioFormatReader: Update searchForLevel to work for more than two channels 2024-12-02 17:20:42 +00:00
reuk
3186522b0b
VST3 Host: Fix bug where MIDI CCs mapped to parameters would fail to update the host and editcontroller 2024-12-02 17:20:42 +00:00
reuk
dfe4858e55
AudioTransportSource: Avoid nullptr dereference in hasStreamFinished() 2024-12-02 17:20:42 +00:00
reuk
2583b06481
NSViewComponentPeer: Guard API availability 2024-12-02 15:20:49 +00:00
reuk
c2f567f3ee
Fix unused variable warnings 2024-12-02 14:44:24 +00:00
Anthony Nicholls
7ab382d357 VST3 Client: Remove unhelpful jassert 2024-11-28 11:09:03 +00:00
Anthony Nicholls
c12ab11ee4 MIDI CI: Remove unnecessary call to setSeedRandomly 2024-11-27 11:25:40 +00:00
Anthony Nicholls
48375432be TemporaryFile: Make single argument constructors explicit 2024-11-27 11:07:04 +00:00
Anthony Nicholls
f98bf8434a TemporaryFile: Stopping use a LockedRandom now that system random is thread safe 2024-11-27 11:07:04 +00:00
Anthony Nicholls
655d18b721 Random: Add some extra data race tests 2024-11-27 11:07:04 +00:00
Anthony Nicholls
8fe8717ebc Random: Make the system random object safer to use from multiple threads 2024-11-27 11:07:04 +00:00
Anthony Nicholls
a50292f50d AudioBuffer: Prefer early returns to nested if statements 2024-11-27 11:07:04 +00:00
Anthony Nicholls
04188c0e09 AudioBuffer: Remove approximatelyEqual 2024-11-27 11:07:04 +00:00
Anthony Nicholls
5e803ded5f Deprecations: Add ignore deprecation warning macros 2024-11-27 11:07:04 +00:00
Anthony Nicholls
6b08ced201 VST3: Add support for parameter migration 2024-11-27 11:07:04 +00:00
Anthony Nicholls
0823ee6aed String: Fix the string length being passed in a UTF conversion test 2024-11-27 11:06:56 +00:00
Anthony Nicholls
bd322d0f78 String: Refactor a test function to be more generic 2024-11-27 11:06:56 +00:00
tpoole
39b335ccef Make building with MinGW a compiler error 2024-11-22 14:43:18 +00:00
reuk
f0928ebd6e
Windowing: Fix link of UserNotifications framework on iOS
Since eb6ebaf5, juce_gui_basics always depends on UserNotifications when
building for iOS.
2024-11-21 22:19:31 +00:00
reuk
55fb6dbe62
iOS Audio: Ensure current sampleRate and bufferSize are always updated after querying sample rates
The code added in 6f20de5434 was only
executed when no explicit sample rates were set.

Now, the sample rate is always updated after querying available sample
rates and before querying available buffer sizes, so that the buffer
size check is guaranteed to use an up-to-date samplerate value.
2024-11-21 13:42:54 +00:00
Christian Haase
9de56d0aab
PluginListComponent: Add missing TRANS statements 2024-11-21 13:42:54 +00:00
reuk
b72e43620c
Grid: Fix cell ordering comparison
Previously, the set Comparator behaved the same way, regardless of the
value of columnFirst. This is incorrect; the set should be sorted such
that the final item in the set has the greatest cross-dimension.

There was also an off-by-one error in the result of
getHighestCrossDimension(). The highestCrossDimension data member is
exclusive, but the cell values in the occupiedCells set are inclusive.
We need to add 1 to the maximum cell cross-dimension in order to convert
it to an exclusive value.
2024-11-21 13:42:54 +00:00
reuk
8fa09ae8ab
Grid: Refactor to move columnFirst data member to set Comparator 2024-11-21 13:41:09 +00:00
reuk
d4107836cd
Grid: Convert nonstatic member function to static 2024-11-21 13:41:08 +00:00
reuk
73cb3b88ad
VST2 Host: Avoid C-style casts of function pointers 2024-11-21 13:41:08 +00:00
reuk
6e910d8010
VST2 Client: Avoid C-style casts of function pointers 2024-11-21 13:41:08 +00:00
reuk
04fa895f38
AAX Client: Enable host-provided editor when plugin does not supply an editor 2024-11-21 13:41:08 +00:00
reuk
4e6440c3d7
AAX Client: Remove channel layout compatibility checks
It's important that the plugin always returns the full set of available
components.

The plugin may be scanned by a separate process from the 'main' DAW
process, and these processes may report different compatibility levels.
If the scanner has more restricted compatibility than the 'main' DAW
process, then some channel layouts may not be registered, and will be
hidden in the DAW.
2024-11-21 13:40:56 +00:00
reuk
0aaaea265a
AU Client: Ignore availability warnings for MIDIEventList functions
Xcode 13.2.1 warns on these functions, despite the lambdas being
declared inside an @availability-checked block.
2024-11-21 13:29:53 +00:00
reuk
01bfa98827 CoreGraphics: Fix incorrect behaviour of non-solid-colour text fills
Previously, filling a string containing a space or other non-rendered
character with a gradient would end up filling the entire clip region.

The correct behaviour is to completely skip filling any empty paths.
2024-11-20 13:11:36 +00:00
Tom Poole
5737c42ccf Use getSiblingFile in more places 2024-11-20 10:10:35 +00:00
Tom Poole
71af005543 Bump version number to 8.0.4 2024-11-18 10:12:15 +00:00
Oliver James
9bddeb9324 MPEKeyboardComponent: Catch potential 'use after free' when cleaning up 2024-11-15 15:00:50 +00:00
Oliver James
59bb818f09 AudioDeviceManager: Remove AudioDeviceManager::restartDevice 2024-11-15 15:00:50 +00:00
reuk
be6fe2b403
VST3 Host: Avoid calling addPoint on input parameter queue 2024-11-10 11:29:45 +00:00
reuk
0ea1af03a1
ListenerList: Fix rare use-after-free when assertions are enabled
This issue manifested on Linux when building in Debug mode. It may also
have caused issues on other platforms. When editing a slider's value
using its text box, and then pressing the enter key, the program would
crash. The issue was not present when running with address sanitizer.
Valgrind was able to find the problem.
2024-11-07 21:00:22 +00:00
reuk
7437e35ef5
File: Always interpret path as absolute in getLinkedTarget()
This fixes an issue where paths consisting of just a drive letter ("C:")
would be passed to CreateFile without a trailing path separator. The
documented behaviour in this case is for the path to be interpreted
relative to the "current directory" on that disk, so getLinkedTarget()
would incorrectly return the disk's working directory instead of the
drive root.
2024-11-07 21:00:22 +00:00
reuk
ba466fc11f
Initialisation: Avoid extern "C" for main function 2024-11-07 21:00:21 +00:00
Anthony Nicholls
6cd4c0a7dc UnitTestRunner: Move javascript tests into an independent category 2024-11-07 09:54:42 +00:00
Anthony Nicholls
78ca2c5341 Javascript: Split implementation across multiple files 2024-11-07 09:54:42 +00:00
Anthony Nicholls
867d642872 Javascript: Add warning if CONFIG_BIGNUM is defined 2024-11-07 09:53:57 +00:00
Anthony Nicholls
2e683dd9d2 Javascript: Move tests into a separate file 2024-11-07 09:53:56 +00:00
Anthony Nicholls
df6f3f8e28 Javascript: Move javascript implementation into a separate module 2024-11-07 09:53:10 +00:00