diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-01-04 08:58:15 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-01-04 08:58:15 +0200 |
commit | 81610dc712d004e81f9bbf1feaf6433a09f56e3a (patch) | |
tree | bfac086f50c317dce2cf611944f0de4461c3935f | |
parent | ec575faf05060617b7ade4d3787b6f0e88a116bf (diff) |
SDL patch for macOS and iOS updated for 2.0.18
SDL has added multiple input sources for mice.
-rw-r--r-- | sdl2.0.18-macos-ios.diff | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/sdl2.0.18-macos-ios.diff b/sdl2.0.18-macos-ios.diff new file mode 100644 index 00000000..8c143226 --- /dev/null +++ b/sdl2.0.18-macos-ios.diff | |||
@@ -0,0 +1,129 @@ | |||
1 | diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c | ||
2 | index 539f17138..a5a5b00fd 100644 | ||
3 | --- a/src/events/SDL_mouse.c | ||
4 | +++ b/src/events/SDL_mouse.c | ||
5 | @@ -709,8 +709,8 @@ SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, float x, float y, S | ||
6 | event.type = SDL_MOUSEWHEEL; | ||
7 | event.wheel.windowID = mouse->focus ? mouse->focus->id : 0; | ||
8 | event.wheel.which = mouseID; | ||
9 | - event.wheel.x = integral_x; | ||
10 | - event.wheel.y = integral_y; | ||
11 | + event.wheel.x = x; //integral_x; | ||
12 | + event.wheel.y = y; //integral_y; | ||
13 | event.wheel.preciseX = x; | ||
14 | event.wheel.preciseY = y; | ||
15 | event.wheel.direction = (Uint32)direction; | ||
16 | diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m | ||
17 | index e9d832d64..4cfa3624b 100644 | ||
18 | --- a/src/video/cocoa/SDL_cocoamouse.m | ||
19 | +++ b/src/video/cocoa/SDL_cocoamouse.m | ||
20 | @@ -463,10 +463,16 @@ + (NSCursor *)invisibleCursor | ||
21 | } | ||
22 | |||
23 | SDL_MouseID mouseID = mouse->mouseID; | ||
24 | - CGFloat x = -[event deltaX]; | ||
25 | - CGFloat y = [event deltaY]; | ||
26 | + CGFloat x = -[event scrollingDeltaX]; | ||
27 | + CGFloat y = [event scrollingDeltaY]; | ||
28 | SDL_MouseWheelDirection direction = SDL_MOUSEWHEEL_NORMAL; | ||
29 | |||
30 | + /* HACK: Make a distinction between precise and imprecise scrolling. | ||
31 | + Trackpad seems to be mouseID 0. */ | ||
32 | + if (![event hasPreciseScrollingDeltas]) { | ||
33 | + mouseID = 1; | ||
34 | + } | ||
35 | + | ||
36 | if ([event respondsToSelector:@selector(isDirectionInvertedFromDevice)]) { | ||
37 | if ([event isDirectionInvertedFromDevice] == YES) { | ||
38 | direction = SDL_MOUSEWHEEL_FLIPPED; | ||
39 | diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h | ||
40 | index 489db169f..79a41dd50 100644 | ||
41 | --- a/src/video/cocoa/SDL_cocoawindow.h | ||
42 | +++ b/src/video/cocoa/SDL_cocoawindow.h | ||
43 | @@ -110,6 +110,8 @@ typedef enum | ||
44 | /* Touch event handling */ | ||
45 | -(void) handleTouches:(NSTouchPhase) phase withEvent:(NSEvent*) theEvent; | ||
46 | |||
47 | +-(void) syncMouseButtonAndKeyboardModifierState; | ||
48 | + | ||
49 | @end | ||
50 | /* *INDENT-ON* */ | ||
51 | |||
52 | diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m | ||
53 | index f09088c45..7379c2269 100644 | ||
54 | --- a/src/video/cocoa/SDL_cocoawindow.m | ||
55 | +++ b/src/video/cocoa/SDL_cocoawindow.m | ||
56 | @@ -1236,6 +1236,25 @@ - (void)otherMouseDown:(NSEvent *)theEvent | ||
57 | [self mouseDown:theEvent]; | ||
58 | } | ||
59 | |||
60 | +- (void)syncMouseButtonAndKeyboardModifierState { | ||
61 | + SDL_Mouse *mouse = SDL_GetMouse(); | ||
62 | + if (mouse) { | ||
63 | + for (int i = 0; i < mouse->num_sources; i++) { | ||
64 | + if (mouse->sources[i].mouseID == mouse->mouseID) { | ||
65 | + mouse->sources[i].buttonstate = 0; | ||
66 | + } | ||
67 | + } | ||
68 | + } | ||
69 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LGUI); | ||
70 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RGUI); | ||
71 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT); | ||
72 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RSHIFT); | ||
73 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LCTRL); | ||
74 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RCTRL); | ||
75 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LALT); | ||
76 | + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RALT); | ||
77 | +} | ||
78 | + | ||
79 | - (void)mouseUp:(NSEvent *)theEvent | ||
80 | { | ||
81 | SDL_Mouse *mouse = SDL_GetMouse(); | ||
82 | diff --git a/src/video/uikit/SDL_uikitviewcontroller.h b/src/video/uikit/SDL_uikitviewcontroller.h | ||
83 | index f7f4c9de6..50c72aad0 100644 | ||
84 | --- a/src/video/uikit/SDL_uikitviewcontroller.h | ||
85 | +++ b/src/video/uikit/SDL_uikitviewcontroller.h | ||
86 | @@ -58,10 +58,13 @@ | ||
87 | #if !TARGET_OS_TV | ||
88 | - (NSUInteger)supportedInterfaceOrientations; | ||
89 | - (BOOL)prefersStatusBarHidden; | ||
90 | +- (void)setStatusStyle:(UIStatusBarStyle)style; | ||
91 | +- (UIStatusBarStyle)preferredStatusBarStyle; | ||
92 | - (BOOL)prefersHomeIndicatorAutoHidden; | ||
93 | - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures; | ||
94 | |||
95 | @property (nonatomic, assign) int homeIndicatorHidden; | ||
96 | +@property (nonatomic, assign) UIStatusBarStyle statusBarStyle; | ||
97 | #endif | ||
98 | |||
99 | #if SDL_IPHONE_KEYBOARD | ||
100 | diff --git a/src/video/uikit/SDL_uikitviewcontroller.m b/src/video/uikit/SDL_uikitviewcontroller.m | ||
101 | index b2db4037d..d39f8085c 100644 | ||
102 | --- a/src/video/uikit/SDL_uikitviewcontroller.m | ||
103 | +++ b/src/video/uikit/SDL_uikitviewcontroller.m | ||
104 | @@ -105,6 +105,7 @@ - (instancetype)initWithSDLWindow:(SDL_Window *)_window | ||
105 | #endif | ||
106 | |||
107 | #if !TARGET_OS_TV | ||
108 | + self.statusBarStyle = UIStatusBarStyleDefault; | ||
109 | SDL_AddHintCallback(SDL_HINT_IOS_HIDE_HOME_INDICATOR, | ||
110 | SDL_HideHomeIndicatorHintChanged, | ||
111 | (__bridge void *) self); | ||
112 | @@ -230,6 +231,17 @@ - (BOOL)prefersHomeIndicatorAutoHidden | ||
113 | return hidden; | ||
114 | } | ||
115 | |||
116 | +- (void)setStatusStyle:(UIStatusBarStyle)style | ||
117 | +{ | ||
118 | + self.statusBarStyle = style; | ||
119 | + [self setNeedsStatusBarAppearanceUpdate]; | ||
120 | +} | ||
121 | + | ||
122 | +- (UIStatusBarStyle)preferredStatusBarStyle | ||
123 | +{ | ||
124 | + return self.statusBarStyle; | ||
125 | +} | ||
126 | + | ||
127 | - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures | ||
128 | { | ||
129 | if (self.homeIndicatorHidden >= 0) { | ||