private void HandleButtonReleaseEvent(XButtonEvent evt) { buttonStates[evt.button] = false; switch (evt.button) { case 1: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSELUP, 0, 0)); return; case 2: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEMUP, 0, 0)); return; case 3: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSERUP, 0, 0)); return; case 8: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEXUP, 1, 0)); return; case 9: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEXUP, 2, 0)); return; } }
//TODO - button 4 & 5 for scroll private void HandleButtonPressEvent(XButtonEvent evt) { buttonStates[evt.button] = true; switch (evt.button) { case 1: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSELDOWN, 0, 0)); return; case 2: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEMDOWN, 0, 0)); return; case 3: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSERDOWN, 0, 0)); return; case 4: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEYSCROLL, 120, 0)); return; case 5: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEYSCROLL, -120, 0)); return; case 8: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEXDOWN, 1, 0)); return; case 9: OnInputReceived(new ISInputData(ISInputCode.IS_MOUSEXDOWN, 2, 0)); return; } }
private void LeftClickClientWindow(XButtonEvent ev) { Window frame = WindowIndexByClient[ev.window].frame; // Release control of the left button to this application UnsetFocusTrap(ev.window); // Raise and focus it FocusAndRaiseWindow(ev.window); return; }
public void HandleButtonPress(XButtonEvent e, XWindow window, XWindow root, XWindow subwindow) { pointer.Grab(e.window, XEventMask.PointerMotionMask | XEventMask.ButtonReleaseMask); attr = resize_main_win.GetAttributes(); start = e; old_resize_x = resize_win_x; old_resize_y = resize_win_y; }
private void LeftClickTitleBar(XButtonEvent ev) { Window frame; var wg = WindowIndexByTitle[ev.window]; frame = wg.frame; var child = wg.child; FocusAndRaiseWindow(child); Xlib.XGetWindowAttributes(this.display, frame, out var attr); this.MouseMovement = new MouseMovement(MouseMoveType.TitleDrag, ev.x_root, ev.y_root, attr.x, attr.y); return; }
private void LeftClickFrame(XButtonEvent ev) { Xlib.XGetWindowAttributes(this.display, ev.window, out var attr); var control_width = (attr.width / 2) <= 40 ? attr.width / 2 : 40; var control_height = (attr.height / 2) <= 40 ? attr.width / 2 : 40; if (ev.x >= attr.width - control_width) // right side { if (ev.y >= attr.height - control_height) { this.MouseMovement = new MouseMovement(MouseMoveType.BottomRightFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } else if (ev.y <= control_height) { this.MouseMovement = new MouseMovement(MouseMoveType.TopRightFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } else { this.MouseMovement = new MouseMovement(MouseMoveType.RightFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } } else if (ev.x <= control_width) { if (ev.y >= attr.height - control_height) { this.MouseMovement = new MouseMovement(MouseMoveType.BottomLeftFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } else if (ev.y <= control_height) { this.MouseMovement = new MouseMovement(MouseMoveType.TopLeftFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } else { this.MouseMovement = new MouseMovement(MouseMoveType.LeftFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } } else if (ev.y >= attr.height / 2) { this.MouseMovement = new MouseMovement(MouseMoveType.BottomFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } else { this.MouseMovement = new MouseMovement(MouseMoveType.TopFrameDrag, ev.x_root, ev.y_root, attr.x, attr.y); } return; }
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); }
public void HandleButtonRelease(XButtonEvent e, XWindow window, XWindow root, XWindow subwindow) { pointer.Ungrab(); }
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); }
void handleClientButtonEvent(XButtonEvent e, Client c) { }
void handleButtonReleaseEvent(XButtonEvent e, XWindow window, XWindow root, XWindow subwindow) { }
void handleButtonPressEvent(XButtonEvent e, XWindow window, XWindow root, XWindow subwindow) { }
/// <summary> Initializing constructor. </summary> /// <param name="evt"> The event to wrap. <see cref="XButtonEvent"/> </param> public XrwButtonEvent(ref XButtonEvent evt) { Event = evt; }