mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 00:46:12 +02:00
Add keyboard input support for plugins with key event handling
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
<RectangleGeometry x:Name="rectangleGeometry" RadiusX="{Binding ElementName=border, Path=CornerRadius.TopLeft}" RadiusY="{Binding ElementName=border, Path=CornerRadius.TopLeft}" />
|
||||
</Viewbox.Clip>
|
||||
<Border x:Name="imageBorder" BorderBrush="#BAFFEF">
|
||||
<Image x:Name="image" RenderOptions.EdgeMode="Aliased" Margin="0,0,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" MouseDown="Window_MouseDown" MouseMove="Window_MouseMove" MouseWheel="Window_MouseWheel" />
|
||||
<Image x:Name="image" RenderOptions.EdgeMode="Aliased" Margin="0,0,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" Focusable="True" MouseDown="Image_MouseDown" MouseMove="Image_MouseMove" MouseWheel="Image_MouseWheel" KeyDown="Image_KeyDown" KeyUp="Image_KeyUp" />
|
||||
</Border>
|
||||
</Viewbox>
|
||||
</Grid>
|
||||
|
||||
@@ -939,8 +939,10 @@ public partial class PluginWindow : Window, IPluginWindow
|
||||
tileBar.CaptionHeight = ActualHeight - 10;
|
||||
}
|
||||
|
||||
private void Window_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
private void Image_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
_ = image.Focus();
|
||||
|
||||
ImageSource imageSource = image.Source;
|
||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
||||
@@ -970,7 +972,7 @@ public partial class PluginWindow : Window, IPluginWindow
|
||||
pluginClassInstance?.OnMouseClick(point, mouseButton);
|
||||
}
|
||||
|
||||
private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
|
||||
private void Image_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
|
||||
{
|
||||
ImageSource imageSource = image.Source;
|
||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||
@@ -981,7 +983,7 @@ public partial class PluginWindow : Window, IPluginWindow
|
||||
pluginClassInstance?.OnMouseMove(point);
|
||||
}
|
||||
|
||||
private void Window_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
|
||||
private void Image_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
|
||||
{
|
||||
ImageSource imageSource = image.Source;
|
||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||
@@ -992,5 +994,39 @@ public partial class PluginWindow : Window, IPluginWindow
|
||||
pluginClassInstance?.OnMouseWheel(point, e.Delta);
|
||||
}
|
||||
|
||||
private void Image_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
|
||||
{
|
||||
if (pluginClassInstance is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Keys key = (Keys)e.Key;
|
||||
System.Windows.Input.ModifierKeys modifiers = e.KeyboardDevice.Modifiers;
|
||||
bool alt = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Alt);
|
||||
bool control = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Control);
|
||||
bool shift = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Shift);
|
||||
bool windows = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Windows);
|
||||
|
||||
pluginClassInstance.OnKeyDown(new KeyEventArgs(key, alt, control, shift, windows));
|
||||
}
|
||||
|
||||
private void Image_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
|
||||
{
|
||||
if (pluginClassInstance is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Keys key = (Keys)e.Key;
|
||||
System.Windows.Input.ModifierKeys modifiers = e.KeyboardDevice.Modifiers;
|
||||
bool alt = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Alt);
|
||||
bool control = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Control);
|
||||
bool shift = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Shift);
|
||||
bool windows = modifiers.HasFlag(System.Windows.Input.ModifierKeys.Windows);
|
||||
|
||||
pluginClassInstance.OnKeyUp(new KeyEventArgs(key, alt, control, shift, windows));
|
||||
}
|
||||
|
||||
#endregion Window Events
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
|
||||
namespace DesktopMagic.Api;
|
||||
|
||||
/// <summary>
|
||||
/// Provides data for keyboard events.
|
||||
/// </summary>
|
||||
public class KeyEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The key that was pressed or released.
|
||||
/// </summary>
|
||||
public Keys Key { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the Alt modifier was pressed.
|
||||
/// </summary>
|
||||
public bool Alt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the Control modifier was pressed.
|
||||
/// </summary>
|
||||
public bool Control { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the Shift modifier was pressed.
|
||||
/// </summary>
|
||||
public bool Shift { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the Windows logo key was pressed.
|
||||
/// </summary>
|
||||
public bool Windows { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="KeyEventArgs"/> class.
|
||||
/// </summary>
|
||||
public KeyEventArgs(Keys key, bool alt, bool control, bool shift, bool windows)
|
||||
{
|
||||
Key = key;
|
||||
Alt = alt;
|
||||
Control = control;
|
||||
Shift = shift;
|
||||
Windows = windows;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
namespace DesktopMagic.Api;
|
||||
|
||||
/// <summary>
|
||||
/// Defines keyboard keys available for plugin input handling.
|
||||
/// Values match <c>System.Windows.Input.Key</c> for direct casting.
|
||||
/// </summary>
|
||||
public enum Keys
|
||||
{
|
||||
None = 0,
|
||||
Cancel = 1,
|
||||
Back = 2,
|
||||
Tab = 3,
|
||||
LineFeed = 4,
|
||||
Clear = 5,
|
||||
Return = 6,
|
||||
Enter = 6,
|
||||
ShiftKey = 16,
|
||||
ControlKey = 17,
|
||||
AltKey = 18,
|
||||
Pause = 19,
|
||||
CapsLock = 20,
|
||||
Escape = 27,
|
||||
Space = 32,
|
||||
PageUp = 33,
|
||||
PageDown = 34,
|
||||
End = 35,
|
||||
Home = 36,
|
||||
Left = 37,
|
||||
Up = 38,
|
||||
Right = 39,
|
||||
Down = 40,
|
||||
Select = 41,
|
||||
Print = 42,
|
||||
Execute = 43,
|
||||
PrintScreen = 44,
|
||||
Insert = 45,
|
||||
Delete = 46,
|
||||
Help = 47,
|
||||
D0 = 48,
|
||||
D1 = 49,
|
||||
D2 = 50,
|
||||
D3 = 51,
|
||||
D4 = 52,
|
||||
D5 = 53,
|
||||
D6 = 54,
|
||||
D7 = 55,
|
||||
D8 = 56,
|
||||
D9 = 57,
|
||||
A = 65,
|
||||
B = 66,
|
||||
C = 67,
|
||||
D = 68,
|
||||
E = 69,
|
||||
F = 70,
|
||||
G = 71,
|
||||
H = 72,
|
||||
I = 73,
|
||||
J = 74,
|
||||
K = 75,
|
||||
L = 76,
|
||||
M = 77,
|
||||
N = 78,
|
||||
O = 79,
|
||||
P = 80,
|
||||
Q = 81,
|
||||
R = 82,
|
||||
S = 83,
|
||||
T = 84,
|
||||
U = 85,
|
||||
V = 86,
|
||||
W = 87,
|
||||
X = 88,
|
||||
Y = 89,
|
||||
Z = 90,
|
||||
LWin = 91,
|
||||
RWin = 92,
|
||||
Apps = 93,
|
||||
Sleep = 95,
|
||||
NumPad0 = 96,
|
||||
NumPad1 = 97,
|
||||
NumPad2 = 98,
|
||||
NumPad3 = 99,
|
||||
NumPad4 = 100,
|
||||
NumPad5 = 101,
|
||||
NumPad6 = 102,
|
||||
NumPad7 = 103,
|
||||
NumPad8 = 104,
|
||||
NumPad9 = 105,
|
||||
Multiply = 106,
|
||||
Add = 107,
|
||||
Separator = 108,
|
||||
Subtract = 109,
|
||||
Decimal = 110,
|
||||
Divide = 111,
|
||||
F1 = 112,
|
||||
F2 = 113,
|
||||
F3 = 114,
|
||||
F4 = 115,
|
||||
F5 = 116,
|
||||
F6 = 117,
|
||||
F7 = 118,
|
||||
F8 = 119,
|
||||
F9 = 120,
|
||||
F10 = 121,
|
||||
F11 = 122,
|
||||
F12 = 123,
|
||||
F13 = 124,
|
||||
F14 = 125,
|
||||
F15 = 126,
|
||||
F16 = 127,
|
||||
F17 = 128,
|
||||
F18 = 129,
|
||||
F19 = 130,
|
||||
F20 = 131,
|
||||
F21 = 132,
|
||||
F22 = 133,
|
||||
F23 = 134,
|
||||
F24 = 135,
|
||||
NumLock = 144,
|
||||
Scroll = 145,
|
||||
LeftShift = 160,
|
||||
RightShift = 161,
|
||||
LeftCtrl = 162,
|
||||
RightCtrl = 163,
|
||||
LeftAlt = 164,
|
||||
RightAlt = 165,
|
||||
BrowserBack = 166,
|
||||
BrowserForward = 167,
|
||||
BrowserRefresh = 168,
|
||||
BrowserStop = 169,
|
||||
BrowserSearch = 170,
|
||||
BrowserFavorites = 171,
|
||||
BrowserHome = 172,
|
||||
VolumeMute = 173,
|
||||
VolumeDown = 174,
|
||||
VolumeUp = 175,
|
||||
MediaNextTrack = 176,
|
||||
MediaPreviousTrack = 177,
|
||||
MediaStop = 178,
|
||||
MediaPlayPause = 179,
|
||||
LaunchMail = 180,
|
||||
SelectMedia = 181,
|
||||
LaunchApplication1 = 182,
|
||||
LaunchApplication2 = 183,
|
||||
OemSemicolon = 186,
|
||||
OemPlus = 187,
|
||||
OemComma = 188,
|
||||
OemMinus = 189,
|
||||
OemPeriod = 190,
|
||||
OemQuestion = 191,
|
||||
OemTilde = 192,
|
||||
OemOpenBrackets = 219,
|
||||
OemPipe = 220,
|
||||
OemCloseBrackets = 221,
|
||||
OemQuotes = 222,
|
||||
Oem8 = 223,
|
||||
OemBackslash = 226,
|
||||
}
|
||||
@@ -99,6 +99,22 @@ public abstract class Plugin
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a key is pressed while the plugin window has keyboard focus.
|
||||
/// </summary>
|
||||
/// <param name="e">The key event data.</param>
|
||||
public virtual void OnKeyDown(KeyEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a key is released while the plugin window has keyboard focus.
|
||||
/// </summary>
|
||||
/// <param name="e">The key event data.</param>
|
||||
public virtual void OnKeyUp(KeyEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the application's theme has changed.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user