Example #1
0
 private void SendKeyUpdate(KeySym keysym, bool pressed)
 {
     if (this.client != null && this.AllowInput)
     {
         this.client.SendKeyEvent(keysym, pressed);
     }
 }
Example #2
0
 public static int XLookupString(ref XKeyEvent event_struct, byte[] buf, out KeySym keysym, IntPtr status)
 {
     unsafe
     {
         fixed(byte *p = buf)
         {
             return(XLookupString(ref event_struct, (IntPtr)p, buf.Length, out keysym, status));
         }
     }
 }
Example #3
0
        protected virtual void RfbKbdAddEventHook(byte down, KeySym keySym, IntPtr cl)
        {
            RfbClientRecPtr client = new RfbClientRecPtr(cl, false);

            this.logger.LogInformation($"Pressed button {keySym}");

            this.keyboard?.HandleKeyEvent(
                this,
                new KeyChangedEventArgs(
                    keysym: keySym,
                    pressed: down == 1));
        }
Example #4
0
        public void SendKeyEvent(KeySym keysym, bool pressed)
        {
            var p = new byte[8];

            p[0] = (byte)4;
            p[1] = (byte)(pressed ? 1 : 0);
            VncUtility.EncodeUInt32BE(p, 4, (uint)keysym);

            if (this.IsConnected)
            {
                this.c.Send(p);
            }
        }
Example #5
0
        /// <summary>
        /// Converts a <see cref="KeySym"/> value to its <see cref="char"/> equivalent.
        /// </summary>
        /// <param name="key">
        /// The <see cref="KeySym"/> value to convert.
        /// </param>
        /// <returns>
        /// The equivalent <see cref="char"/> value.
        /// </returns>
        public static char ToChar(KeySym key)
        {
            if (key >= KeySym.Space && key <= KeySym.AsciiTilde)
            {
                return((char)(byte)key);
            }

            // Unicode values have the 0x1000000 flag set
            if (((uint)key & 0x1000000) == 0x1000000)
            {
                return((char)((ushort)key & 0xFFFF));
            }

            throw new ArgumentOutOfRangeException(nameof(key));
        }
Example #6
0
 public static bool IsPrivateKeypadKey(KeySym keysym) => (keysym >= (KeySym)(0x11000000)) && (keysym <= (KeySym)(0x1100FFFF));
Example #7
0
 public static bool IsKeypadKey(KeySym keysym) => (keysym >= (KeySym)(XK_KP_Space)) && (keysym <= (KeySym)(XK_KP_Equal));
Example #8
0
 /// <summary>
 /// Determines whether a <see cref="KeySym"/> value represents an ASCII character.
 /// </summary>
 /// <param name="key">
 /// The <see cref="KeySym"/> key for which to determine whether it is an ASCII character.
 /// </param>
 /// <returns>
 /// <see langword="true"/> if <paramref name="key"/> represents an ASCII character;
 /// otherwise, <see langword="false"/>.
 /// </returns>
 public static bool IsAscii(KeySym key)
 {
     return(key >= KeySym.Space && key <= KeySym.AsciiTilde);
 }
Example #9
0
 public static bool IsModifierKey(KeySym keysym) => ((keysym >= (KeySym)(XK_Shift_L)) && (keysym <= (KeySym)(XK_Hyper_R))) || ((keysym >= (KeySym)(XK_ISO_Lock)) && (keysym <= (KeySym)(XK_ISO_Level5_Lock))) || (keysym == (KeySym)(XK_Mode_switch)) || (keysym == (KeySym)(XK_Num_Lock));
Example #10
0
 public static bool IsFunctionKey(KeySym keysym) => (keysym >= (KeySym)(XK_F1)) && (keysym <= (KeySym)(XK_F35));
Example #11
0
 public static extern KeyCode XKeysymToKeycode(IntPtr display, KeySym keysym);
Example #12
0
 public static extern uint XKeysymToKeycode(Display display, KeySym keysym);
Example #13
0
 public static extern KeyCode XKeysymToKeycode(IntPtr display, KeySym keysym);
Example #14
0
 public static extern string XKeysymToString(KeySym keysym);
Example #15
0
        /// <summary>A
        /// Callback function for mouse updates.
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">EventArgs</param>
        public void OnKeyboardUpdate(object sender, KeyChangedEventArgs e)
        {
            KeySym newState = e.Keysym;

            /* 키보드 모든 키 */
            if (e.Pressed)
            {
                switch (newState)
                {
                // 상수 : bvk파라메터

                case KeySym.A:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.B:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.C:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.E:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.G:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.H:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.I:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.J:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.K:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.L:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.M:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.N:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.O:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.P:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Q:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.R:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.S:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.T:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.U:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.V:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.W:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.X:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Y:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Z:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.a:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.b:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.c:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.d:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.e:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.f:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.g:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.h:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.i:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.j:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.k:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.l:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.m:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.n:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.o:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.p:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.q:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.r:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.s:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.t:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.u:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.v:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.w:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.x:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.y:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.z:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Backspace:
                    User32.Keybd_event(8, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Tab:
                    User32.Keybd_event(9, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.LineFeed:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Clear:
                    User32.Keybd_event(12, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Return:
                    User32.Keybd_event(13, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Pause:
                    User32.Keybd_event(19, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ScrollLock:
                    User32.Keybd_event(145, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.SysReq:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Escape:
                    User32.Keybd_event(27, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Delete:
                    User32.Keybd_event(46, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Home:
                    User32.Keybd_event(36, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Left:
                    User32.Keybd_event(37, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Up:
                    User32.Keybd_event(38, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Right:
                    User32.Keybd_event(39, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Down:
                    User32.Keybd_event(40, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.PageUp:
                    User32.Keybd_event(33, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.PageDown:
                    User32.Keybd_event(34, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.End:
                    User32.Keybd_event(35, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Begin:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Select:
                    User32.Keybd_event(41, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Print:
                    User32.Keybd_event(44, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Execute:
                    User32.Keybd_event(43, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Insert:
                    User32.Keybd_event(45, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Undo:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Redo:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Menu:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Find:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Cancel:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Help:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Break:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ModeSwitch:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Num_Lock:
                    User32.Keybd_event(144, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadSpace:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadTab:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadEnter:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadF1:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadF2:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadF3:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadF4:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadHome:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadUp:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadRight:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadDown:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadPageUp:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadPageDown:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadEnd:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadBegin:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadInsert:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadDelete:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadEqual:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadMultiply:
                    User32.Keybd_event(106, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadAdd:
                    User32.Keybd_event(107, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadSeparator:
                    User32.Keybd_event(108, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadSubtract:
                    User32.Keybd_event(109, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadDecimal:
                    User32.Keybd_event(110, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPadDivide:
                    User32.Keybd_event(111, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad0:
                    User32.Keybd_event(96, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad1:
                    User32.Keybd_event(97, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad2:
                    User32.Keybd_event(98, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad3:
                    User32.Keybd_event(99, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad4:
                    User32.Keybd_event(100, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad5:
                    User32.Keybd_event(101, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad6:
                    User32.Keybd_event(102, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad7:
                    User32.Keybd_event(103, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad8:
                    User32.Keybd_event(104, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumPad9:
                    User32.Keybd_event(105, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F1:
                    User32.Keybd_event(112, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F2:
                    User32.Keybd_event(113, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F3:
                    User32.Keybd_event(114, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F4:
                    User32.Keybd_event(115, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F5:
                    User32.Keybd_event(116, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F6:
                    User32.Keybd_event(117, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F7:
                    User32.Keybd_event(118, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F8:
                    User32.Keybd_event(119, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F9:
                    User32.Keybd_event(120, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F10:
                    User32.Keybd_event(121, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F11:
                    User32.Keybd_event(122, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F12:
                    User32.Keybd_event(123, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F13:
                    User32.Keybd_event(124, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F14:
                    User32.Keybd_event(125, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F15:
                    User32.Keybd_event(126, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F16:
                    User32.Keybd_event(127, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F17:
                    User32.Keybd_event(128, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F18:
                    User32.Keybd_event(129, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F19:
                    User32.Keybd_event(130, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F20:
                    User32.Keybd_event(131, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F21:
                    User32.Keybd_event(132, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F22:
                    User32.Keybd_event(133, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F23:
                    User32.Keybd_event(134, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.F24:
                    User32.Keybd_event(135, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ShiftLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ShiftRight:         // 왼쪽 쉬프트
                    User32.Keybd_event(16, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ControlLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ControlRight:       // 왼쪽 컨트롤
                    User32.Keybd_event(17, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.CapsLock:
                    User32.Keybd_event(20, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.ShiftLock:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.MetaLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.MetaRight:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.AltLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.AltRight:
                    User32.Keybd_event(18, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.SuperLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.SuperRight:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.HyperLeft:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.HyperRight:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Space:
                    User32.Keybd_event(32, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Exclamation:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Quote:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.NumberSign:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Dollar:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Percent:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Ampersand:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Apostrophe:
                    User32.Keybd_event(222, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Plus:
                    User32.Keybd_event(187, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Comma:
                    User32.Keybd_event(188, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Minus:
                    User32.Keybd_event(189, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Period:
                    User32.Keybd_event(190, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Slash:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D0:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D1:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D2:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D3:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D4:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D5:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D6:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D7:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D8:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.D9:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Colon:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Semicolon:
                    User32.Keybd_event(186, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Less:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Equal:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Greater:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Question:
                    User32.Keybd_event(191, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.At:
                    User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Hangul:
                    User32.Keybd_event(21, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Hanja:
                    User32.Keybd_event(25, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.AsciiTilde:     //물결표시
                    User32.Keybd_event(192, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.BracketLeft:    //대괄호 열기
                    User32.Keybd_event(219, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Bracketright:     //대괄호 닫기
                    User32.Keybd_event(221, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;

                case KeySym.Backslash:        //역슬래시
                    User32.Keybd_event(220, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0);
                    break;
                }
            }
            else
            {
                switch (newState)    //keyup
                {
                case KeySym.ShiftRight:
                    User32.Keybd_event(16, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0);
                    break;

                case KeySym.ControlRight:
                    User32.Keybd_event(17, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0);
                    break;

                case KeySym.AltRight:
                    User32.Keybd_event(18, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0);
                    break;

                case KeySym.CapsLock:
                    User32.Keybd_event(20, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0);
                    break;
                }
            }
        }
Example #16
0
 public static bool IsCursorKey(KeySym keysym) => (keysym >= (KeySym)(XK_Home)) && (keysym < (KeySym)(XK_Select));
Example #17
0
 public static bool IsPFKey(KeySym keysym) => (keysym >= (KeySym)(XK_KP_F1)) && (keysym <= (KeySym)(XK_KP_F4));
        public RCode HandleSystemEvent()
        {
            while (Xlib.XPending(display) > 0)
            {
                Xlib.XNextEvent(display, ev);
                XAnyEvent xevent = Marshal.PtrToStructure <XAnyEvent>(ev);

                switch (xevent.type)
                {
                case (int)Event.ClientMessage:
                    XClientMessageEvent xClientMessageEvent = Marshal.PtrToStructure <XClientMessageEvent>(ev);
                    if (xClientMessageEvent.data == (IntPtr)deleteWindowMessage)
                    {
                        PixelGameEngine.Instance.Terminate();
                    }
                    break;

                case (int)Event.KeyPress:
                case (int)Event.KeyRelease:
                    XKeyEvent xKeyEvent = Marshal.PtrToStructure <XKeyEvent>(ev);
                    KeySym    sym       = XlibExt.XLookupKeysym(new XKeyEvent[] { xKeyEvent }, 0);
                    pge.Input.UpdateKeyState((int)mapKeys[(long)sym], xevent.type == (int)Event.KeyPress);
                    break;

                case (int)Event.ButtonPress:
                case (int)Event.ButtonRelease:
                    XButtonEvent xButtonEvent = Marshal.PtrToStructure <XButtonEvent>(ev);
                    bool         pressed      = xevent.type == (int)Event.ButtonPress;

                    switch (xButtonEvent.button)
                    {
                    case 1:
                    case 2:
                    case 3:
                        pge.Input.UpdateMouseState((int)xButtonEvent.button - 1, pressed);
                        break;

                    case 4:
                        pge.Input.UpdateMouseWheel(120);
                        break;

                    case 5:
                        pge.Input.UpdateMouseWheel(-120);
                        break;

                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        pge.Input.UpdateMouseState((int)xButtonEvent.button - 3, pressed);
                        break;
                    }
                    break;

                case (int)Event.MotionNotify:
                    XMotionEvent xMotionEvent = Marshal.PtrToStructure <XMotionEvent>(ev);
                    pge.Input.UpdateMouse(xMotionEvent.x, xMotionEvent.y);
                    break;

                case (int)Event.EnterNotify:
                    pge.Input.UpdateMouseFocus(true);
                    break;

                case (int)Event.LeaveNotify:
                    pge.Input.UpdateMouseFocus(false);
                    break;

                case (int)Event.FocusIn:
                    pge.Input.UpdateKeyFocus(true);
                    break;

                case (int)Event.FocusOut:
                    pge.Input.UpdateKeyFocus(false);
                    break;
                }
            }
            return(RCode.OK);
        }
Example #19
0
 public static bool IsMiscFunctionKey(KeySym keysym) => (keysym >= (KeySym)(XK_Select)) && (keysym <= (KeySym)(XK_Break));
Example #20
0
        private static Key NoesisKey(KeySym k)
        {
            switch (k)
            {
            case KeySym.XK_Cancel: return(Key.Cancel);

            case KeySym.XK_BackSpace: return(Key.Back);

            case KeySym.XK_Tab: return(Key.Tab);

            case KeySym.XK_Linefeed: return(Key.LineFeed);

            case KeySym.XK_Clear: return(Key.Clear);

            case KeySym.XK_Return: return(Key.Return);

            case KeySym.XK_Pause: return(Key.Pause);

            case KeySym.XK_Caps_Lock: return(Key.CapsLock);

            case KeySym.XK_Escape: return(Key.Escape);

            case KeySym.XK_space: return(Key.Space);

            case KeySym.XK_Page_Up: return(Key.PageUp);

            case KeySym.XK_Page_Down: return(Key.PageDown);

            case KeySym.XK_End: return(Key.End);

            case KeySym.XK_Home: return(Key.Home);

            case KeySym.XK_Left: return(Key.Left);

            case KeySym.XK_Up: return(Key.Up);

            case KeySym.XK_Right: return(Key.Right);

            case KeySym.XK_Down: return(Key.Down);

            case KeySym.XK_Select: return(Key.Select);

            case KeySym.XK_Execute: return(Key.Execute);

            case KeySym.XK_Print: return(Key.PrintScreen);

            case KeySym.XK_Insert: return(Key.Insert);

            case KeySym.XK_Delete: return(Key.Delete);

            case KeySym.XK_Help: return(Key.Help);

            case KeySym.XK_0: return(Key.D0);

            case KeySym.XK_1: return(Key.D1);

            case KeySym.XK_2: return(Key.D2);

            case KeySym.XK_3: return(Key.D3);

            case KeySym.XK_4: return(Key.D4);

            case KeySym.XK_5: return(Key.D5);

            case KeySym.XK_6: return(Key.D6);

            case KeySym.XK_7: return(Key.D7);

            case KeySym.XK_8: return(Key.D8);

            case KeySym.XK_9: return(Key.D9);

            case KeySym.XK_a: return(Key.A);

            case KeySym.XK_b: return(Key.B);

            case KeySym.XK_c: return(Key.C);

            case KeySym.XK_d: return(Key.D);

            case KeySym.XK_e: return(Key.E);

            case KeySym.XK_f: return(Key.F);

            case KeySym.XK_g: return(Key.G);

            case KeySym.XK_h: return(Key.H);

            case KeySym.XK_i: return(Key.I);

            case KeySym.XK_j: return(Key.J);

            case KeySym.XK_k: return(Key.K);

            case KeySym.XK_l: return(Key.L);

            case KeySym.XK_m: return(Key.M);

            case KeySym.XK_n: return(Key.N);

            case KeySym.XK_o: return(Key.O);

            case KeySym.XK_p: return(Key.P);

            case KeySym.XK_q: return(Key.Q);

            case KeySym.XK_r: return(Key.R);

            case KeySym.XK_s: return(Key.S);

            case KeySym.XK_t: return(Key.T);

            case KeySym.XK_u: return(Key.U);

            case KeySym.XK_v: return(Key.V);

            case KeySym.XK_w: return(Key.W);

            case KeySym.XK_x: return(Key.X);

            case KeySym.XK_y: return(Key.Y);

            case KeySym.XK_z: return(Key.Z);

            case KeySym.XK_KP_0: return(Key.NumPad0);

            case KeySym.XK_KP_1: return(Key.NumPad1);

            case KeySym.XK_KP_2: return(Key.NumPad2);

            case KeySym.XK_KP_3: return(Key.NumPad3);

            case KeySym.XK_KP_4: return(Key.NumPad4);

            case KeySym.XK_KP_5: return(Key.NumPad5);

            case KeySym.XK_KP_6: return(Key.NumPad6);

            case KeySym.XK_KP_7: return(Key.NumPad7);

            case KeySym.XK_KP_8: return(Key.NumPad8);

            case KeySym.XK_KP_9: return(Key.NumPad9);

            case KeySym.XK_KP_Multiply: return(Key.Multiply);

            case KeySym.XK_KP_Add: return(Key.Add);

            case KeySym.XK_KP_Separator: return(Key.Separator);

            case KeySym.XK_KP_Subtract: return(Key.Subtract);

            case KeySym.XK_KP_Decimal: return(Key.Decimal);

            case KeySym.XK_KP_Divide: return(Key.Divide);

            case KeySym.XK_F1: return(Key.F1);

            case KeySym.XK_F2: return(Key.F2);

            case KeySym.XK_F3: return(Key.F3);

            case KeySym.XK_F4: return(Key.F4);

            case KeySym.XK_F5: return(Key.F5);

            case KeySym.XK_F6: return(Key.F6);

            case KeySym.XK_F7: return(Key.F7);

            case KeySym.XK_F8: return(Key.F8);

            case KeySym.XK_F9: return(Key.F9);

            case KeySym.XK_F10: return(Key.F10);

            case KeySym.XK_F11: return(Key.F11);

            case KeySym.XK_F12: return(Key.F12);

            case KeySym.XK_F13: return(Key.F13);

            case KeySym.XK_F14: return(Key.F14);

            case KeySym.XK_F15: return(Key.F15);

            case KeySym.XK_F16: return(Key.F16);

            case KeySym.XK_F17: return(Key.F17);

            case KeySym.XK_F18: return(Key.F18);

            case KeySym.XK_F19: return(Key.F19);

            case KeySym.XK_F20: return(Key.F20);

            case KeySym.XK_F21: return(Key.F21);

            case KeySym.XK_F22: return(Key.F22);

            case KeySym.XK_F23: return(Key.F23);

            case KeySym.XK_F24: return(Key.F24);

            case KeySym.XK_Num_Lock: return(Key.NumLock);

            case KeySym.XK_Scroll_Lock: return(Key.Scroll);

            case KeySym.XK_Shift_L: return(Key.LeftShift);

            case KeySym.XK_Shift_R: return(Key.RightShift);

            case KeySym.XK_Control_L: return(Key.LeftCtrl);

            case KeySym.XK_Control_R: return(Key.RightCtrl);

            case KeySym.XK_Alt_L: return(Key.LeftAlt);

            case KeySym.XK_Alt_R: return(Key.RightAlt);
            }

            return(Key.None);
        }
Example #21
0
 public KeyChangedEventArgs(KeySym keysym, bool pressed)
 {
     this.Keysym  = keysym;
     this.Pressed = pressed;
 }
Example #22
0
        public override void EnterMessageLoop(bool runInBackground)
        {
            IntPtr e       = System.Runtime.InteropServices.Marshal.AllocHGlobal(24 * sizeof(long));
            bool   running = true;

            while (running)
            {
                while (XPending(_display) != 0)
                {
                    XNextEvent(_display, e);

                    if (XFilterEvent(e, IntPtr.Zero))
                    {
                        continue;
                    }

                    XAnyEvent anyEvent = (XAnyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XAnyEvent));

                    switch ((Event)anyEvent.type)
                    {
                    case Event.ClientMessage:
                    {
                        running = false;
                        break;
                    }

                    case Event.ConfigureNotify:
                    {
                        XConfigureEvent configureEvent = (XConfigureEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XConfigureEvent));

                        LocationChanged?.Invoke(this, configureEvent.x, configureEvent.y);
                        SizeChanged?.Invoke(this, configureEvent.width, configureEvent.height);
                        break;
                    }

                    case Event.FocusIn:
                    {
                        Activated?.Invoke(this);
                        break;
                    }

                    case Event.FocusOut:
                    {
                        Deactivated?.Invoke(this);
                        break;
                    }

                    case Event.MotionNotify:
                    {
                        XMotionEvent motionEvent = (XMotionEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XMotionEvent));
                        MouseMove?.Invoke(this, motionEvent.x, motionEvent.y);
                        break;
                    }

                    case Event.ButtonPress:
                    {
                        XButtonEvent buttonEvent = (XButtonEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XButtonEvent));

                        switch ((Button)buttonEvent.button)
                        {
                        case Button.Button1:
                        {
                            MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Left);
                            break;
                        }

                        case Button.Button2:
                        {
                            MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Middle);
                            break;
                        }

                        case Button.Button3:
                        {
                            MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Right);
                            break;
                        }

                        case Button.Button4:
                        {
                            MouseWheel?.Invoke(this, buttonEvent.x, buttonEvent.y, 120);
                            break;
                        }

                        case Button.Button5:
                        {
                            MouseWheel?.Invoke(this, buttonEvent.x, buttonEvent.y, -120);
                            break;
                        }
                        }
                        break;
                    }

                    case Event.ButtonRelease:
                    {
                        XButtonEvent buttonEvent = (XButtonEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XButtonEvent));

                        switch ((Button)buttonEvent.button)
                        {
                        case Button.Button1:
                        {
                            MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Left);
                            break;
                        }

                        case Button.Button2:
                        {
                            MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Middle);
                            break;
                        }

                        case Button.Button3:
                        {
                            MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Right);
                            break;
                        }
                        }
                        break;
                    }

                    case Event.KeyPress:
                    {
                        XKeyEvent keyEvent = (XKeyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XKeyEvent));
                        KeySym    ks       = XLookupKeysym(ref keyEvent, 0);
                        Key       key      = NoesisKey(ks);
                        if (key != Key.None)
                        {
                            KeyDown?.Invoke(this, key);
                        }

                        if (_xic != IntPtr.Zero)
                        {
                            Status status = 0;
                            byte[] buffer = new byte[256];
                            KeySym ret_ks = (KeySym)0;
                            int    size   = Xutf8LookupString(_xic, e, buffer, 255, ref ret_ks, ref status);
                            if (size > 0 && ((int)status == XLookupChars || (int)status == XLookupBoth))
                            {
                                buffer[size] = 0;
                                Decoder decoder   = _utf8.GetDecoder();
                                char[]  text      = new char[256];
                                int     bytesUsed = 0;
                                int     charsUsed = 0;
                                bool    completed = false;
                                decoder.Convert(buffer, 0, size, text, 0, 255, true, out bytesUsed, out charsUsed, out completed);
                                for (int i = 0; i < charsUsed; ++i)
                                {
                                    Char?.Invoke(this, text[i]);
                                }
                            }
                        }
                        break;
                    }

                    case Event.KeyRelease:
                    {
                        XKeyEvent keyEvent = (XKeyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XKeyEvent));
                        KeySym    ks       = XLookupKeysym(ref keyEvent, 0);
                        Key       key      = NoesisKey(ks);
                        if (key != Key.None)
                        {
                            KeyUp?.Invoke(this, key);
                        }
                        break;
                    }
                    }
                }

                Render?.Invoke(this);
            }
            System.Runtime.InteropServices.Marshal.FreeHGlobal(e);
        }
Example #23
0
 public static extern int Xutf8LookupString(IntPtr ic, IntPtr @event, byte[] buffer_return, int bytes_buffer, ref KeySym keysym_return, ref Status status_return);
Example #24
0
 public static extern int XLookupString(ref XKeyEvent event_struct, IntPtr buf, int bytes_buffer, out KeySym keysym, IntPtr status);