mirror of
https://github.com/godotengine/godot.git
synced 2025-04-25 01:48:08 +08:00
Merge pull request #42772 from bruvzg/macos_inertia
[macOS] Suppress momentum scrolling after key press.
This commit is contained in:
commit
181082589a
@ -63,6 +63,8 @@
|
|||||||
|
|
||||||
#define DS_OSX ((DisplayServerOSX *)(DisplayServerOSX::get_singleton()))
|
#define DS_OSX ((DisplayServerOSX *)(DisplayServerOSX::get_singleton()))
|
||||||
|
|
||||||
|
static bool ignore_momentum_scroll = false;
|
||||||
|
|
||||||
static void _get_key_modifier_state(unsigned int p_osx_state, Ref<InputEventWithModifiers> r_state) {
|
static void _get_key_modifier_state(unsigned int p_osx_state, Ref<InputEventWithModifiers> r_state) {
|
||||||
r_state->set_shift((p_osx_state & NSEventModifierFlagShift));
|
r_state->set_shift((p_osx_state & NSEventModifierFlagShift));
|
||||||
r_state->set_control((p_osx_state & NSEventModifierFlagControl));
|
r_state->set_control((p_osx_state & NSEventModifierFlagControl));
|
||||||
@ -1304,6 +1306,8 @@ static int remapKey(unsigned int key, unsigned int state) {
|
|||||||
ERR_FAIL_COND(!DS_OSX->windows.has(window_id));
|
ERR_FAIL_COND(!DS_OSX->windows.has(window_id));
|
||||||
DisplayServerOSX::WindowData &wd = DS_OSX->windows[window_id];
|
DisplayServerOSX::WindowData &wd = DS_OSX->windows[window_id];
|
||||||
|
|
||||||
|
ignore_momentum_scroll = true;
|
||||||
|
|
||||||
// Ignore all input if IME input is in progress
|
// Ignore all input if IME input is in progress
|
||||||
if (!imeInputEventInProgress) {
|
if (!imeInputEventInProgress) {
|
||||||
NSString *characters = [event characters];
|
NSString *characters = [event characters];
|
||||||
@ -1348,6 +1352,8 @@ static int remapKey(unsigned int key, unsigned int state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)flagsChanged:(NSEvent *)event {
|
- (void)flagsChanged:(NSEvent *)event {
|
||||||
|
ignore_momentum_scroll = true;
|
||||||
|
|
||||||
// Ignore all input if IME input is in progress
|
// Ignore all input if IME input is in progress
|
||||||
if (!imeInputEventInProgress) {
|
if (!imeInputEventInProgress) {
|
||||||
DisplayServerOSX::KeyEvent ke;
|
DisplayServerOSX::KeyEvent ke;
|
||||||
@ -1507,6 +1513,14 @@ inline void sendPanEvent(DisplayServer::WindowID window_id, double dx, double dy
|
|||||||
deltaY *= 0.03;
|
deltaY *= 0.03;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ([event momentumPhase] != NSEventPhaseNone) {
|
||||||
|
if (ignore_momentum_scroll) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ignore_momentum_scroll = false;
|
||||||
|
}
|
||||||
|
|
||||||
if ([event phase] != NSEventPhaseNone || [event momentumPhase] != NSEventPhaseNone) {
|
if ([event phase] != NSEventPhaseNone || [event momentumPhase] != NSEventPhaseNone) {
|
||||||
sendPanEvent(window_id, deltaX, deltaY, [event modifierFlags]);
|
sendPanEvent(window_id, deltaX, deltaY, [event modifierFlags]);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user