Exemple #1
0
        private OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            System.Diagnostics.Debug.Assert(evt.EventClass == EventClass.Keyboard);
            MacOSKeyCode code     = (MacOSKeyCode)0;
            char         charCode = '\0';

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                GetCharCodes(inEvent, out code, out charCode);
                mKeyPressArgs.KeyChar = charCode;
                break;
            }

            OpenTK.Input.Key key;
            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyRepeat:
                if (InputDriver.Keyboard[0].KeyRepeat)
                {
                    goto case KeyboardEventKind.RawKeyDown;
                }
                break;

            case KeyboardEventKind.RawKeyDown:
                Keymap.TryGetValue(code, out key);
                // Legacy keyboard API
                InputDriver.Keyboard[0].SetKey(key, (uint)code, true);

                // Raise KeyDown for new keyboard API
                mKeyDownArgs.Key = key;
                KeyDown(this, mKeyDownArgs);

                // Raise KeyPress for new keyboard API
                if (!Char.IsControl(mKeyPressArgs.KeyChar))
                {
                    OnKeyPress(mKeyPressArgs);
                }
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyUp:
                Keymap.TryGetValue(code, out key);
                // Legacy keyboard API
                InputDriver.Keyboard[0].SetKey(key, (uint)code, false);

                // Raise KeyUp for new keyboard API
                mKeyUpArgs.Key = key;
                KeyUp(this, mKeyUpArgs);
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyModifiersChanged:
                ProcessModifierKey(inEvent);
                return(OSStatus.NoError);
            }

            return(OSStatus.EventNotHandled);
        }
Exemple #2
0
 void ProcessKey(MacOSKeyCode code, bool pressed)
 {
     if (pressed)
     {
         ProcessKeyDown(code);
     }
     else
     {
         ProcessKeyUp(code);
     }
 }
        private OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            System.Diagnostics.Debug.Assert(evt.EventClass == EventClass.Keyboard);
            MacOSKeyCode code     = (MacOSKeyCode)0;
            char         charCode = '\0';

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                GetCharCodes(inEvent, out code, out charCode);
                mKeyPressArgs.KeyChar = charCode;
                break;
            }

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyRepeat:
                if (InputDriver.Keyboard[0].KeyRepeat)
                {
                    goto case KeyboardEventKind.RawKeyDown;
                }
                break;

            case KeyboardEventKind.RawKeyDown:
            {
                OpenTK.Input.Key key;
                if (Keymap.TryGetValue(code, out key))
                {
                    InputDriver.Keyboard[0][key] = true;
                    OnKeyPress(mKeyPressArgs);
                }
                return(OSStatus.NoError);
            }

            case KeyboardEventKind.RawKeyUp:
            {
                OpenTK.Input.Key key;
                if (Keymap.TryGetValue(code, out key))
                {
                    InputDriver.Keyboard[0][key] = false;
                }
                return(OSStatus.NoError);
            }

            case KeyboardEventKind.RawKeyModifiersChanged:
                ProcessModifierKey(inEvent);
                return(OSStatus.NoError);
            }

            return(OSStatus.EventNotHandled);
        }
Exemple #4
0
        private OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            MacOSKeyCode code     = MacOSKeyCode.A;
            char         charCode = char.MinValue;

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                CarbonGLNative.GetCharCodes(inEvent, out code, out charCode);
                this.mKeyPressArgs.KeyChar = charCode;
                break;
            }
            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyDown:
                Key index1;
                if (CarbonGLNative.Keymap.TryGetValue(code, out index1))
                {
                    this.InputDriver.Keyboard[0][index1] = true;
                    this.OnKeyPress(this.mKeyPressArgs);
                }
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyRepeat:
                if (!this.InputDriver.Keyboard[0].KeyRepeat)
                {
                    break;
                }
                else
                {
                    goto case KeyboardEventKind.RawKeyDown;
                }

            case KeyboardEventKind.RawKeyUp:
                Key index2;
                if (CarbonGLNative.Keymap.TryGetValue(code, out index2))
                {
                    this.InputDriver.Keyboard[0][index2] = false;
                }
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyModifiersChanged:
                this.ProcessModifierKey(inEvent);
                return(OSStatus.NoError);
            }
            return(OSStatus.EventNotHandled);
        }
Exemple #5
0
        OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            MacOSKeyCode code     = (MacOSKeyCode)0;
            char         charCode = '\0';

            //Debug.Print("Processing Keyboard event {0}", (KeyboardEventKind)evt.EventKind);

            switch ((KeyboardEventKind)evt.EventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                code     = API.GetEventKeyboardKeyCode(inEvent);
                charCode = API.GetEventKeyboardChar(inEvent);
                break;
            }

            Key tkKey;

            if (!Keymap.TryGetValue(code, out tkKey))
            {
                Debug.Print("{0} not mapped, ignoring press.", code);
                return(OSStatus.NoError);
            }

            switch ((KeyboardEventKind)evt.EventKind)
            {
            case KeyboardEventKind.RawKeyRepeat:
                Keyboard.KeyRepeat = true;
                goto case KeyboardEventKind.RawKeyDown;

            case KeyboardEventKind.RawKeyDown:
                Keyboard.Set(tkKey, true);
                RaiseKeyPress(charCode);
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyUp:
                Keyboard.Set(tkKey, false);
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyModifiersChanged:
                ProcessModifierKey(inEvent);
                return(OSStatus.NoError);
            }
            return(OSStatus.EventNotHandled);
        }
Exemple #6
0
        private OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            MacOSKeyCode code     = (MacOSKeyCode)0;
            char         charCode = '\0';

            //Debug.Print("Processing Keyboard event {0}", (KeyboardEventKind)evt.EventKind);

            switch ((KeyboardEventKind)evt.EventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                GetCharCodes(inEvent, out code, out charCode);
                mKeyPressArgs.KeyChar = charCode;
                break;
            }

            if (!Keymap.ContainsKey(code))
            {
                Debug.Print("{0} not mapped, ignoring press.", code);
                return(OSStatus.NoError);
            }

            switch ((KeyboardEventKind)evt.EventKind)
            {
            case KeyboardEventKind.RawKeyRepeat:
                keyboard.KeyRepeat = true;
                goto case KeyboardEventKind.RawKeyDown;

            case KeyboardEventKind.RawKeyDown:
                keyboard[Keymap[code]] = true;
                OnKeyPress(mKeyPressArgs);
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyUp:
                keyboard[Keymap[code]] = false;
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyModifiersChanged:
                ProcessModifierKey(inEvent);
                return(OSStatus.NoError);

            default:
                return(OSStatus.EventNotHandled);
            }
        }
Exemple #7
0
        void ProcessKeyUp(MacOSKeyCode code)
        {
            Key key;

            Keymap.TryGetValue(code, out key);

            // Legacy keyboard API
            KeyboardDevice keyboard = InputDriver.Keyboard[0];

            keyboard.SetKey(key, (uint)code, false);

            // Raise KeyUp for new keyboard API
            mKeyUpArgs.Key         = key;
            mKeyDownArgs.Modifiers = keyboard.GetModifiers();

            KeyUp(this, mKeyUpArgs);
        }
        private OSStatus ProcessKeyboardEvent(IntPtr inCaller, IntPtr inEvent, EventInfo evt, IntPtr userData)
        {
            System.Diagnostics.Debug.Assert(evt.EventClass == EventClass.Keyboard);
            MacOSKeyCode code     = (MacOSKeyCode)0;
            char         charCode = '\0';

            //Debug.Print("Processing keyboard event {0}", evt.KeyboardEventKind);

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyDown:
            case KeyboardEventKind.RawKeyRepeat:
            case KeyboardEventKind.RawKeyUp:
                GetCharCodes(inEvent, out code, out charCode);
                mKeyPressArgs.KeyChar = charCode;
                break;
            }

            switch (evt.KeyboardEventKind)
            {
            case KeyboardEventKind.RawKeyRepeat:
                InputDriver.Keyboard[0].KeyRepeat = true;
                goto case KeyboardEventKind.RawKeyDown;

            case KeyboardEventKind.RawKeyDown:
                OnKeyPress(mKeyPressArgs);
                InputDriver.Keyboard[0][Keymap[code]] = true;
                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyUp:
                InputDriver.Keyboard[0][Keymap[code]] = false;

                return(OSStatus.NoError);

            case KeyboardEventKind.RawKeyModifiersChanged:
                ProcessModifierKey(inEvent);
                return(OSStatus.NoError);

            default:
                return(OSStatus.EventNotHandled);
            }
        }
Exemple #9
0
        void ProcessKeyDown(MacOSKeyCode code)
        {
            Key key;

            Keymap.TryGetValue(code, out key);

            // Legacy keyboard API
            KeyboardDevice keyboard = InputDriver.Keyboard[0];

            keyboard.SetKey(key, (uint)code, true);

            // Raise KeyDown for new keyboard API
            mKeyDownArgs.Key       = key;
            mKeyDownArgs.Modifiers = keyboard.GetModifiers();

            KeyDown(this, mKeyDownArgs);

            // Raise KeyPress for new keyboard API
            if (!Char.IsControl(mKeyPressArgs.KeyChar))
            {
                OnKeyPress(mKeyPressArgs);
            }
        }
Exemple #10
0
 private static void GetCharCodes(IntPtr inEvent, out MacOSKeyCode code, out char charCode)
 {
     code     = API.GetEventKeyboardKeyCode(inEvent);
     charCode = API.GetEventKeyboardChar(inEvent);
 }
        public static Key GetKey(MacOSKeyCode code)
        {
            // comments indicate members of the Key enum that are missing
            switch (code)
            {
                case MacOSKeyCode.A:
                    return Key.A;
                case MacOSKeyCode.OptionAlt:
                    return Key.AltLeft;
                // AltRight
                case MacOSKeyCode.B:
                    return Key.B;
                case MacOSKeyCode.Backslash:
                    return Key.BackSlash;
                case MacOSKeyCode.Backspace:
                    return Key.BackSpace;
                case MacOSKeyCode.BracketLeft:
                    return Key.BracketLeft;
                case MacOSKeyCode.BracketRight:
                    return Key.BracketRight;
                case MacOSKeyCode.C:
                    return Key.C;
                // Capslock
                // Clear
                case MacOSKeyCode.Comma:
                    return Key.Comma;
                case MacOSKeyCode.Control:
                    return Key.ControlLeft;
                // ControlRight
                case MacOSKeyCode.D:
                    return Key.D;
                case MacOSKeyCode.Del:
                    return Key.Delete;
                case MacOSKeyCode.Down:
                    return Key.Down;
                case MacOSKeyCode.E:
                    return Key.E;
                case MacOSKeyCode.End:
                    return Key.End;
                case MacOSKeyCode.Enter:
                    return Key.Enter;
                case MacOSKeyCode.Return:
                    return Key.Enter;
                case MacOSKeyCode.Esc:
                    return Key.Escape;
                case MacOSKeyCode.F:
                    return Key.F;
                case MacOSKeyCode.F1:
                    return Key.F1;
                case MacOSKeyCode.F2:
                    return Key.F2;
                case MacOSKeyCode.F3:
                    return Key.F3;
                case MacOSKeyCode.F4:
                    return Key.F4;
                case MacOSKeyCode.F5:
                    return Key.F5;
                case MacOSKeyCode.F6:
                    return Key.F6;
                case MacOSKeyCode.F7:
                    return Key.F7;
                case MacOSKeyCode.F8:
                    return Key.F8;
                case MacOSKeyCode.F9:
                    return Key.F9;
                case MacOSKeyCode.F10:
                    return Key.F10;
                case MacOSKeyCode.F11:
                    return Key.F11;
                case MacOSKeyCode.F12:
                    return Key.F12;
                case MacOSKeyCode.F13:
                    return Key.F13;
                case MacOSKeyCode.F14:
                    return Key.F14;
                case MacOSKeyCode.F15:
                    return Key.F15;
                // F16-F35
                case MacOSKeyCode.G:
                    return Key.G;
                case MacOSKeyCode.H:
                    return Key.H;
                case MacOSKeyCode.Home:
                    return Key.Home;
                case MacOSKeyCode.I:
                    return Key.I;
                case MacOSKeyCode.Insert:
                    return Key.Insert;
                case MacOSKeyCode.J:
                    return Key.J;
                case MacOSKeyCode.K:
                    return Key.K;
                case MacOSKeyCode.KeyPad_0:
                    return Key.Keypad0;
                case MacOSKeyCode.KeyPad_1:
                    return Key.Keypad1;
                case MacOSKeyCode.KeyPad_2:
                    return Key.Keypad2;
                case MacOSKeyCode.KeyPad_3:
                    return Key.Keypad3;
                case MacOSKeyCode.KeyPad_4:
                    return Key.Keypad4;
                case MacOSKeyCode.KeyPad_5:
                    return Key.Keypad5;
                case MacOSKeyCode.KeyPad_6:
                    return Key.Keypad6;
                case MacOSKeyCode.KeyPad_7:
                    return Key.Keypad7;
                case MacOSKeyCode.KeyPad_8:
                    return Key.Keypad8;
                case MacOSKeyCode.KeyPad_9:
                    return Key.Keypad9;
                case MacOSKeyCode.KeyPad_Add:
                    return Key.KeypadAdd;
                case MacOSKeyCode.KeyPad_Decimal:
                    return Key.KeypadDecimal;
                case MacOSKeyCode.KeyPad_Divide:
                    return Key.KeypadDivide;
                case MacOSKeyCode.KeyPad_Enter:
                    return Key.KeypadEnter;
                case MacOSKeyCode.KeyPad_Multiply:
                    return Key.KeypadMultiply;
                case MacOSKeyCode.KeyPad_Subtract:
                    return Key.KeypadSubtract;
                //case MacOSKeyCode.KeyPad_Equal;
                case MacOSKeyCode.L:
                    return Key.L;
                case MacOSKeyCode.Left:
                    return Key.Left;
                case MacOSKeyCode.M:
                    return Key.M;
                //Key.MaxKeys 
                case MacOSKeyCode.Menu:
                    return Key.Menu;
                case MacOSKeyCode.Minus:
                    return Key.Minus;
                case MacOSKeyCode.N:
                    return Key.N;
                case MacOSKeyCode.Key_0:
                    return Key.Number0;
                case MacOSKeyCode.Key_1:
                    return Key.Number1;
                case MacOSKeyCode.Key_2:
                    return Key.Number2;
                case MacOSKeyCode.Key_3:
                    return Key.Number3;
                case MacOSKeyCode.Key_4:
                    return Key.Number4;
                case MacOSKeyCode.Key_5:
                    return Key.Number5;
                case MacOSKeyCode.Key_6:
                    return Key.Number6;
                case MacOSKeyCode.Key_7:
                    return Key.Number7;
                case MacOSKeyCode.Key_8:
                    return Key.Number8;
                case MacOSKeyCode.Key_9:
                    return Key.Number9;
                // Numlock
                case MacOSKeyCode.O:
                    return Key.O;
                case MacOSKeyCode.P:
                    return Key.P;
                case MacOSKeyCode.Pagedown:
                    return Key.PageDown;
                case MacOSKeyCode.Pageup:
                    return Key.PageUp;
                // Pause
                case MacOSKeyCode.Period:
                    return Key.Period;
                case MacOSKeyCode.Equals:
                    return Key.Plus;
                // PrintScreen
                case MacOSKeyCode.Q:
                    return Key.Q;
                case MacOSKeyCode.Quote:
                    return Key.Quote;
                case MacOSKeyCode.R:
                    return Key.R;
                case MacOSKeyCode.Right:
                    return Key.Right;
                case MacOSKeyCode.S:
                    return Key.S;
                // ScrollLock
                case MacOSKeyCode.Semicolon:
                    return Key.Semicolon;
                case MacOSKeyCode.Shift:
                    return Key.ShiftLeft;
                //Key.ShiftRight 
                case MacOSKeyCode.Slash:
                    return Key.Slash;
                // Key.Sleep
                case MacOSKeyCode.Space:
                    return Key.Space;
                case MacOSKeyCode.T:
                    return Key.T;
                case MacOSKeyCode.Tab:
                    return Key.Tab;
                case MacOSKeyCode.Tilde:
                    return Key.Tilde;
                case MacOSKeyCode.U:
                    return Key.U;
                case MacOSKeyCode.Up:
                    return Key.Up;
                case MacOSKeyCode.V:
                    return Key.V;
                case MacOSKeyCode.W:
                    return Key.W;
                case MacOSKeyCode.Command:
                    return Key.WinLeft;
                // WinKeyRight
                case MacOSKeyCode.X:
                    return Key.X;
                case MacOSKeyCode.Y:
                    return Key.Y;
                case MacOSKeyCode.Z:
                    return Key.Z;

                default:
                    return Key.Unknown;
            }
        }
Exemple #12
0
        void ProcessKeyDown(MacOSKeyCode code)
        {
            Key key;
            Keymap.TryGetValue(code, out key);

            // Legacy keyboard API
            KeyboardDevice keyboard = InputDriver.Keyboard[0];
            keyboard.SetKey(key, (uint)code, true);

            // Raise KeyDown for new keyboard API
            mKeyDownArgs.Key = key;
            mKeyDownArgs.Modifiers = keyboard.GetModifiers();

            KeyDown(this, mKeyDownArgs);

            // Raise KeyPress for new keyboard API
            if (!Char.IsControl(mKeyPressArgs.KeyChar))
            {
                OnKeyPress(mKeyPressArgs);
            }
        }
Exemple #13
0
 private static void GetCharCodes(IntPtr inEvent, out MacOSKeyCode code, out char charCode)
 {
     code = API.GetEventKeyboardKeyCode(inEvent);
     charCode = API.GetEventKeyboardChar(inEvent);
 }
Exemple #14
0
        void ProcessKeyUp(MacOSKeyCode code)
        {
            Key key;
            Keymap.TryGetValue(code, out key);

            // Legacy keyboard API
            KeyboardDevice keyboard = InputDriver.Keyboard[0];
            keyboard.SetKey(key, (uint)code, false);

            // Raise KeyUp for new keyboard API
            mKeyUpArgs.Key = key;
            mKeyDownArgs.Modifiers = keyboard.GetModifiers();

            KeyUp(this, mKeyUpArgs);
        }
Exemple #15
0
 void ProcessKey(MacOSKeyCode code, bool pressed)
 {
     if (pressed)
     {
         ProcessKeyDown(code);
     }
     else
     {
         ProcessKeyUp(code);
     }
 }
Exemple #16
0
        public override void ProcessEvents()
        {
            base.ProcessEvents();

            while (true)
            {
                var e = Cocoa.SendIntPtr(NSApplication.Handle, selNextEventMatchingMask, uint.MaxValue, IntPtr.Zero, NSDefaultRunLoopMode, true);

                if (e == IntPtr.Zero)
                {
                    break;
                }

                var type = (NSEventType)Cocoa.SendInt(e, selType);
                switch (type)
                {
                case NSEventType.KeyDown:
                {
                    MacOSKeyCode keyCode   = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
                    var          isARepeat = Cocoa.SendBool(e, selIsARepeat);
                    Key          key       = MacOSKeyMap.GetKey(keyCode);

                    OnKeyDown(key, isARepeat);

                    var s = Cocoa.FromNSString(Cocoa.SendIntPtr(e, selCharactersIgnoringModifiers));
                    foreach (var c in s)
                    {
                        int intVal = (int)c;
                        if (!Char.IsControl(c) && (intVal < 63232 || intVal > 63235))
                        {
                            // For some reason, arrow keys (mapped 63232-63235)
                            // are seen as non-control characters, so get rid of those.
                            OnKeyPress(c);
                        }
                    }
                }
                break;

                case NSEventType.KeyUp:
                {
                    MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
                    Key          key     = MacOSKeyMap.GetKey(keyCode);
                    OnKeyUp(key);
                }
                break;

                case NSEventType.FlagsChanged:
                {
                    var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
                    UpdateModifierFlags(GetModifiers(modifierFlags));
                }
                break;

                case NSEventType.MouseEntered:
                {
                    var eventTrackingArea = Cocoa.SendIntPtr(e, selTrackingArea);
                    var trackingAreaOwner = Cocoa.SendIntPtr(eventTrackingArea, selOwner);
                    if (trackingAreaOwner == windowInfo.ViewHandle)
                    {
                        if (selectedCursor != MouseCursor.Default)
                        {
                            //SetCursor(selectedCursor);
                        }

                        OnMouseEnter(EventArgs.Empty);
                    }
                }
                break;

                case NSEventType.MouseExited:
                {
                    var eventTrackingArea = Cocoa.SendIntPtr(e, selTrackingArea);
                    var trackingAreaOwner = Cocoa.SendIntPtr(eventTrackingArea, selOwner);
                    if (trackingAreaOwner == windowInfo.ViewHandle)
                    {
                        if (selectedCursor != MouseCursor.Default)
                        {
                            //SetCursor(MouseCursor.Default);
                        }

                        OnMouseLeave(EventArgs.Empty);
                    }
                }
                break;

                case NSEventType.LeftMouseDragged:
                case NSEventType.RightMouseDragged:
                case NSEventType.OtherMouseDragged:
                case NSEventType.MouseMoved:
                {
                    Point p = new Point(MouseState.X, MouseState.Y);
                    if (CursorVisible)
                    {
                        // Use absolute coordinates
                        var pf = Cocoa.SendPoint(e, selLocationInWindowOwner);

                        // Convert from points to pixel coordinates
                        var rf = Cocoa.SendRect(windowInfo.Handle, selConvertRectToBacking,
                                                new RectangleF(pf.X, pf.Y, 0, 0));

                        // See CocoaDrawingGuide under "Converting from Window to View Coordinates"
                        p = new Point(
                            MathHelper.Clamp((int)Math.Round(rf.X), 0, Width),
                            MathHelper.Clamp((int)Math.Round(Height - rf.Y), 0, Height));
                    }
                    else
                    {
                        // Mouse has been disassociated,
                        // use relative coordinates
                        var dx = Cocoa.SendFloat(e, selDeltaX);
                        var dy = Cocoa.SendFloat(e, selDeltaY);

                        p = new Point(
                            MathHelper.Clamp((int)Math.Round(p.X + dx), 0, Width),
                            MathHelper.Clamp((int)Math.Round(p.Y + dy), 0, Height));
                    }

                    // Only raise events when the mouse has actually moved
                    if (MouseState.X != p.X || MouseState.Y != p.Y)
                    {
                        OnMouseMove(p.X, p.Y);
                    }
                }
                break;

                case NSEventType.CursorUpdate:
                    break;

                case NSEventType.ScrollWheel:
                {
                    float dx, dy;
                    if (Cocoa.SendBool(e, selHasPreciseScrollingDeltas))
                    {
                        dx = Cocoa.SendFloat(e, selScrollingDeltaX) * MacOSFactory.ScrollFactor;
                        dy = Cocoa.SendFloat(e, selScrollingDeltaY) * MacOSFactory.ScrollFactor;
                    }
                    else
                    {
                        dx = Cocoa.SendFloat(e, selDeltaX);
                        dy = Cocoa.SendFloat(e, selDeltaY);
                    }

                    // Only raise wheel events when the user has actually scrolled
                    if (dx != 0 || dy != 0)
                    {
                        OnMouseWheel(dx, dy);
                    }
                }
                break;

                case NSEventType.LeftMouseDown:
                case NSEventType.RightMouseDown:
                case NSEventType.OtherMouseDown:
                {
                    var buttonNumber = Cocoa.SendInt(e, selButtonNumber);
                    OnMouseDown(GetMouseButton(buttonNumber));
                }
                break;

                case NSEventType.LeftMouseUp:
                case NSEventType.RightMouseUp:
                case NSEventType.OtherMouseUp:
                {
                    var buttonNumber = Cocoa.SendInt(e, selButtonNumber);
                    OnMouseUp(GetMouseButton(buttonNumber));
                }
                break;
                }

                Cocoa.SendVoid(NSApplication.Handle, selSendEvent, e);
            }

            // Handle closing
            if (shouldClose)
            {
                shouldClose = false;

                // PerformClose is equivalent to pressing the close-button, which
                // does not work in a borderless window. Handle this special case.
                if (GetStyleMask() == NSWindowStyle.Borderless)
                {
                    if (WindowShouldClose(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero))
                    {
                        Cocoa.SendVoid(windowInfo.Handle, selClose);
                    }
                }
                else
                {
                    Cocoa.SendVoid(windowInfo.Handle, selPerformClose, windowInfo.Handle);
                }
            }
        }
Exemple #17
0
        public static Key GetKey(MacOSKeyCode code)
        {
            // comments indicate members of the Key enum that are missing
            switch (code)
            {
            case MacOSKeyCode.A:
                return(Key.A);

            case MacOSKeyCode.OptionAlt:
                return(Key.AltLeft);

            // AltRight
            case MacOSKeyCode.B:
                return(Key.B);

            case MacOSKeyCode.Backslash:
                return(Key.BackSlash);

            case MacOSKeyCode.Backspace:
                return(Key.BackSpace);

            case MacOSKeyCode.BracketLeft:
                return(Key.BracketLeft);

            case MacOSKeyCode.BracketRight:
                return(Key.BracketRight);

            case MacOSKeyCode.C:
                return(Key.C);

            // Capslock
            // Clear
            case MacOSKeyCode.Comma:
                return(Key.Comma);

            case MacOSKeyCode.Control:
                return(Key.ControlLeft);

            // ControlRight
            case MacOSKeyCode.D:
                return(Key.D);

            case MacOSKeyCode.Del:
                return(Key.Delete);

            case MacOSKeyCode.Down:
                return(Key.Down);

            case MacOSKeyCode.E:
                return(Key.E);

            case MacOSKeyCode.End:
                return(Key.End);

            case MacOSKeyCode.Enter:
                return(Key.Enter);

            case MacOSKeyCode.Return:
                return(Key.Enter);

            case MacOSKeyCode.Esc:
                return(Key.Escape);

            case MacOSKeyCode.F:
                return(Key.F);

            case MacOSKeyCode.F1:
                return(Key.F1);

            case MacOSKeyCode.F2:
                return(Key.F2);

            case MacOSKeyCode.F3:
                return(Key.F3);

            case MacOSKeyCode.F4:
                return(Key.F4);

            case MacOSKeyCode.F5:
                return(Key.F5);

            case MacOSKeyCode.F6:
                return(Key.F6);

            case MacOSKeyCode.F7:
                return(Key.F7);

            case MacOSKeyCode.F8:
                return(Key.F8);

            case MacOSKeyCode.F9:
                return(Key.F9);

            case MacOSKeyCode.F10:
                return(Key.F10);

            case MacOSKeyCode.F11:
                return(Key.F11);

            case MacOSKeyCode.F12:
                return(Key.F12);

            case MacOSKeyCode.F13:
                return(Key.F13);

            case MacOSKeyCode.F14:
                return(Key.F14);

            case MacOSKeyCode.F15:
                return(Key.F15);

            // F16-F35
            case MacOSKeyCode.G:
                return(Key.G);

            case MacOSKeyCode.H:
                return(Key.H);

            case MacOSKeyCode.Home:
                return(Key.Home);

            case MacOSKeyCode.I:
                return(Key.I);

            case MacOSKeyCode.Insert:
                return(Key.Insert);

            case MacOSKeyCode.J:
                return(Key.J);

            case MacOSKeyCode.K:
                return(Key.K);

            case MacOSKeyCode.KeyPad_0:
                return(Key.Keypad0);

            case MacOSKeyCode.KeyPad_1:
                return(Key.Keypad1);

            case MacOSKeyCode.KeyPad_2:
                return(Key.Keypad2);

            case MacOSKeyCode.KeyPad_3:
                return(Key.Keypad3);

            case MacOSKeyCode.KeyPad_4:
                return(Key.Keypad4);

            case MacOSKeyCode.KeyPad_5:
                return(Key.Keypad5);

            case MacOSKeyCode.KeyPad_6:
                return(Key.Keypad6);

            case MacOSKeyCode.KeyPad_7:
                return(Key.Keypad7);

            case MacOSKeyCode.KeyPad_8:
                return(Key.Keypad8);

            case MacOSKeyCode.KeyPad_9:
                return(Key.Keypad9);

            case MacOSKeyCode.KeyPad_Add:
                return(Key.KeypadAdd);

            case MacOSKeyCode.KeyPad_Decimal:
                return(Key.KeypadDecimal);

            case MacOSKeyCode.KeyPad_Divide:
                return(Key.KeypadDivide);

            case MacOSKeyCode.KeyPad_Enter:
                return(Key.KeypadEnter);

            case MacOSKeyCode.KeyPad_Multiply:
                return(Key.KeypadMultiply);

            case MacOSKeyCode.KeyPad_Subtract:
                return(Key.KeypadSubtract);

            //case MacOSKeyCode.KeyPad_Equal;
            case MacOSKeyCode.L:
                return(Key.L);

            case MacOSKeyCode.Left:
                return(Key.Left);

            case MacOSKeyCode.M:
                return(Key.M);

            //Key.MaxKeys
            case MacOSKeyCode.Menu:
                return(Key.Menu);

            case MacOSKeyCode.Minus:
                return(Key.Minus);

            case MacOSKeyCode.N:
                return(Key.N);

            case MacOSKeyCode.Key_0:
                return(Key.Number0);

            case MacOSKeyCode.Key_1:
                return(Key.Number1);

            case MacOSKeyCode.Key_2:
                return(Key.Number2);

            case MacOSKeyCode.Key_3:
                return(Key.Number3);

            case MacOSKeyCode.Key_4:
                return(Key.Number4);

            case MacOSKeyCode.Key_5:
                return(Key.Number5);

            case MacOSKeyCode.Key_6:
                return(Key.Number6);

            case MacOSKeyCode.Key_7:
                return(Key.Number7);

            case MacOSKeyCode.Key_8:
                return(Key.Number8);

            case MacOSKeyCode.Key_9:
                return(Key.Number9);

            // Numlock
            case MacOSKeyCode.O:
                return(Key.O);

            case MacOSKeyCode.P:
                return(Key.P);

            case MacOSKeyCode.Pagedown:
                return(Key.PageDown);

            case MacOSKeyCode.Pageup:
                return(Key.PageUp);

            // Pause
            case MacOSKeyCode.Period:
                return(Key.Period);

            case MacOSKeyCode.Equals:
                return(Key.Plus);

            // PrintScreen
            case MacOSKeyCode.Q:
                return(Key.Q);

            case MacOSKeyCode.Quote:
                return(Key.Quote);

            case MacOSKeyCode.R:
                return(Key.R);

            case MacOSKeyCode.Right:
                return(Key.Right);

            case MacOSKeyCode.S:
                return(Key.S);

            // ScrollLock
            case MacOSKeyCode.Semicolon:
                return(Key.Semicolon);

            case MacOSKeyCode.Shift:
                return(Key.ShiftLeft);

            //Key.ShiftRight
            case MacOSKeyCode.Slash:
                return(Key.Slash);

            // Key.Sleep
            case MacOSKeyCode.Space:
                return(Key.Space);

            case MacOSKeyCode.T:
                return(Key.T);

            case MacOSKeyCode.Tab:
                return(Key.Tab);

            case MacOSKeyCode.Tilde:
                return(Key.Tilde);

            case MacOSKeyCode.U:
                return(Key.U);

            case MacOSKeyCode.Up:
                return(Key.Up);

            case MacOSKeyCode.V:
                return(Key.V);

            case MacOSKeyCode.W:
                return(Key.W);

            case MacOSKeyCode.Command:
                return(Key.WinLeft);

            // WinKeyRight
            case MacOSKeyCode.X:
                return(Key.X);

            case MacOSKeyCode.Y:
                return(Key.Y);

            case MacOSKeyCode.Z:
                return(Key.Z);

            default:
                return(Key.Unknown);
            }
        }