1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-15 00:24:19 +00:00
Commit graph

9215 commits

Author SHA1 Message Date
reuk
edddca5ac3
VST3 Host: Fix UB in VST3Parameter implementation 2022-06-13 15:29:57 +01:00
reuk
1c10e0c79b
Android: Fix problems with accessible text navigation
Previously, when navigating in a text editor by words, the cursor would
get 'stuck' after moving a single word. This issue should now be
resolved.

Additionally, the cursor position was not updated properly when
adjusting a selection, and would instead be moved to the end of the
selected range. With this patch applied, the cursor should now be set to
the correct position when modifying selections. When extending a
selection backwards, the cursor will display at the beginning of the
selected range, rather than the end.

Finally, most Android apps announce the 'skipped' characters or words
whenever the cursor is moved, but this feature was broken in JUCE. This
patch enables this feature.
2022-06-13 15:29:57 +01:00
reuk
b80f77f8b1
Android: Allow TalkBack borders to be displayed on OpenGL views 2022-06-13 15:29:57 +01:00
reuk
2b1745272e
Android: Fix a couple of accessibility-related crashes
These crashes could be seen in the DemoRunner when selecting items in
nested PopupMenu windows.
2022-06-13 15:29:56 +01:00
reuk
61b26e4e35
VST3 Client: Handle null channels provided by host 2022-06-13 15:29:56 +01:00
attila
5d5610286f Component: Use the rounded integer mouse position when evaluating hitTest
This commit reverts a small part of
4ca923a34b.
2022-06-10 20:38:37 +02:00
attila
032cc528c8 DragAndDropContainer: Fix the escape key dismissing the drag operation 2022-06-10 20:38:37 +02:00
attila
edf68d209c MacOS: Override and implement JuceNSViewClass::updateTrackingAreas()
This change fixes a bug where a fullscreen window would not receive
mouseMoved events until the cursor left and then reentered the
window's area.
2022-06-10 20:38:37 +02:00
reuk
cce38de6cf
Windows: Fix virtual keyboard hide/show on Windows 11
This change fixes an issue where the touch keyboard failed to show when
selecting a TextEditor.

On the current versions of Windows 10 and 11, the undocumented
ITipInvocation workaround no longer seems to be required, so it has been
removed.

The isTabletModeActivatedForWindow function is no longer needed, and has
been removed. This function also appears to return inconsistent results:
the window may be in 'desktop mode', but devices with touchscreens
should still display the keyboard when selecting a TextEditor by touch.
2022-06-09 16:55:19 +01:00
reuk
140f8fedb1
TextEditor: Add option to dismiss the virtual keyboard on touches outside
Previously, individual components had to ask the peer to hide and show
the keyboard, by calling textInputRequired() and
dismissPendingTextInput() respectively. When an onscreen keyboard (OSK)
was required, most Peer implementation would directly hide/show the OSK
inside these function. However, the iOS ComponentPeer implementation
instead listened to the application's global keyboard focus, and only
opened the OSK when the focused component was also a TextInputTarget
with active input.

The iOS scheme seems like a better design, as it enforces that the OSK
hiding and showing is synced with the keyboard focus of the application.
In the other implementations, it was possible for a Component to call
textInputRequired even when it didn't have the keyboard focus, putting
the application into an inconsistent state. The iOS scheme also makes
the TextInputTarget interface more useful, as it enforces that the OSK
will only display for components that implement TextInputTarget, and
return true from isTextInputActive().

This patch changes all Peer implementations to match the iOS
implementation, improving consistency. Each time the global keyboard
focus changes, refreshTextInputTarget is called automatically, and the
OSK is shown if the focused component is a TextInputTarget that returns
true from isTextInputActive, and hidden otherwise. Components can also
call refreshTextInputTarget manually. This should be done whenever the
component updates the return value of isTextInputActive(). Effectively,
the Peer is now responsible for keeping track of the focused
TextInputTarget, rather than allowing individual components to hide and
show the OSK at will.

Additionally, this patch adds an option to the TextEditor to
automatically dismiss the OSK when the mouse is clicked outside of the
editor. This should improve user experience on mobile platforms, where
touches on sibling components may cause a TextEditor to gain keyboard
focus and unnecessarily display the OSK.
2022-06-09 16:55:19 +01:00
reuk
86a36b8b52
Android: Improve complexity of ActivityLifecycleCallbacks::invoke 2022-06-09 16:55:18 +01:00
reuk
1560242906
Android: Add missing ActivityLifecycleCallbacks method 2022-06-09 16:55:18 +01:00
reuk
6375f640db
InAppPurchases: Add support for Android BillingClient 5.0.0 2022-06-09 16:55:17 +01:00
attila
7c66dc8e15 Slider: Add keyboard control even without accessibility 2022-06-09 16:24:00 +02:00
reuk
e86436297d
LV2 Client: Update param IDs to avoid writing malformed manifests 2022-06-07 12:41:53 +01:00
reuk
b41beb3767
LV2 Host: Properly map non-ASCII IRIs to URIDs 2022-06-06 21:20:40 +01:00
Tom Poole
8d1b91daee macOS: Use MTLStorageModeManaged for shared Metal textures 2022-06-01 14:01:43 +01:00
attila
f582c84c37 Remove VS2015 workarounds 2022-05-25 13:57:01 +02:00
attila
2fdc4f6633 Projucer: Remove VS2015 and CLion exporters 2022-05-25 13:56:55 +02:00
Tom Poole
c7cabbbaba VS2022: Work around a compiler bug 2022-05-23 20:20:44 +01:00
reuk
6e7a2c3225
AndroidDocument: Support file access to shared storage locations on Android 30+ 2022-05-23 13:18:08 +01:00
reuk
7dd0cffe71
ConnectedChildProcess: Always cancel pending async updates before background thread stops 2022-05-23 13:09:26 +01:00
reuk
5b58f1c61e
FlacAudioFormat: Correctly balance preprocessor pragmas 2022-05-23 13:09:26 +01:00
reuk
9a12e93f5a
File: Add hasReadAccess() 2022-05-23 13:09:23 +01:00
attila
6f3fb5a29f Linux: Adjust natively reported border size by the current scale factor 2022-05-19 12:06:38 +02:00
attila
338c045719 DropShadower: Fix bug when setOwner() is called with a component without a parent
Until now when a Component without a parent was passed to setOwner() the
ParentVisibilityChangedListener would not install any hooks to any
components, hence it would not be notified, when the owner was added
to a parent.
2022-05-19 12:06:33 +02:00
attila
2c2c21ebc9 Linux: Fix sporadic positioning error after window creation 2022-05-19 12:06:28 +02:00
Tom Poole
2ec861d99e Update licensing banners to JUCE 7 2022-05-16 17:55:48 +01:00
Tom Poole
05a42424f9 Windows: Consolidate graphics invalidation regions
Regions marked as dirty by repaint calls are now queued up and
dispatched when the corresponding physical display device is
refreshed
2022-05-16 16:37:31 +01:00
reuk
acefc92f88 TableListBox: Avoid calling virtual functions in constructor 2022-05-13 09:44:33 +01:00
attila
5f4da905d7 ARA Client: Add ARA interface extensions to AU and VST3 wrappers 2022-05-12 12:31:30 +02:00
attila
9ae96e98ca ARA Client: Add ARA plugin model classes for writing plugins 2022-05-12 12:31:30 +02:00
attila
f36949c1b2 ARA Host: Add support for scanning and hosting ARA plugins 2022-05-12 12:31:30 +02:00
attila
d99fbccb66 Add PreSonus VST3 extensions 2022-05-12 12:31:19 +02:00
attila
e6cf6ab064 ListenerList: Modify iterator during removals to guarantee callback 2022-05-11 16:06:18 +02:00
attila
0ff5cea68c AU Host: Call AudioUnitReset() before AudioUnitUninitialize() instead of after
This change ensures that it is possible to put a plugin in an unprepared state
by calling releaseResources().
2022-05-11 16:06:18 +02:00
attila
cc8aa57793 AU Client: Only call prepareToPlay() from SetProperty() if already in prepared state 2022-05-11 16:06:18 +02:00
attila
3b5d7898ed VST3 Client: Only call prepareToPlay() from IComponent::setActive() 2022-05-11 16:06:18 +02:00
attila
db17713aad AudioProcessor: Add isRealtime() 2022-05-11 16:06:18 +02:00
attila
8c62b4f003 Add ScopedTryReadLock and ScopedTryWriteLock 2022-05-11 16:06:18 +02:00
attila
7c22fae8c7 BufferingAudioFormatReader: Return failure from read() in more cases
read() now returns failure in the case of a read timeout, or if
reading any block failed.
2022-05-11 16:06:18 +02:00
Oli
2bca60e52c AudioDeviceManager: Fix MidiOutput dangling pointer
Changed the lifetime of the default MIDI oputput.
Removed the need for Timer workaround in AudioDeviceSelectorComponent.
2022-05-10 16:32:36 +01:00
reuk
319da1608d PopupMenu: Avoid potential crash when accessing exitingModalState member 2022-05-05 21:35:49 +01:00
reuk
4805b86ca4
LV2 Client: Update Atom parsing to use Optional 2022-05-04 20:48:11 +01:00
reuk
208fc05480
LV2 Client: Request buffers large enough to hold a change event for each parameter 2022-05-04 20:48:11 +01:00
reuk
e68a62af7f
LV2 Host: Ensure default parameter value lies between min and max when not explicitly provided 2022-05-04 20:48:11 +01:00
reuk
e85a6b595e
LV2 Host: Always notify the UI about parameter changes, even if they originate from the UI
This fixes an issue where Harrison XT-series plugin editors did not
update on mouse interaction in the AudioPluginHost.
2022-05-04 20:48:10 +01:00
reuk
e8431891a0
LV2 Host: Remove unused function 2022-05-04 20:48:10 +01:00
reuk
165b9a6c9b
LV2 Host: Fix bug where atom ports would not be correctly resized 2022-05-04 20:48:10 +01:00
reuk
ce061675a5
VST3 Host: Send parameter changes triggered by MIDI CCs to the IEditController
This change reshuffles the way that parameter updates and notifications
work for hosted VST3 plugins.

Previously:
- Parameter::setValue would update the processor and editor, but not the
  host
- Parameter::setValueFromEditor would update the processor and host, but
  not the editor
- MIDI CC events would be converted to events and added to the
  processor's input event list, but were not forwarded to the
  IEditController.

Now:
- Parameter::setValue updates the host's cachedParamValues, which is the
  host's source of truth for parameter values. On each process callback,
  changes will be added to the input parameter list. Then, for each item
  in the parameter list, an update will be dispatched back to the
  editor.
- Parameter::setValueFromEditor is removed. All parameter changes will
  be sent back to the editor, even if they originated from the editor.
  setValueNotifyingHost can be used to notify listeners that one of the
  host's JUCE parameters has changed, e.g. in the host context's
  performEdit.
- MIDI CC events trigger calls to setValueNotifyingHost on any mapped
  parameters. The flow is very similar to a parameter change from the
  editor: the cachedParamValues are updated immediately, and host
  parameter listeners are notified. Then, for each changed
  cachedParamValue an entry is added to the inputParameterChanges
  (updating the processor), then for each item in the
  inputParameterChanges an update is sent to the editor.
2022-05-04 20:48:10 +01:00