-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathInputModifiersProvider.cs
124 lines (105 loc) · 4.34 KB
/
InputModifiersProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using Avalonia.Input;
using Godot;
using GdInput = Godot.Input;
using GdKey = Godot.Key;
using GdMouseButton = Godot.MouseButton;
namespace JLeb.Estragonia.Input;
/// <summary>Contains methods to get input modifiers.</summary>
internal static class InputModifiersProvider {
public static RawInputModifiers GetRawInputModifiers(this InputEvent inputEvent) {
var modifiers = RawInputModifiers.None;
if (inputEvent is InputEventWithModifiers inputEventWithModifiers) {
if (inputEventWithModifiers.AltPressed)
modifiers |= RawInputModifiers.Alt;
if (inputEventWithModifiers.CtrlPressed)
modifiers |= RawInputModifiers.Control;
if (inputEventWithModifiers.ShiftPressed)
modifiers |= RawInputModifiers.Shift;
if (inputEventWithModifiers.MetaPressed)
modifiers |= RawInputModifiers.Meta;
if (inputEventWithModifiers is InputEventMouse inputEventMouse) {
var buttonMask = inputEventMouse.ButtonMask;
if ((buttonMask & MouseButtonMask.Left) != 0)
modifiers |= RawInputModifiers.LeftMouseButton;
if ((buttonMask & MouseButtonMask.Right) != 0)
modifiers |= RawInputModifiers.RightMouseButton;
if ((buttonMask & MouseButtonMask.Middle) != 0)
modifiers |= RawInputModifiers.MiddleMouseButton;
if ((buttonMask & MouseButtonMask.MbXbutton1) != 0)
modifiers |= RawInputModifiers.XButton1MouseButton;
if ((buttonMask & MouseButtonMask.MbXbutton2) != 0)
modifiers |= RawInputModifiers.XButton2MouseButton;
if (inputEventMouse is InputEventMouseMotion { PenInverted: true })
modifiers |= RawInputModifiers.PenInverted;
}
else {
if (GdInput.IsMouseButtonPressed(GdMouseButton.Left))
modifiers |= RawInputModifiers.LeftMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Right))
modifiers |= RawInputModifiers.RightMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Middle))
modifiers |= RawInputModifiers.MiddleMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Xbutton1))
modifiers |= RawInputModifiers.XButton1MouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Xbutton2))
modifiers |= RawInputModifiers.XButton2MouseButton;
}
}
else {
modifiers = GetRawInputModifiers();
if (inputEvent is InputEventScreenDrag { PenInverted: true })
modifiers |= RawInputModifiers.PenInverted;
}
return modifiers;
}
public static RawInputModifiers GetRawInputModifiers() {
var modifiers = RawInputModifiers.None;
if (GdInput.IsKeyPressed(GdKey.Alt))
modifiers |= RawInputModifiers.Alt;
if (GdInput.IsKeyPressed(GdKey.Ctrl))
modifiers |= RawInputModifiers.Control;
if (GdInput.IsKeyPressed(GdKey.Shift))
modifiers |= RawInputModifiers.Shift;
if (GdInput.IsKeyPressed(GdKey.Meta))
modifiers |= RawInputModifiers.Meta;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Left))
modifiers |= RawInputModifiers.LeftMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Right))
modifiers |= RawInputModifiers.RightMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Middle))
modifiers |= RawInputModifiers.MiddleMouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Xbutton1))
modifiers |= RawInputModifiers.XButton1MouseButton;
if (GdInput.IsMouseButtonPressed(GdMouseButton.Xbutton2))
modifiers |= RawInputModifiers.XButton2MouseButton;
return modifiers;
}
public static KeyModifiers GetKeyModifiers(this InputEvent inputEvent)
=> inputEvent is InputEventWithModifiers inputEventWithModifiers
? inputEventWithModifiers.GetKeyModifiers()
: GetKeyModifiers();
public static KeyModifiers GetKeyModifiers(this InputEventWithModifiers inputEvent) {
var modifiers = KeyModifiers.None;
if (inputEvent.AltPressed)
modifiers |= KeyModifiers.Alt;
if (inputEvent.CtrlPressed)
modifiers |= KeyModifiers.Control;
if (inputEvent.ShiftPressed)
modifiers |= KeyModifiers.Shift;
if (inputEvent.MetaPressed)
modifiers |= KeyModifiers.Meta;
return modifiers;
}
public static KeyModifiers GetKeyModifiers() {
var modifiers = KeyModifiers.None;
if (GdInput.IsKeyPressed(GdKey.Alt))
modifiers |= KeyModifiers.Alt;
if (GdInput.IsKeyPressed(GdKey.Ctrl))
modifiers |= KeyModifiers.Control;
if (GdInput.IsKeyPressed(GdKey.Shift))
modifiers |= KeyModifiers.Shift;
if (GdInput.IsKeyPressed(GdKey.Meta))
modifiers |= KeyModifiers.Meta;
return modifiers;
}
}