Browse Source

Merge pull request #3101 from AvaloniaUI/obsolete-mousebutton

Added InitialPressMouseButton to PointerReleasedEventArgs
pull/3107/head
danwalmsley 7 years ago
committed by GitHub
parent
commit
5167cd9d53
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
  2. 2
      src/Avalonia.Controls/Button.cs
  3. 2
      src/Avalonia.Controls/Calendar/Calendar.cs
  4. 2
      src/Avalonia.Controls/Calendar/CalendarButton.cs
  5. 2
      src/Avalonia.Controls/Calendar/CalendarDayButton.cs
  6. 2
      src/Avalonia.Controls/ContextMenu.cs
  7. 4
      src/Avalonia.Controls/MenuItem.cs
  8. 2
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
  9. 4
      src/Avalonia.Controls/RepeatButton.cs
  10. 2
      src/Avalonia.Controls/TabControl.cs
  11. 2
      src/Avalonia.Controls/Utils/SelectingItemsControlSelectionAdapter.cs
  12. 2
      src/Avalonia.Input/Gestures.cs
  13. 5
      src/Avalonia.Input/MouseDevice.cs
  14. 29
      src/Avalonia.Input/PointerEventArgs.cs
  15. 25
      src/Avalonia.Input/PointerPoint.cs
  16. 2
      src/Avalonia.Input/TouchDevice.cs
  17. 4
      tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs
  18. 3
      tests/Avalonia.UnitTests/MouseTestHelper.cs

2
src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs

@ -468,7 +468,7 @@ namespace Avalonia.Controls
private void DataGridColumnHeader_PointerReleased(object sender, PointerReleasedEventArgs e) private void DataGridColumnHeader_PointerReleased(object sender, PointerReleasedEventArgs e)
{ {
if (OwningColumn == null || e.Handled || !IsEnabled || e.MouseButton != MouseButton.Left) if (OwningColumn == null || e.Handled || !IsEnabled || e.InitialPressMouseButton != MouseButton.Left)
{ {
return; return;
} }

2
src/Avalonia.Controls/Button.cs

@ -294,7 +294,7 @@ namespace Avalonia.Controls
{ {
base.OnPointerReleased(e); base.OnPointerReleased(e);
if (IsPressed && e.MouseButton == MouseButton.Left) if (IsPressed && e.InitialPressMouseButton == MouseButton.Left)
{ {
IsPressed = false; IsPressed = false;
e.Handled = true; e.Handled = true;

2
src/Avalonia.Controls/Calendar/Calendar.cs

@ -1565,7 +1565,7 @@ namespace Avalonia.Controls
protected override void OnPointerReleased(PointerReleasedEventArgs e) protected override void OnPointerReleased(PointerReleasedEventArgs e)
{ {
base.OnPointerReleased(e); base.OnPointerReleased(e);
if (!HasFocusInternal && e.MouseButton == MouseButton.Left) if (!HasFocusInternal && e.InitialPressMouseButton == MouseButton.Left)
{ {
FocusManager.Instance.Focus(this); FocusManager.Instance.Focus(this);
} }

2
src/Avalonia.Controls/Calendar/CalendarButton.cs

@ -173,7 +173,7 @@ namespace Avalonia.Controls.Primitives
protected override void OnPointerReleased(PointerReleasedEventArgs e) protected override void OnPointerReleased(PointerReleasedEventArgs e)
{ {
base.OnPointerReleased(e); base.OnPointerReleased(e);
if (e.MouseButton == MouseButton.Left) if (e.InitialPressMouseButton == MouseButton.Left)
CalendarLeftMouseButtonUp?.Invoke(this, e); CalendarLeftMouseButtonUp?.Invoke(this, e);
} }
} }

2
src/Avalonia.Controls/Calendar/CalendarDayButton.cs

@ -231,7 +231,7 @@ namespace Avalonia.Controls.Primitives
{ {
base.OnPointerReleased(e); base.OnPointerReleased(e);
if (e.MouseButton == MouseButton.Left) if (e.InitialPressMouseButton == MouseButton.Left)
CalendarDayButtonMouseUp?.Invoke(this, e); CalendarDayButtonMouseUp?.Invoke(this, e);
} }
} }

2
src/Avalonia.Controls/ContextMenu.cs

@ -192,7 +192,7 @@ namespace Avalonia.Controls
e.Handled = true; e.Handled = true;
} }
if (e.MouseButton == MouseButton.Right) if (e.InitialPressMouseButton == MouseButton.Right)
{ {
if (contextMenu.CancelOpening()) if (contextMenu.CancelOpening())
return; return;

4
src/Avalonia.Controls/MenuItem.cs

@ -337,7 +337,7 @@ namespace Avalonia.Controls
{ {
base.OnPointerEnter(e); base.OnPointerEnter(e);
var point = e.GetPointerPoint(null); var point = e.GetCurrentPoint(null);
RaiseEvent(new PointerEventArgs(PointerEnterItemEvent, this, e.Pointer, this.VisualRoot, point.Position, RaiseEvent(new PointerEventArgs(PointerEnterItemEvent, this, e.Pointer, this.VisualRoot, point.Position,
e.Timestamp, point.Properties, e.KeyModifiers)); e.Timestamp, point.Properties, e.KeyModifiers));
} }
@ -347,7 +347,7 @@ namespace Avalonia.Controls
{ {
base.OnPointerLeave(e); base.OnPointerLeave(e);
var point = e.GetPointerPoint(null); var point = e.GetCurrentPoint(null);
RaiseEvent(new PointerEventArgs(PointerLeaveItemEvent, this, e.Pointer, this.VisualRoot, point.Position, RaiseEvent(new PointerEventArgs(PointerLeaveItemEvent, this, e.Pointer, this.VisualRoot, point.Position,
e.Timestamp, point.Properties, e.KeyModifiers)); e.Timestamp, point.Properties, e.KeyModifiers));
} }

2
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

@ -356,7 +356,7 @@ namespace Avalonia.Controls.Platform
{ {
var item = GetMenuItem(e.Source as IControl); var item = GetMenuItem(e.Source as IControl);
if (e.MouseButton == MouseButton.Left && item?.HasSubMenu == false) if (e.InitialPressMouseButton == MouseButton.Left && item?.HasSubMenu == false)
{ {
Click(item); Click(item);
e.Handled = true; e.Handled = true;

4
src/Avalonia.Controls/RepeatButton.cs

@ -98,10 +98,10 @@ namespace Avalonia.Controls
{ {
base.OnPointerReleased(e); base.OnPointerReleased(e);
if (e.MouseButton == MouseButton.Left) if (e.InitialPressMouseButton == MouseButton.Left)
{ {
StopTimer(); StopTimer();
} }
} }
} }
} }

2
src/Avalonia.Controls/TabControl.cs

@ -196,7 +196,7 @@ namespace Avalonia.Controls
protected override void OnPointerReleased(PointerReleasedEventArgs e) protected override void OnPointerReleased(PointerReleasedEventArgs e)
{ {
if (e.MouseButton == MouseButton.Left && e.Pointer.Type != PointerType.Mouse) if (e.InitialPressMouseButton == MouseButton.Left && e.Pointer.Type != PointerType.Mouse)
{ {
var container = GetContainerFromEventSource(e.Source); var container = GetContainerFromEventSource(e.Source);
if (container != null if (container != null

2
src/Avalonia.Controls/Utils/SelectingItemsControlSelectionAdapter.cs

@ -178,7 +178,7 @@ namespace Avalonia.Controls.Utils
/// <param name="e">The event data.</param> /// <param name="e">The event data.</param>
private void OnSelectorPointerReleased(object sender, PointerReleasedEventArgs e) private void OnSelectorPointerReleased(object sender, PointerReleasedEventArgs e)
{ {
if (e.MouseButton == MouseButton.Left) if (e.InitialPressMouseButton == MouseButton.Left)
{ {
OnCommit(); OnCommit();
} }

2
src/Avalonia.Input/Gestures.cs

@ -97,7 +97,7 @@ namespace Avalonia.Input
if (s_lastPress.TryGetTarget(out var target) && target == e.Source) if (s_lastPress.TryGetTarget(out var target) && target == e.Source)
{ {
var et = e.MouseButton != MouseButton.Right ? TappedEvent : RightTappedEvent; var et = e.InitialPressMouseButton != MouseButton.Right ? TappedEvent : RightTappedEvent;
e.Source.RaiseEvent(new RoutedEventArgs(et)); e.Source.RaiseEvent(new RoutedEventArgs(et));
} }
} }

5
src/Avalonia.Input/MouseDevice.cs

@ -221,7 +221,7 @@ namespace Avalonia.Input
_lastClickTime = timestamp; _lastClickTime = timestamp;
_lastClickRect = new Rect(p, new Size()) _lastClickRect = new Rect(p, new Size())
.Inflate(new Thickness(settings.DoubleClickSize.Width / 2, settings.DoubleClickSize.Height / 2)); .Inflate(new Thickness(settings.DoubleClickSize.Width / 2, settings.DoubleClickSize.Height / 2));
_lastMouseDownButton = properties.GetObsoleteMouseButton(); _lastMouseDownButton = properties.PointerUpdateKind.GetMouseButton();
var e = new PointerPressedEventArgs(source, _pointer, root, p, timestamp, properties, inputModifiers, _clickCount); var e = new PointerPressedEventArgs(source, _pointer, root, p, timestamp, properties, inputModifiers, _clickCount);
source.RaiseEvent(e); source.RaiseEvent(e);
return e.Handled; return e.Handled;
@ -267,7 +267,8 @@ namespace Avalonia.Input
if (hit != null) if (hit != null)
{ {
var source = GetSource(hit); var source = GetSource(hit);
var e = new PointerReleasedEventArgs(source, _pointer, root, p, timestamp, props, inputModifiers); var e = new PointerReleasedEventArgs(source, _pointer, root, p, timestamp, props, inputModifiers,
_lastMouseDownButton);
source?.RaiseEvent(e); source?.RaiseEvent(e);
_pointer.Capture(null); _pointer.Capture(null);

29
src/Avalonia.Input/PointerEventArgs.cs

@ -88,9 +88,20 @@ namespace Avalonia.Input
return _rootVisualPosition * _rootVisual.TransformToVisual(relativeTo) ?? default; return _rootVisualPosition * _rootVisual.TransformToVisual(relativeTo) ?? default;
} }
public PointerPoint GetPointerPoint(IVisual relativeTo) [Obsolete("Use GetCurrentPoint")]
public PointerPoint GetPointerPoint(IVisual relativeTo) => GetCurrentPoint(relativeTo);
/// <summary>
/// Returns the PointerPoint associated with the current event
/// </summary>
/// <param name="relativeTo">The visual which coordinate system to use. Pass null for toplevel coordinate system</param>
/// <returns></returns>
public PointerPoint GetCurrentPoint(IVisual relativeTo)
=> new PointerPoint(Pointer, GetPosition(relativeTo), _properties); => new PointerPoint(Pointer, GetPosition(relativeTo), _properties);
/// <summary>
/// Returns the current pointer point properties
/// </summary>
protected PointerPointProperties Properties => _properties; protected PointerPointProperties Properties => _properties;
} }
@ -124,7 +135,7 @@ namespace Avalonia.Input
public int ClickCount => _obsoleteClickCount; public int ClickCount => _obsoleteClickCount;
[Obsolete("Use PointerUpdateKind")] [Obsolete("Use PointerUpdateKind")]
public MouseButton MouseButton => Properties.GetObsoleteMouseButton(); public MouseButton MouseButton => Properties.PointerUpdateKind.GetMouseButton();
} }
public class PointerReleasedEventArgs : PointerEventArgs public class PointerReleasedEventArgs : PointerEventArgs
@ -132,15 +143,21 @@ namespace Avalonia.Input
public PointerReleasedEventArgs( public PointerReleasedEventArgs(
IInteractive source, IPointer pointer, IInteractive source, IPointer pointer,
IVisual rootVisual, Point rootVisualPosition, ulong timestamp, IVisual rootVisual, Point rootVisualPosition, ulong timestamp,
PointerPointProperties properties, KeyModifiers modifiers) PointerPointProperties properties, KeyModifiers modifiers,
MouseButton initialPressMouseButton)
: base(InputElement.PointerReleasedEvent, source, pointer, rootVisual, rootVisualPosition, : base(InputElement.PointerReleasedEvent, source, pointer, rootVisual, rootVisualPosition,
timestamp, properties, modifiers) timestamp, properties, modifiers)
{ {
InitialPressMouseButton = initialPressMouseButton;
} }
[Obsolete("Use PointerUpdateKind")] /// <summary>
public MouseButton MouseButton => Properties.GetObsoleteMouseButton(); /// Gets the mouse button that triggered the corresponding PointerPressed event
/// </summary>
public MouseButton InitialPressMouseButton { get; }
[Obsolete("Either use GetCurrentPoint(this).Properties.PointerUpdateKind or InitialPressMouseButton, see https://github.com/AvaloniaUI/Avalonia/wiki/Pointer-events-in-0.9 for more details", true)]
public MouseButton MouseButton => InitialPressMouseButton;
} }
public class PointerCaptureLostEventArgs : RoutedEventArgs public class PointerCaptureLostEventArgs : RoutedEventArgs

25
src/Avalonia.Input/PointerPoint.cs

@ -49,17 +49,6 @@ namespace Avalonia.Input
} }
public static PointerPointProperties None { get; } = new PointerPointProperties(); public static PointerPointProperties None { get; } = new PointerPointProperties();
public MouseButton GetObsoleteMouseButton()
{
if (PointerUpdateKind == PointerUpdateKind.LeftButtonPressed || PointerUpdateKind == PointerUpdateKind.LeftButtonReleased)
return MouseButton.Left;
if (PointerUpdateKind == PointerUpdateKind.MiddleButtonPressed || PointerUpdateKind == PointerUpdateKind.MiddleButtonReleased)
return MouseButton.Middle;
if (PointerUpdateKind == PointerUpdateKind.RightButtonPressed || PointerUpdateKind == PointerUpdateKind.RightButtonReleased)
return MouseButton.Right;
return MouseButton.None;
}
} }
public enum PointerUpdateKind public enum PointerUpdateKind
@ -72,4 +61,18 @@ namespace Avalonia.Input
RightButtonReleased, RightButtonReleased,
Other Other
} }
public static class PointerUpdateKindExtensions
{
public static MouseButton GetMouseButton(this PointerUpdateKind kind)
{
if (kind == PointerUpdateKind.LeftButtonPressed || kind == PointerUpdateKind.LeftButtonReleased)
return MouseButton.Left;
if (kind == PointerUpdateKind.MiddleButtonPressed || kind == PointerUpdateKind.MiddleButtonReleased)
return MouseButton.Middle;
if (kind == PointerUpdateKind.RightButtonPressed || kind == PointerUpdateKind.RightButtonReleased)
return MouseButton.Right;
return MouseButton.None;
}
}
} }

2
src/Avalonia.Input/TouchDevice.cs

@ -60,7 +60,7 @@ namespace Avalonia.Input
args.Root, args.Position, ev.Timestamp, args.Root, args.Position, ev.Timestamp,
new PointerPointProperties(GetModifiers(args.InputModifiers, false), new PointerPointProperties(GetModifiers(args.InputModifiers, false),
PointerUpdateKind.LeftButtonReleased), PointerUpdateKind.LeftButtonReleased),
GetKeyModifiers(args.InputModifiers))); GetKeyModifiers(args.InputModifiers), MouseButton.Left));
} }
} }

4
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

@ -18,7 +18,9 @@ namespace Avalonia.Controls.UnitTests.Platform
default); default);
static PointerReleasedEventArgs CreateReleased(IInteractive source) => new PointerReleasedEventArgs(source, static PointerReleasedEventArgs CreateReleased(IInteractive source) => new PointerReleasedEventArgs(source,
new FakePointer(), (IVisual)source, default,0, new PointerPointProperties(RawInputModifiers.None, PointerUpdateKind.LeftButtonReleased), default); new FakePointer(), (IVisual)source, default,0,
new PointerPointProperties(RawInputModifiers.None, PointerUpdateKind.LeftButtonReleased),
default, MouseButton.Left);
public class TopLevel public class TopLevel
{ {

3
tests/Avalonia.UnitTests/MouseTestHelper.cs

@ -86,8 +86,7 @@ namespace Avalonia.UnitTests
{ {
_pointer.Capture(null); _pointer.Capture(null);
target.RaiseEvent(new PointerReleasedEventArgs(source, _pointer, (IVisual)target, position, target.RaiseEvent(new PointerReleasedEventArgs(source, _pointer, (IVisual)target, position,
Timestamp(), props, Timestamp(), props, GetModifiers(modifiers), _pressedButton));
GetModifiers(modifiers)));
} }
else else
Move(target, source, position); Move(target, source, position);

Loading…
Cancel
Save