public static uint SRCocoaToCarbonFlags(NSEventModifierMask aCocoaFlags)
        {
            uint carbonFlags = 0;

            if ((aCocoaFlags & NSEventModifierMask.CommandKeyMask) == NSEventModifierMask.CommandKeyMask)
            {
                carbonFlags |= Constants.cmdKey;
            }

            if ((aCocoaFlags & NSEventModifierMask.AlternateKeyMask) == NSEventModifierMask.AlternateKeyMask)
            {
                carbonFlags |= Constants.optionKey;
            }

            if ((aCocoaFlags & NSEventModifierMask.ControlKeyMask) == NSEventModifierMask.ControlKeyMask)
            {
                carbonFlags |= Constants.controlKey;
            }

            if ((aCocoaFlags & NSEventModifierMask.ShiftKeyMask) == NSEventModifierMask.ShiftKeyMask)
            {
                carbonFlags |= Constants.shiftKey;
            }

            return(carbonFlags);
        }
Beispiel #2
0
        void ProcessModifiers(NSEventModifierMask flags)
        {
            // we get notified when modifiers change, but not specifically what changed
            NSEventModifierMask diff = flags ^ XplatUICocoa.key_modifiers;

            XplatUICocoa.key_modifiers = flags;

            shiftDown = 0 != (flags & NSEventModifierMask.ShiftKeyMask);
            ctrlDown  = 0 != (flags & NSEventModifierMask.ControlKeyMask);
            altDown   = 0 != (flags & NSEventModifierMask.AlternateKeyMask);
            cmdDown   = 0 != (flags & NSEventModifierMask.CommandKeyMask);

            if ((NSEventModifierMask.ShiftKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.ShiftKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_SHIFT, IntPtr.Zero);
            }
            if ((NSEventModifierMask.ControlKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.ControlKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_CONTROL, IntPtr.Zero);
            }
            if ((NSEventModifierMask.AlternateKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.AlternateKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_MENU, IntPtr.Zero);
            }
            if ((NSEventModifierMask.CommandKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.CommandKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_LWIN, IntPtr.Zero);
            }
        }
Beispiel #3
0
        public static KeyDescriptor FromMac(char ch, NSEventModifierMask state)
        {
            var specialKey    = ConvertKey(ref ch);
            var keyDescriptor = new KeyDescriptor(specialKey, ch, ConvertModifiers(state), state);

            return(keyDescriptor);
        }
        public static string GetCharactersForKeyPress(ushort keyCode, NSEventModifierMask modifierFlags, ref uint deadKeyState, IntPtr keyboard)
        {
            var layoutData     = TISGetInputSourceProperty(keyboard, __CFStringMakeConstantString("TISPropertyUnicodeKeyLayoutData"));
            var keyboardLayout = CFDataGetBytePtr(layoutData);

            var    flags            = (uint)modifierFlags;
            var    modifierKeyState = (flags >> 16) & 0xFF;
            var    chars            = new char[4];
            UInt32 realLength       = 0;

            int    size   = sizeof(UInt16) * chars.Length;
            IntPtr buffer = IntPtr.Zero;

            try
            {
                buffer = Marshal.AllocCoTaskMem(size);
                UCKeyTranslate(keyboardLayout, keyCode, kUCKeyActionDown, modifierKeyState, LMGetKbdType(), 0,
                               ref deadKeyState, (uint)chars.Length, ref realLength, buffer);

                if (realLength != 0)
                {
                    Marshal.Copy(buffer, chars, 0, chars.Length);
                }

                //Debug.WriteLine("DeadKeyState = {0:X8}", deadKeyState);
                return(new string(chars, 0, (int)realLength));
            }
            finally
            {
                if (buffer != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(buffer);
                }
            }
        }
        public bool ShortcutValidator(SRValidator aValidator, ushort aKeyCode, NSEventModifierMask aFlags, out string outReason)
        {
            outReason = string.Empty;

            var recorder = View.Window.FirstResponder as SRRecorderControl;

            if (recorder == null)
            {
                return(false);
            }

            var shortcut = CFunctions.SRShortcutWithCocoaModifierFlagsAndKeyCode(aFlags, aKeyCode);

            if (IsTaken(pingShortcutRecorder, shortcut) ||
                IsTaken(globalPingShortcutRecorder, shortcut) ||
                IsTaken(pingItemShortcutRecorder, shortcut))
            {
                outReason = "it's already used. To use this shortcut, first remove or change the other shortcut";
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #6
0
        public static OxyModifierKeys ToModifierKeys(this NSEventModifierMask theMask)
        {
            var keys = OxyModifierKeys.None;

            if ((theMask & NSEventModifierMask.ShiftKeyMask) == NSEventModifierMask.ShiftKeyMask)
            {
                keys |= OxyModifierKeys.Shift;
            }
            if ((theMask & NSEventModifierMask.ControlKeyMask) == NSEventModifierMask.ControlKeyMask)
            {
                keys |= OxyModifierKeys.Control;
            }
            if ((theMask & NSEventModifierMask.AlternateKeyMask) == NSEventModifierMask.AlternateKeyMask)
            {
                keys |= OxyModifierKeys.Alt;
            }

            // TODO
            if ((theMask & NSEventModifierMask.CommandKeyMask) == NSEventModifierMask.CommandKeyMask)
            {
                keys |= OxyModifierKeys.Control;
            }

            return(keys);
        }
Beispiel #7
0
            InputModifiers GetModifiers(NSEventModifierMask mod)
            {
                var rv = new InputModifiers();

                if (mod.HasFlag(NSEventModifierMask.ControlKeyMask))
                {
                    rv |= InputModifiers.Control;
                }
                if (mod.HasFlag(NSEventModifierMask.ShiftKeyMask))
                {
                    rv |= InputModifiers.Shift;
                }
                if (mod.HasFlag(NSEventModifierMask.AlternateKeyMask))
                {
                    rv |= InputModifiers.Alt;
                }
                if (mod.HasFlag(NSEventModifierMask.CommandKeyMask))
                {
                    rv |= InputModifiers.Windows;
                }

                if (_isLeftPressed)
                {
                    rv |= InputModifiers.LeftMouseButton;
                }
                if (_isMiddlePressed)
                {
                    rv |= InputModifiers.MiddleMouseButton;
                }
                if (_isRightPressed)
                {
                    rv |= InputModifiers.RightMouseButton;
                }
                return(rv);
            }
Beispiel #8
0
        public override void KeyDown(NSEvent theEvent)
        {
            ModifierFlags = theEvent.ModifierFlags;

            Key key;

            if (MonoMacEnums.TryGetUnoKey((NSKey)theEvent.KeyCode, out key))
            {
                Bootstrapper.OnKeyDown(_unoWindow, key);
            }
            else
            {
                Debug.Log("Unsupported key code: " + theEvent.KeyCode, DebugMessageType.Error);
            }

            if (EnableText && IsTextInputEvent(ModifierFlags))
            {
                var characters = theEvent.Characters.Where(CharacterIsNotSpecial).ToArray();
                if (characters.Length == 0)
                {
                    return;
                }

                Bootstrapper.OnTextInput(_unoWindow, new string (characters));
            }
        }
        public static Keys ToKeys(this NSEventModifierMask mask)
        {
            switch (mask)
            {
            //case NSEventModifierMask.AlphaShiftKeyMask:
            //	return Keys.None;
            case NSEventModifierMask.AlternateKeyMask:
                return(Keys.Alt);

            case NSEventModifierMask.CommandKeyMask:
                return(Keys.LWin | Keys.RWin);

            case NSEventModifierMask.ControlKeyMask:
                return(Keys.Control);

            //case NSEventModifierMask.FunctionKeyMask:
            //	return Keys.None;
            case NSEventModifierMask.HelpKeyMask:
                return(Keys.Help);

            case NSEventModifierMask.ShiftKeyMask:
                return(Keys.Shift);
            }
            return(Keys.None);
        }
        public static NSEventModifierMask SRCarbonToCocoaFlags(uint aCarbonFlags)
        {
            NSEventModifierMask cocoaFlags = 0;

            if ((aCarbonFlags & Constants.cmdKey) == Constants.cmdKey)
            {
                cocoaFlags |= NSEventModifierMask.CommandKeyMask;
            }

            if ((aCarbonFlags & Constants.optionKey) == Constants.optionKey)
            {
                cocoaFlags |= NSEventModifierMask.AlternateKeyMask;
            }

            if ((aCarbonFlags & Constants.controlKey) == Constants.controlKey)
            {
                cocoaFlags |= NSEventModifierMask.ControlKeyMask;
            }

            if ((aCarbonFlags & Constants.shiftKey) == Constants.shiftKey)
            {
                cocoaFlags |= NSEventModifierMask.ShiftKeyMask;
            }

            return(cocoaFlags);
        }
Beispiel #11
0
        public override void MouseEntered(NSEvent a)
        {
            _modifierFlags = a.ModifierFlags;

            //var pos = GetPosition(a);
            //Log.Try(() => Bootstrapper.OnMouseEnter(_unoWindow, (int)pos.X, (int)pos.Y), false);
        }
Beispiel #12
0
        public override void KeyUp(NSEvent theEvent)
        {
            _modifierFlags = theEvent.ModifierFlags;

            theEvent.InterpretAsKeyEvent().Do(
                key => _log.Try(() => Bootstrapper.OnKeyUp(_unoWindow, (Uno.Platform.Key)key), false),
                () => { });
        }
        public static NSDictionary SRShortcutWithCocoaModifierFlagsAndKeyCode(NSEventModifierMask aModifierFlags, ushort aKeyCode)
        {
            var dict = new NSMutableDictionary();

            dict.SetValueForKey(NSObject.FromObject(aKeyCode), Constants.SRShortcutKeyCode);
            dict.SetValueForKey(NSObject.FromObject(aModifierFlags), Constants.SRShortcutModifierFlagsKey);
            return(dict);
        }
Beispiel #14
0
        public override void ScrollWheel(NSEvent a)
        {
            _modifierFlags = a.ModifierFlags;
            var deltaMode = a.HasPreciseScrollingDeltas ? WheelDeltaMode.DeltaPixel : WheelDeltaMode.DeltaLine;

            _modifierFlags = a.ModifierFlags;
            _log.Try(() => Bootstrapper.OnMouseWheel(_unoWindow, (float)a.ScrollingDeltaX, (float)a.ScrollingDeltaY, (int)deltaMode), false);
        }
        public static string GetCharactersForKeyPress(ushort keyCode, NSEventModifierMask modifierFlags, ref uint deadKeyState)
        {
            var keyboard   = TISCopyCurrentKeyboardLayoutInputSource();
            var characters = GetCharactersForKeyPress(keyCode, modifierFlags, ref deadKeyState, keyboard);

            CFRelease(keyboard);
            return(characters);
        }
Beispiel #16
0
        void MouseUpInternal(NSEvent a, Uno.Platform.MouseButton button)
        {
            _modifierFlags = a.ModifierFlags;

            var pos = GetPosition(a);

            _log.Try(() => Bootstrapper.OnMouseUp(_unoWindow, (int)pos.X, (int)pos.Y, button), false);
        }
Beispiel #17
0
 /// <summary>
 /// Initializes a new instance of <see cref="DragDropInfo"/> with the specified settings.
 /// </summary>
 /// <param name="location">The location of the cursor relative to the left top corner of the text view.</param>
 /// <param name="keyStates">The state of the keyboard during the operation.</param>
 /// <param name="data">The <see cref="NSPasteboard"/> of the drag and drop operation.</param>
 /// <param name="isInternal"><c>true</c> if the drag has been initiated from within the editor, otherwise <c>false</c>.</param>
 /// <param name="source">The object that initiated the drag and drop operation.</param>
 /// <param name="allowedEffects">The drag and drop effects allowed by the source.</param>
 /// <param name="bufferPosition">The buffer position of the cursor during the drag and drop operation.</param>
 public DragDropInfo(CGPoint location, NSEventModifierMask keyStates, NSPasteboard data, bool isInternal, object source, NSDragOperation allowedEffects, VirtualSnapshotPoint bufferPosition)
 {
     Location              = location;
     KeyStates             = keyStates;
     Data                  = data;
     IsInternal            = isInternal;
     Source                = source;
     AllowedEffects        = allowedEffects;
     VirtualBufferPosition = bufferPosition;
 }
Beispiel #18
0
 private bool GetKeyInputFromKey(NSEvent theEvent, NSEventModifierMask modifierKeys, out KeyInput keyInput)
 {
     if (!string.IsNullOrEmpty(theEvent.CharactersIgnoringModifiers))
     {
         var keyModifiers = ConvertToKeyModifiers(modifierKeys);
         keyInput = KeyInputUtil.ApplyKeyModifiersToChar(theEvent.CharactersIgnoringModifiers[0], keyModifiers);
         return(true);
     }
     keyInput = null;
     return(false);
 }
Beispiel #19
0
        void MouseMovedInternal(NSEvent a)
        {
            _modifierFlags = a.ModifierFlags;

            // Only send one mouse moved event per frame (ignore the rest)
            // Issue: https://github.com/fusetools/Fuse/issues/2479
            if (_currentFrame != _lastMouseMovedFrame)
            {
                var pos = GetPosition(a);
                _log.Try(() => Bootstrapper.OnMouseMove(_unoWindow, (int)pos.X, (int)pos.Y), false);
                _lastMouseMovedFrame = _currentFrame;
            }
        }
Beispiel #20
0
        public override void KeyDown(NSEvent theEvent)
        {
            _modifierFlags = theEvent.ModifierFlags;
            if (_unoWindow.IsTextInputActive())
            {
                theEvent.InterpretAsTextEvent().Do(
                    text => _log.Try(() => Bootstrapper.OnTextInput(_unoWindow, text), false),
                    () => { });
            }

            theEvent.InterpretAsKeyEvent().Do(
                key => _log.Try(() => Bootstrapper.OnKeyDown(_unoWindow, (Uno.Platform.Key)key), false),
                () => { });
        }
Beispiel #21
0
		static void SetAccel (NSMenuItem item, string accelKey)
		{
			uint modeKey;
			Gdk.ModifierType modeMod;
			uint key;
			Gdk.ModifierType mod;

			if (!KeyBindingManager.BindingToKeys (accelKey, out modeKey, out modeMod, out key, out mod)) {
				item.KeyEquivalent = "";
				item.KeyEquivalentModifierMask = (NSEventModifierMask) 0;
				return;
			}

			if (modeKey != 0) {
				LoggingService.LogWarning ("Mac menu cannot display accelerators with mode keys ({0})", accelKey);
				item.KeyEquivalent = "";
				item.KeyEquivalentModifierMask = (NSEventModifierMask) 0;
				return;
			}

			var keyEq = GetKeyEquivalent ((Gdk.Key) key);
			item.KeyEquivalent = keyEq;
			if (keyEq.Length == 0) {
				item.KeyEquivalentModifierMask = 0;
			}

			NSEventModifierMask outMod = 0;
			if ((mod & Gdk.ModifierType.Mod1Mask) != 0) {
				outMod |= NSEventModifierMask.AlternateKeyMask;
				mod ^= Gdk.ModifierType.Mod1Mask;
			}
			if ((mod & Gdk.ModifierType.ShiftMask) != 0) {
				outMod |= NSEventModifierMask.ShiftKeyMask;
				mod ^= Gdk.ModifierType.ShiftMask;
			}
			if ((mod & Gdk.ModifierType.ControlMask) != 0) {
				outMod |= NSEventModifierMask.ControlKeyMask;
				mod ^= Gdk.ModifierType.ControlMask;
			}
			if ((mod & Gdk.ModifierType.MetaMask) != 0) {
				outMod |= NSEventModifierMask.CommandKeyMask;
				mod ^= Gdk.ModifierType.MetaMask;
			}

			if (mod != 0) {
				LoggingService.LogWarning ("Mac menu cannot display accelerators with modifiers {0}", mod);
			}
			item.KeyEquivalentModifierMask = outMod;
		}
Beispiel #22
0
        public static uint ToWParam(this NSEventModifierMask mask)
        {
            uint wParam = 0;

            if ((mask & NSEventModifierMask.ControlKeyMask) != 0)
            {
                wParam |= (int)MsgButtons.MK_CONTROL;
            }
            if ((mask & NSEventModifierMask.ShiftKeyMask) != 0)
            {
                wParam |= (int)MsgButtons.MK_SHIFT;
            }

            return(wParam);
        }
Beispiel #23
0
 public override void FlagsChanged(NSEvent theEvent)
 {
     foreach (var item in modifiersToKeys)
     {
         if (IsMaskHasFlag(theEvent.ModifierFlags, item.Key))
         {
             input.SetKeyState(item.Value, true);
         }
         else if (IsMaskHasFlag(prevMask, item.Key))
         {
             input.SetKeyState(item.Value, false);
         }
     }
     prevMask = theEvent.ModifierFlags;
 }
Beispiel #24
0
        static uint ModifiersToWParam(NSEventModifierMask modifierFlags)
        {
            uint wParam = 0;

            if ((modifierFlags & NSEventModifierMask.ControlKeyMask) != 0)
            {
                wParam |= (int)MsgButtons.MK_CONTROL;
            }
            if ((modifierFlags & NSEventModifierMask.ShiftKeyMask) != 0)
            {
                wParam |= (int)MsgButtons.MK_SHIFT;
            }

            return(wParam);
        }
Beispiel #25
0
        public override void KeyUp(NSEvent theEvent)
        {
            ModifierFlags = theEvent.ModifierFlags;

            Key key;

            if (MonoMacEnums.TryGetUnoKey((NSKey)theEvent.KeyCode, out key))
            {
                Bootstrapper.OnKeyUp(_unoWindow, key);
            }
            else
            {
                Debug.Log("Unsupported key code: " + theEvent.KeyCode, DebugMessageType.Error);
            }
        }
Beispiel #26
0
        public static Keys MapKey(ushort key, NSEventModifierMask modifiers)
        {
            Keys value;

            if (Map.TryGetValue(key, out value))
            {
                // special case, fn+return is usually interpreted as insert key on macOS, even though it is actually enter.
                if (value == Keys.Enter && modifiers.HasFlag(NSEventModifierMask.FunctionKeyMask))
                {
                    return(Keys.Insert);
                }
                return(value);
            }
            Debug.WriteLine($"Unknown key '{key}'");
            return(Keys.None);
        }
Beispiel #27
0
 private KeyModifiers GetModifiers(NSEventModifierMask mask)
 {
     OpenTK.Input.KeyModifiers modifiers = 0;
     if ((mask & NSEventModifierMask.ControlKeyMask) != 0)
     {
         modifiers |= OpenTK.Input.KeyModifiers.Control;
     }
     if ((mask & NSEventModifierMask.ShiftKeyMask) != 0)
     {
         modifiers |= OpenTK.Input.KeyModifiers.Shift;
     }
     if ((mask & NSEventModifierMask.AlternateKeyMask) != 0)
     {
         modifiers |= OpenTK.Input.KeyModifiers.Alt;
     }
     return(modifiers);
 }
Beispiel #28
0
        void SendCmdKey(IntPtr hwnd, VirtualKeys key, NSEventModifierMask moreModifiers = 0)
        {
            // Emulate (and then restore) only modifiers of not currently pressed keys
            var affected = XplatUICocoa.SetModifiers(NSEventModifierMask.CommandKeyMask | moreModifiers, true);

            if (affected != 0)
            {
                ProcessModifiers(XplatUICocoa.key_modifiers);
            }

            SendKey(hwnd, (IntPtr)key, (IntPtr)0x1080000);

            if (affected != 0)
            {
                XplatUICocoa.SetModifiers(affected, false);
                ProcessModifiers(XplatUICocoa.key_modifiers);
            }
        }
        public bool ShortcutValidator(SRValidator aValidator, ushort aKeyCode, NSEventModifierMask aFlags, out string outReason)
        {
            outReason = string.Empty;

            if (!(FirstResponder is SRRecorderControl recorder))
            {
                return(false);
            }

            var shortcut = CFunctions.SRShortcutWithCocoaModifierFlagsAndKeyCode(aFlags, aKeyCode);

            if (IsTaken(WdgRecorderScanSelect, shortcut) ||
                IsTaken(WdgRecorderScanClick, shortcut))
            {
                outReason = "it's already used. To use this shortcut, first remove or change the other shortcut";
                return(true);
            }

            return(false);
        }
Beispiel #30
0
        void ProcessModifiers(NSEventModifierMask flags)
        {
            var diff = XplatUICocoa.key_modifiers_mask;

            if ((NSEventModifierMask.ShiftKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.ShiftKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_SHIFT, IntPtr.Zero);
            }
            if ((NSEventModifierMask.ControlKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.ControlKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_CONTROL, IntPtr.Zero);
            }
            if ((NSEventModifierMask.AlternateKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.AlternateKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_MENU, IntPtr.Zero);
            }
            if ((NSEventModifierMask.CommandKeyMask & diff) != 0)
            {
                driver.SendMessage(view.Handle, (NSEventModifierMask.CommandKeyMask & flags) != 0 ? Msg.WM_KEYDOWN : Msg.WM_KEYUP, (IntPtr)VirtualKeys.VK_LWIN, IntPtr.Zero);
            }
        }
		public static KeyDescriptor FromMac (char ch, NSEventModifierMask state)
		{
			var specialKey = ConvertKey (ref ch);
			var keyDescriptor = new KeyDescriptor (specialKey, ch, ConvertModifiers (state), state);
			return keyDescriptor;
		}
		static ModifierKeys ConvertModifiers (NSEventModifierMask e)
		{
			var m = ModifierKeys.None;
			if ((e & NSEventModifierMask.ControlKeyMask) != 0)
				m |= ModifierKeys.Control;
			if ((e & NSEventModifierMask.AlternateKeyMask) != 0)
				m |= ModifierKeys.Alt;
			if ((e & NSEventModifierMask.CommandKeyMask) != 0)
				m |= ModifierKeys.Command;
			if ((e & NSEventModifierMask.ShiftKeyMask) != 0)
				m |= ModifierKeys.Shift;
			return m;
		}
Beispiel #33
0
		public static Keys Convert(string keyEquivalent, NSEventModifierMask modifier)
		{
			return Keys.None;
		}
 private KeyModifiers GetModifiers(NSEventModifierMask mask)
 {
     OpenTK.Input.KeyModifiers modifiers = 0;
     if ((mask & NSEventModifierMask.ControlKeyMask) != 0) modifiers |= OpenTK.Input.KeyModifiers.Control;
     if ((mask & NSEventModifierMask.ShiftKeyMask) != 0) modifiers |= OpenTK.Input.KeyModifiers.Shift;
     if ((mask & NSEventModifierMask.AlternateKeyMask) != 0) modifiers |= OpenTK.Input.KeyModifiers.Alt;
     return modifiers;
 }