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; } }
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; } }
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); } }
static double TranslateAxis(input_absinfo axis, int value, double max) { return((value - axis.minimum) / (double)(axis.maximum - axis.minimum) * max); }