Пример #1
0
        public unsafe EvdevVirtualTablet()
        {
            Device = new EvdevDevice("OpenTabletDriver Virtual Artist Tablet");

            Device.EnableType(EventType.INPUT_PROP_DIRECT);
            Device.EnableType(EventType.EV_ABS);

            var xAbs = new input_absinfo
            {
                maximum    = Max,
                resolution = 100
            };
            input_absinfo *xPtr = &xAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_X, (IntPtr)xPtr);

            var yAbs = new input_absinfo
            {
                maximum    = Max,
                resolution = 100
            };
            input_absinfo *yPtr = &yAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_Y, (IntPtr)yPtr);

            var pressure = new input_absinfo
            {
                maximum = MaxPressure
            };
            input_absinfo *pressurePtr = &pressure;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_PRESSURE, (IntPtr)pressurePtr);

            Device.EnableTypeCodes(
                EventType.EV_KEY,
                EventCode.BTN_TOUCH,
                EventCode.BTN_STYLUS,
                EventCode.BTN_TOOL_PEN,
                EventCode.BTN_STYLUS2,
                EventCode.BTN_STYLUS3
                );

            var result = Device.Initialize();

            switch (result)
            {
            case ERRNO.NONE:
                Log.Debug("Evdev", $"Successfully initialized virtual pressure sensitive tablet. (code {result})");
                break;

            default:
                Log.Write("Evdev", $"Failed to initialize virtual pressure sensitive tablet. (error code {result})", LogLevel.Error);
                break;
            }
        }
Пример #2
0
        public EvDevSingleTouchScreen(EvDevDevice device, EvDevTouchScreenDeviceDescription description,
                                      IScreenInfoProvider screenInfo) : base(device)
        {
            if (device.AbsX == null || device.AbsY == null)
            {
                throw new ArgumentException("Device is not a touchscreen");
            }
            _screenInfo = screenInfo;

            _calibration = description.CalibrationMatrix;
            _axisX       = device.AbsX.Value;
            _axisY       = device.AbsY.Value;
        }
        public unsafe EvdevAbsolutePointer()
        {
            Device = new EvdevDevice("OpenTabletDriver Virtual Tablet");

            Device.EnableType(EventType.EV_ABS);

            var xAbs = new input_absinfo
            {
                maximum = (int)DesktopInterop.VirtualScreen.Width
            };
            input_absinfo *xPtr = &xAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_X, (IntPtr)xPtr);

            var yAbs = new input_absinfo
            {
                maximum = (int)DesktopInterop.VirtualScreen.Height
            };
            input_absinfo *yPtr = &yAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_Y, (IntPtr)yPtr);

            Device.EnableTypeCodes(
                EventType.EV_KEY,
                EventCode.BTN_LEFT,
                EventCode.BTN_MIDDLE,
                EventCode.BTN_RIGHT,
                EventCode.BTN_FORWARD,
                EventCode.BTN_BACK);

            var result = Device.Initialize();

            switch (result)
            {
            case ERRNO.NONE:
                Log.Debug("Evdev", $"Successfully initialized virtual tablet. (code {result})");
                break;

            default:
                Log.Write("Evdev", $"Failed to initialize virtual tablet. (error code {result})", LogLevel.Error);
                break;
            }
        }
Пример #4
0
        public unsafe EvdevCursorHandler()
        {
            Device = new EvdevDevice("OpenTabletDriver Virtual Pointer");

            Device.EnableType(EventType.EV_ABS);

            var xAbs = new input_absinfo
            {
                maximum = (int)Platform.VirtualScreen.Width
            };
            input_absinfo *xPtr = &xAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_X, (IntPtr)xPtr);

            var yAbs = new input_absinfo
            {
                maximum = (int)Platform.VirtualScreen.Height
            };
            input_absinfo *yPtr = &yAbs;

            Device.EnableCustomCode(EventType.EV_ABS, EventCode.ABS_Y, (IntPtr)yPtr);

            Device.EnableTypeCodes(
                EventType.EV_KEY,
                EventCode.BTN_LEFT,
                EventCode.BTN_MIDDLE,
                EventCode.BTN_RIGHT,
                EventCode.BTN_FORWARD,
                EventCode.BTN_BACK);

            var result = Device.Initialize();

            if (result != 0)
            {
                Log.Write("Evdev", $"Failed to initialize virtual pointer. (error code {result})", true);
            }
        }
Пример #5
0
 static double TranslateAxis(input_absinfo axis, int value, double max)
 {
     return((value - axis.minimum) / (double)(axis.maximum - axis.minimum) * max);
 }