diff --git a/src/Avalonia.Base/EnumExtensions.cs b/src/Avalonia.Base/EnumExtensions.cs
new file mode 100644
index 0000000000..a8306c2d69
--- /dev/null
+++ b/src/Avalonia.Base/EnumExtensions.cs
@@ -0,0 +1,23 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System;
+using System.Runtime.CompilerServices;
+
+namespace Avalonia
+{
+ ///
+ /// Provides extension methods for enums.
+ ///
+ public static class EnumExtensions
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static unsafe bool HasFlagCustom(this T value, T flag) where T : unmanaged, Enum
+ {
+ var intValue = *(int*)&value;
+ var intFlag = *(int*)&flag;
+
+ return (intValue & intFlag) == intFlag;
+ }
+ }
+}
diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs
index e8c3177ec5..6a733356b8 100644
--- a/src/Windows/Avalonia.Win32/WindowImpl.cs
+++ b/src/Windows/Avalonia.Win32/WindowImpl.cs
@@ -646,9 +646,9 @@ namespace Avalonia.Win32
{
Input?.Invoke(new RawTouchEventArgs(_touchDevice, touchInput.Time,
_owner,
- touchInput.Flags.HasFlag(TouchInputFlags.TOUCHEVENTF_UP) ?
+ touchInput.Flags.HasFlagCustom(TouchInputFlags.TOUCHEVENTF_UP) ?
RawPointerEventType.TouchEnd :
- touchInput.Flags.HasFlag(TouchInputFlags.TOUCHEVENTF_DOWN) ?
+ touchInput.Flags.HasFlagCustom(TouchInputFlags.TOUCHEVENTF_DOWN) ?
RawPointerEventType.TouchBegin :
RawPointerEventType.TouchUpdate,
PointToClient(new PixelPoint(touchInput.X / 100, touchInput.Y / 100)),
@@ -768,11 +768,11 @@ namespace Avalonia.Win32
{
var keys = (UnmanagedMethods.ModifierKeys)ToInt32(wParam);
var modifiers = WindowsKeyboardDevice.Instance.Modifiers;
- if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_LBUTTON))
+ if (keys.HasFlagCustom(UnmanagedMethods.ModifierKeys.MK_LBUTTON))
modifiers |= RawInputModifiers.LeftMouseButton;
- if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_RBUTTON))
+ if (keys.HasFlagCustom(UnmanagedMethods.ModifierKeys.MK_RBUTTON))
modifiers |= RawInputModifiers.RightMouseButton;
- if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_MBUTTON))
+ if (keys.HasFlagCustom(UnmanagedMethods.ModifierKeys.MK_MBUTTON))
modifiers |= RawInputModifiers.MiddleMouseButton;
return modifiers;
}
@@ -782,7 +782,7 @@ namespace Avalonia.Win32
// Ensure that the delegate doesn't get garbage collected by storing it as a field.
_wndProcDelegate = new UnmanagedMethods.WndProc(WndProc);
- _className = "Avalonia-" + Guid.NewGuid();
+ _className = $"Avalonia-{Guid.NewGuid().ToString()}";
UnmanagedMethods.WNDCLASSEX wndClassEx = new UnmanagedMethods.WNDCLASSEX
{