Example #1
0
        private void HandleTouch(IntPtr ev, LibInputEventType type)
        {
            var tev = libinput_event_get_touch_event(ev);

            if (tev == IntPtr.Zero)
            {
                return;
            }
            if (type < LibInputEventType.LIBINPUT_EVENT_TOUCH_FRAME)
            {
                var   info = _screen.ScaledSize;
                var   slot = libinput_event_touch_get_slot(tev);
                Point pt;

                if (type == LibInputEventType.LIBINPUT_EVENT_TOUCH_DOWN ||
                    type == LibInputEventType.LIBINPUT_EVENT_TOUCH_MOTION)
                {
                    var x = libinput_event_touch_get_x_transformed(tev, (int)info.Width);
                    var y = libinput_event_touch_get_y_transformed(tev, (int)info.Height);
                    pt = new Point(x, y);
                    _pointers[slot] = pt;
                }
                else
                {
                    _pointers.TryGetValue(slot, out pt);
                    _pointers.Remove(slot);
                }

                var ts = libinput_event_touch_get_time_usec(tev) / 1000;
                if (_inputRoot == null)
                {
                    return;
                }
                ScheduleInput(new RawTouchEventArgs(_touch, ts,
                                                    _inputRoot,
                                                    type == LibInputEventType.LIBINPUT_EVENT_TOUCH_DOWN ? RawPointerEventType.TouchBegin
                    : type == LibInputEventType.LIBINPUT_EVENT_TOUCH_UP ? RawPointerEventType.TouchEnd
                    : type == LibInputEventType.LIBINPUT_EVENT_TOUCH_MOTION ? RawPointerEventType.TouchUpdate
                    : RawPointerEventType.TouchCancel,
                                                    pt, RawInputModifiers.None, slot));
            }
        }
Example #2
0
        private void HandlePointer(IntPtr ev, LibInputEventType type)
        {
            //TODO: support input modifiers
            var pev  = libinput_event_get_pointer_event(ev);
            var info = _screen.ScaledSize;
            var ts   = libinput_event_pointer_get_time_usec(pev) / 1000;

            if (type == LibInputEventType.LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE)
            {
                _mousePosition = new Point(libinput_event_pointer_get_absolute_x_transformed(pev, (int)info.Width),
                                           libinput_event_pointer_get_absolute_y_transformed(pev, (int)info.Height));
                ScheduleInput(new RawPointerEventArgs(_mouse, ts, _inputRoot, RawPointerEventType.Move, _mousePosition,
                                                      RawInputModifiers.None));
            }
            else if (type == LibInputEventType.LIBINPUT_EVENT_POINTER_BUTTON)
            {
                var button      = (EvKey)libinput_event_pointer_get_button(pev);
                var buttonState = libinput_event_pointer_get_button_state(pev);


                var evnt = button == EvKey.BTN_LEFT ?
                           (buttonState == 1 ? RawPointerEventType.LeftButtonDown : RawPointerEventType.LeftButtonUp) :
                           button == EvKey.BTN_MIDDLE ?
                           (buttonState == 1 ? RawPointerEventType.MiddleButtonDown : RawPointerEventType.MiddleButtonUp) :
                           button == EvKey.BTN_RIGHT ?
                           (buttonState == 1 ?
                            RawPointerEventType.RightButtonDown :
                            RawPointerEventType.RightButtonUp) :
                           (RawPointerEventType)(-1);
                if (evnt == (RawPointerEventType)(-1))
                {
                    return;
                }


                ScheduleInput(
                    new RawPointerEventArgs(_mouse, ts, _inputRoot, evnt, _mousePosition, RawInputModifiers.None));
            }
        }