private void SetAbsoluteModeSettings(AbsoluteOutputMode absoluteMode) { absoluteMode.Output = new Area { Width = Settings.DisplayWidth, Height = Settings.DisplayHeight, Position = new Point { X = Settings.DisplayX, Y = Settings.DisplayY } }; Log.Write("Settings", $"Display area: {absoluteMode.Output}"); absoluteMode.Input = new Area { Width = Settings.TabletWidth, Height = Settings.TabletHeight, Position = new Point { X = Settings.TabletX, Y = Settings.TabletY }, Rotation = Settings.TabletRotation }; Log.Write("Settings", $"Tablet area: {absoluteMode.Input}"); absoluteMode.VirtualScreen = TabletDriverLib.Interop.Platform.VirtualScreen; absoluteMode.AreaClipping = Settings.EnableClipping; Log.Write("Settings", $"Clipping: {(absoluteMode.AreaClipping ? "Enabled" : "Disabled")}"); }
private void SetAbsoluteModeSettings(AbsoluteOutputMode absoluteMode) { absoluteMode.Output = new Area { Width = Settings.DisplayWidth, Height = Settings.DisplayHeight, Position = new Vector2 { X = Settings.DisplayX, Y = Settings.DisplayY } }; Log.Write("Settings", $"Display area: {absoluteMode.Output}"); absoluteMode.Input = new Area { Width = Settings.TabletWidth, Height = Settings.TabletHeight, Position = new Vector2 { X = Settings.TabletX, Y = Settings.TabletY }, Rotation = Settings.TabletRotation }; Log.Write("Settings", $"Tablet area: {absoluteMode.Input}"); absoluteMode.AreaClipping = Settings.EnableClipping; Log.Write("Settings", $"Clipping: {(absoluteMode.AreaClipping ? "Enabled" : "Disabled")}"); absoluteMode.AreaLimiting = Settings.EnableAreaLimiting; Log.Write("Settings", $"Ignoring reports outside area: {(absoluteMode.AreaLimiting ? "Enabled" : "Disabled")}"); }
private void SetBindingHandlerSettings(InputDeviceTree dev, IOutputMode outputMode, BindingSettings settings) { string group = dev.Properties.Name; var bindingHandler = new BindingHandler(outputMode); var bindingServiceProvider = new ServiceManager(); object pointer = outputMode switch { AbsoluteOutputMode absoluteOutputMode => absoluteOutputMode.Pointer, RelativeOutputMode relativeOutputMode => relativeOutputMode.Pointer, _ => null }; if (pointer is IVirtualMouse virtualMouse) { bindingServiceProvider.AddService <IVirtualMouse>(() => virtualMouse); } var tipbinding = bindingHandler.TipBinding = settings.TipButton?.Construct <IBinding>(); bindingServiceProvider.Inject(tipbinding); bindingHandler.TipActivationPressure = settings.TipActivationPressure; Log.Write(group, $"Tip Binding: [{bindingHandler.TipBinding}]@{bindingHandler.TipActivationPressure}%"); var eraserBinding = bindingHandler.EraserBinding = settings.EraserButton?.Construct <IBinding>(); bindingServiceProvider.Inject(eraserBinding); bindingHandler.EraserActivationPressure = settings.EraserActivationPressure; Log.Write(group, $"Eraser Binding: [{bindingHandler.EraserBinding}]@{bindingHandler.EraserActivationPressure}%"); if (settings.PenButtons != null) { for (int index = 0; index < settings.PenButtons.Count; index++) { var bind = settings.PenButtons[index]?.Construct <IBinding>(); if (!bindingHandler.PenButtonBindings.TryAdd(index, bind)) { bindingHandler.PenButtonBindings[index] = bind; bindingServiceProvider.Inject(bind); } } Log.Write(group, $"Pen Bindings: " + string.Join(", ", bindingHandler.PenButtonBindings)); } if (settings.AuxButtons != null) { for (int index = 0; index < settings.AuxButtons.Count; index++) { var bind = settings.AuxButtons[index]?.Construct <IBinding>(); if (!bindingHandler.AuxButtonBindings.TryAdd(index, bind)) { bindingHandler.AuxButtonBindings[index] = bind; bindingServiceProvider.Inject(bind); } } Log.Write(group, $"Express Key Bindings: " + string.Join(", ", bindingHandler.AuxButtonBindings)); } }
private void SetAbsoluteModeSettings(InputDeviceTree dev, AbsoluteOutputMode absoluteMode, AbsoluteModeSettings settings) { string group = dev.Properties.Name; absoluteMode.Output = settings.Display.Area; Log.Write(group, $"Display area: {absoluteMode.Output}"); absoluteMode.Input = settings.Tablet.Area; Log.Write(group, $"Tablet area: {absoluteMode.Input}"); absoluteMode.AreaClipping = settings.EnableClipping; Log.Write(group, $"Clipping: {(absoluteMode.AreaClipping ? "Enabled" : "Disabled")}"); absoluteMode.AreaLimiting = settings.EnableAreaLimiting; Log.Write(group, $"Ignoring reports outside area: {(absoluteMode.AreaLimiting ? "Enabled" : "Disabled")}"); }
public override bool Initialize(GameHost host) { outputMode = new AbsoluteTabletMode(this); host.Window.Resized += () => updateOutputArea(host.Window); AreaOffset.BindValueChanged(_ => updateInputArea(device)); AreaSize.BindValueChanged(_ => updateInputArea(device), true); Rotation.BindValueChanged(_ => updateInputArea(device), true); Enabled.BindValueChanged(d => { if (d.NewValue && tabletDriver == null) { tabletDriver = TabletDriver.Create(); tabletDriver.TabletsChanged += (s, e) => { device = e.Any() ? tabletDriver.InputDevices.First() : null; if (device != null) { device.OutputMode = outputMode; outputMode.Tablet = device.CreateReference(); updateInputArea(device); updateOutputArea(host.Window); } }; tabletDriver.DeviceReported += handleDeviceReported; tabletDriver.Detect(); } else if (!d.NewValue && tabletDriver != null) { tabletDriver.Dispose(); tabletDriver = null; } }, true); return(true); }
private void SetBindingHandlerSettings(InputDeviceTree dev, IOutputMode outputMode, BindingSettings settings, TabletReference tabletReference) { string group = dev.Properties.Name; var bindingHandler = new BindingHandler(outputMode); var bindingServiceProvider = new ServiceManager(); object?pointer = outputMode switch { AbsoluteOutputMode absoluteOutputMode => absoluteOutputMode.Pointer, RelativeOutputMode relativeOutputMode => relativeOutputMode.Pointer, _ => null }; if (pointer is IMouseButtonHandler mouseButtonHandler) { bindingServiceProvider.AddService(() => mouseButtonHandler); } var tip = bindingHandler.Tip = new ThresholdBindingState { Binding = settings.TipButton?.Construct <IBinding>(bindingServiceProvider, tabletReference), ActivationThreshold = settings.TipActivationThreshold }; if (tip.Binding != null) { Log.Write(group, $"Tip Binding: [{tip.Binding}]@{tip.ActivationThreshold}%"); } var eraser = bindingHandler.Eraser = new ThresholdBindingState { Binding = settings.EraserButton?.Construct <IBinding>(bindingServiceProvider, tabletReference), ActivationThreshold = settings.EraserActivationThreshold }; if (eraser.Binding != null) { Log.Write(group, $"Eraser Binding: [{eraser.Binding}]@{eraser.ActivationThreshold}%"); } if (settings.PenButtons != null && settings.PenButtons.Any(b => b?.Path != null)) { SetBindingHandlerCollectionSettings(bindingServiceProvider, settings.PenButtons, bindingHandler.PenButtons, tabletReference); Log.Write(group, $"Pen Bindings: " + string.Join(", ", bindingHandler.PenButtons.Select(b => b.Value?.Binding))); } if (settings.AuxButtons != null && settings.AuxButtons.Any(b => b?.Path != null)) { SetBindingHandlerCollectionSettings(bindingServiceProvider, settings.AuxButtons, bindingHandler.AuxButtons, tabletReference); Log.Write(group, $"Express Key Bindings: " + string.Join(", ", bindingHandler.AuxButtons.Select(b => b.Value?.Binding))); } if (settings.MouseButtons != null && settings.MouseButtons.Any(b => b?.Path != null)) { SetBindingHandlerCollectionSettings(bindingServiceProvider, settings.MouseButtons, bindingHandler.MouseButtons, tabletReference); Log.Write(group, $"Mouse Button Bindings: [" + string.Join("], [", bindingHandler.MouseButtons.Select(b => b.Value?.Binding)) + "]"); } var scrollUp = bindingHandler.MouseScrollUp = new BindingState { Binding = settings.MouseScrollUp?.Construct <IBinding>(bindingServiceProvider, tabletReference) }; var scrollDown = bindingHandler.MouseScrollDown = new BindingState { Binding = settings.MouseScrollDown?.Construct <IBinding>(bindingServiceProvider, tabletReference) }; if (scrollUp.Binding != null || scrollDown.Binding != null) { Log.Write(group, $"Mouse Scroll: Up: [{scrollUp?.Binding}] Down: [{scrollDown?.Binding}]"); } }