89@property(nonatomic) kKeyboardModifier pressedModifiers;
98 _pressedModifiers = 0;
105 if (@available(iOS 13.4, *)) {
111 switch (press.phase) {
112 case UIPressPhaseBegan:
115 case UIPressPhaseCancelled:
120 case UIPressPhaseEnded:
123 case UIPressPhaseChanged:
126 case UIPressPhaseStationary:
136 NSString* charactersIgnoringModifiers =
138 NSDictionary* keyMessage = @{
141 @"keyCode" : @(press.key.keyCode),
142 @"modifiers" : @([
self adjustModifiers:press]),
143 @"characters" : characters == nil ?
@"" : characters,
144 @"charactersIgnoringModifiers" : charactersIgnoringModifiers == nil
146 : charactersIgnoringModifiers,
148 [
self.channel sendMessage:keyMessage
150 bool handled = reply ? [[reply valueForKey:@"handled"] boolValue] : true;
155#pragma mark - Private
158 if (@available(iOS 13.4, *)) {
164 bool isKeyDown =
false;
165 switch (press.phase) {
166 case UIPressPhaseStationary:
167 case UIPressPhaseChanged:
169 NSAssert(
false,
@"Unexpected key event type received in updatePressedModifiers.");
171 case UIPressPhaseBegan:
174 case UIPressPhaseCancelled:
175 case UIPressPhaseEnded:
180 void (^
update)(kKeyboardModifier, bool) = ^(kKeyboardModifier mod,
bool isOn) {
182 _pressedModifiers |= mod;
184 _pressedModifiers &= ~mod;
187 switch (press.key.keyCode) {
188 case UIKeyboardHIDUsageKeyboardCapsLock:
189 update(kKeyboardModifierAlphaShift, isKeyDown);
191 case UIKeyboardHIDUsageKeypadNumLock:
192 update(kKeyboardModifierNumericPad, isKeyDown);
194 case UIKeyboardHIDUsageKeyboardLeftShift:
195 update(kKeyboardModifierLeftShift, isKeyDown);
197 case UIKeyboardHIDUsageKeyboardRightShift:
198 update(kKeyboardModifierRightShift, isKeyDown);
200 case UIKeyboardHIDUsageKeyboardLeftControl:
201 update(kKeyboardModifierLeftControl, isKeyDown);
203 case UIKeyboardHIDUsageKeyboardRightControl:
204 update(kKeyboardModifierRightControl, isKeyDown);
206 case UIKeyboardHIDUsageKeyboardLeftAlt:
207 update(kKeyboardModifierLeftOption, isKeyDown);
209 case UIKeyboardHIDUsageKeyboardRightAlt:
210 update(kKeyboardModifierRightOption, isKeyDown);
212 case UIKeyboardHIDUsageKeyboardLeftGUI:
213 update(kKeyboardModifierLeftCommand, isKeyDown);
215 case UIKeyboardHIDUsageKeyboardRightGUI:
216 update(kKeyboardModifierRightCommand, isKeyDown);
223 update(kKeyboardModifierShift,
224 _pressedModifiers & (kKeyboardModifierRightShift | kKeyboardModifierLeftShift));
225 update(kKeyboardModifierControl,
226 _pressedModifiers & (kKeyboardModifierRightControl | kKeyboardModifierLeftControl));
227 update(kKeyboardModifierOption,
228 _pressedModifiers & (kKeyboardModifierRightOption | kKeyboardModifierLeftOption));
229 update(kKeyboardModifierCommand,
230 _pressedModifiers & (kKeyboardModifierRightCommand | kKeyboardModifierLeftCommand));
237 if (@available(iOS 13.4, *)) {
240 return press.key.modifierFlags;
243 [
self updatePressedModifiers:press];
245 return _pressedModifiers | (press.key.modifierFlags & ~kKeyboardModifierMask);