@@ -25,69 +25,118 @@ public class ControlMode: Equatable {
2525 private var keyboardAdapter : KeyboardEventAdapter !
2626 private var mouseAdapter : MouseEventAdapter !
2727 private var controllerAdapter : ControllerEventAdapter !
28+ private var keyWindowObserver : NSObjectProtocol ?
2829
2930 public func cursorHidden( ) -> Bool {
3031 return mouseAdapter? . cursorHidden ( ) ?? false
3132 }
3233
3334 public func initialize( ) {
34- let centre = NotificationCenter . default
35- let main = OperationQueue . main
3635 if PlaySettings . shared. noKMOnInput {
37- centre. addObserver ( forName: UITextField . textDidEndEditingNotification, object: nil , queue: main) { _ in
38- ModeAutomaton . onUITextInputEndEdit ( )
39- Toucher . writeLog ( logMessage: " uitextinput end edit " )
40- }
41- centre. addObserver ( forName: UITextField . textDidBeginEditingNotification, object: nil , queue: main) { _ in
42- ModeAutomaton . onUITextInputBeginEdit ( )
43- Toucher . writeLog ( logMessage: " uitextinput begin edit " )
44- }
45- centre. addObserver ( forName: UITextView . textDidEndEditingNotification, object: nil , queue: main) { _ in
46- ModeAutomaton . onUITextInputEndEdit ( )
47- Toucher . writeLog ( logMessage: " uitextinput end edit " )
48- }
49- centre. addObserver ( forName: UITextView . textDidBeginEditingNotification, object: nil , queue: main) { _ in
50- ModeAutomaton . onUITextInputBeginEdit ( )
51- Toucher . writeLog ( logMessage: " uitextinput begin edit " )
52- }
36+ setupTextInputObservers ( )
5337 set ( . arbitraryClick)
5438 } else {
5539 set ( . off)
5640 }
5741
42+ setupGameController ( )
43+ setupKeyboard ( )
44+ if PlaySettings . shared. enableScrollWheel {
45+ setupScrollWheel ( )
46+ }
47+
48+ // Mouse polling rate as high as 1000 causes issue to some games
49+ setupMouseMoved ( maxPollingRate: 125 )
50+ setupMouseButtons ( )
51+
52+ if PlaySettings . shared. resizableWindow {
53+ initializeResizableWindowSupport ( )
54+ }
55+
56+ ActionDispatcher . build ( )
57+ }
58+
59+ private func setupTextInputObservers( ) {
60+ let centre = NotificationCenter . default
61+ let main = OperationQueue . main
62+ centre. addObserver ( forName: UITextField . textDidEndEditingNotification, object: nil , queue: main) { _ in
63+ ModeAutomaton . onUITextInputEndEdit ( )
64+ Toucher . writeLog ( logMessage: " uitextinput end edit " )
65+ }
66+ centre. addObserver ( forName: UITextField . textDidBeginEditingNotification, object: nil , queue: main) { _ in
67+ ModeAutomaton . onUITextInputBeginEdit ( )
68+ Toucher . writeLog ( logMessage: " uitextinput begin edit " )
69+ }
70+ centre. addObserver ( forName: UITextView . textDidEndEditingNotification, object: nil , queue: main) { _ in
71+ ModeAutomaton . onUITextInputEndEdit ( )
72+ Toucher . writeLog ( logMessage: " uitextinput end edit " )
73+ }
74+ centre. addObserver ( forName: UITextView . textDidBeginEditingNotification, object: nil , queue: main) { _ in
75+ ModeAutomaton . onUITextInputBeginEdit ( )
76+ Toucher . writeLog ( logMessage: " uitextinput begin edit " )
77+ }
78+ }
79+
80+ private func setupGameController( ) {
81+ let centre = NotificationCenter . default
82+ let main = OperationQueue . main
5883 centre. addObserver ( forName: NSNotification . Name. GCControllerDidConnect, object: nil , queue: main) { _ in
59- GCController . current? . extendedGamepad? . valueChangedHandler = { profile, element in
84+ GCController . shouldMonitorBackgroundEvents = true
85+ GCController . current? . extendedGamepad? . valueChangedHandler = { profile, element in
6086 self . controllerAdapter. handleValueChanged ( profile, element)
6187 }
6288 }
89+ }
6390
64- AKInterface . shared!. setupKeyboard ( keyboard: { keycode, pressed, isRepeat, ctrlModified in
65- self . keyboardAdapter. handleKey ( keycode: keycode, pressed: pressed,
66- isRepeat: isRepeat, ctrlModified: ctrlModified) } ,
67- swapMode: ModeAutomaton . onOption)
68-
69- if PlaySettings . shared. enableScrollWheel {
70- AKInterface . shared!. setupScrollWheel ( { deltaX, deltaY in
71- self . mouseAdapter. handleScrollWheel ( deltaX: deltaX, deltaY: deltaY)
72- } )
73- }
91+ private func setupKeyboard( ) {
92+ AKInterface . shared!. setupKeyboard (
93+ keyboard: { keycode, pressed, isRepeat, ctrlModified in
94+ self . keyboardAdapter. handleKey (
95+ keycode: keycode,
96+ pressed: pressed,
97+ isRepeat: isRepeat,
98+ ctrlModified: ctrlModified
99+ )
100+ } ,
101+ swapMode: ModeAutomaton . onOption
102+ )
103+ }
74104
75- // Mouse polling rate as high as 1000 causes issue to some games
76- setupMouseMoved ( maxPollingRate: 125 )
105+ private func setupScrollWheel( ) {
106+ AKInterface . shared!. setupScrollWheel ( { deltaX, deltaY in
107+ self . mouseAdapter. handleScrollWheel ( deltaX: deltaX, deltaY: deltaY)
108+ } )
109+ }
77110
78- AKInterface . shared!. setupMouseButton ( left: true , right: false , { _, pressed in
111+ private func setupMouseButtons( ) {
112+ AKInterface . shared!. setupMouseButton ( left: true , right: false , { _, pressed in
79113 self . mouseAdapter. handleLeftButton ( pressed: pressed)
80114 } )
81115
82- AKInterface . shared!. setupMouseButton ( left: false , right: false , { id, pressed in
116+ AKInterface . shared!. setupMouseButton ( left: false , right: false , { id, pressed in
83117 self . mouseAdapter. handleOtherButton ( id: id, pressed: pressed)
84118 } )
85119
86- AKInterface . shared!. setupMouseButton ( left: false , right: true , { id, pressed in
120+ AKInterface . shared!. setupMouseButton ( left: false , right: true , { id, pressed in
87121 self . mouseAdapter. handleOtherButton ( id: id, pressed: pressed)
88122 } )
123+ }
89124
90- ActionDispatcher . build ( )
125+ private func initializeResizableWindowSupport( ) {
126+ // Reactivate keymapping once the key window is initialized
127+ keyWindowObserver = NotificationCenter . default. addObserver ( forName: UIWindow . didBecomeKeyNotification,
128+ object: nil , queue: . main) { _ in
129+ ActionDispatcher . build ( )
130+ if let observer = self . keyWindowObserver {
131+ NotificationCenter . default. removeObserver ( observer)
132+ self . keyWindowObserver = nil
133+ }
134+ }
135+ // Reactivate keymapping once the user finishes resizing the window
136+ NotificationCenter . default. addObserver ( forName: Notification . Name ( " NSWindowDidEndLiveResizeNotification " ) ,
137+ object: nil , queue: . main) { _ in
138+ ActionDispatcher . build ( )
139+ }
91140 }
92141
93142 private func setupMouseMoved( maxPollingRate: Int ) {
0 commit comments