@@ -25,69 +25,117 @@ 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 . current? . extendedGamepad? . valueChangedHandler = { profile, element in
6085 self . controllerAdapter. handleValueChanged ( profile, element)
6186 }
6287 }
88+ }
6389
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- }
90+ private func setupKeyboard( ) {
91+ AKInterface . shared!. setupKeyboard (
92+ keyboard: { keycode, pressed, isRepeat, ctrlModified in
93+ self . keyboardAdapter. handleKey (
94+ keycode: keycode,
95+ pressed: pressed,
96+ isRepeat: isRepeat,
97+ ctrlModified: ctrlModified
98+ )
99+ } ,
100+ swapMode: ModeAutomaton . onOption
101+ )
102+ }
74103
75- // Mouse polling rate as high as 1000 causes issue to some games
76- setupMouseMoved ( maxPollingRate: 125 )
104+ private func setupScrollWheel( ) {
105+ AKInterface . shared!. setupScrollWheel ( { deltaX, deltaY in
106+ self . mouseAdapter. handleScrollWheel ( deltaX: deltaX, deltaY: deltaY)
107+ } )
108+ }
77109
78- AKInterface . shared!. setupMouseButton ( left: true , right: false , { _, pressed in
110+ private func setupMouseButtons( ) {
111+ AKInterface . shared!. setupMouseButton ( left: true , right: false , { _, pressed in
79112 self . mouseAdapter. handleLeftButton ( pressed: pressed)
80113 } )
81114
82- AKInterface . shared!. setupMouseButton ( left: false , right: false , { id, pressed in
115+ AKInterface . shared!. setupMouseButton ( left: false , right: false , { id, pressed in
83116 self . mouseAdapter. handleOtherButton ( id: id, pressed: pressed)
84117 } )
85118
86- AKInterface . shared!. setupMouseButton ( left: false , right: true , { id, pressed in
119+ AKInterface . shared!. setupMouseButton ( left: false , right: true , { id, pressed in
87120 self . mouseAdapter. handleOtherButton ( id: id, pressed: pressed)
88121 } )
122+ }
89123
90- ActionDispatcher . build ( )
124+ private func initializeResizableWindowSupport( ) {
125+ // Reactivate keymapping once the key window is initialized
126+ keyWindowObserver = NotificationCenter . default. addObserver ( forName: UIWindow . didBecomeKeyNotification,
127+ object: nil , queue: . main) { _ in
128+ ActionDispatcher . build ( )
129+ if let observer = self . keyWindowObserver {
130+ NotificationCenter . default. removeObserver ( observer)
131+ self . keyWindowObserver = nil
132+ }
133+ }
134+ // Reactivate keymapping once the user finishes resizing the window
135+ NotificationCenter . default. addObserver ( forName: Notification . Name ( " NSWindowDidEndLiveResizeNotification " ) ,
136+ object: nil , queue: . main) { _ in
137+ ActionDispatcher . build ( )
138+ }
91139 }
92140
93141 private func setupMouseMoved( maxPollingRate: Int ) {
0 commit comments