Browse Source

Fixed initial pointerover at (0, 0) when window is just shown

pull/4899/head
Nikita Tsukanov 6 years ago
parent
commit
fb7b7a002c
  1. 20
      src/Avalonia.Input/MouseDevice.cs

20
src/Avalonia.Input/MouseDevice.cs

@ -19,6 +19,7 @@ namespace Avalonia.Input
private readonly Pointer _pointer; private readonly Pointer _pointer;
private bool _disposed; private bool _disposed;
private PixelPoint? _position;
public MouseDevice(Pointer? pointer = null) public MouseDevice(Pointer? pointer = null)
{ {
@ -39,10 +40,11 @@ namespace Avalonia.Input
/// <summary> /// <summary>
/// Gets the mouse position, in screen coordinates. /// Gets the mouse position, in screen coordinates.
/// </summary> /// </summary>
[Obsolete("Use events instead")]
public PixelPoint Position public PixelPoint Position
{ {
get; get => _position ?? new PixelPoint(-1, -1);
protected set; protected set => _position = value;
} }
/// <summary> /// <summary>
@ -91,7 +93,16 @@ namespace Avalonia.Input
public void SceneInvalidated(IInputRoot root, Rect rect) public void SceneInvalidated(IInputRoot root, Rect rect)
{ {
var clientPoint = root.PointToClient(Position); // Pointer is outside of the target area
if (_position == null )
{
if (root.PointerOverElement != null)
ClearPointerOver(this, 0, root, PointerPointProperties.None, KeyModifiers.None);
return;
}
var clientPoint = root.PointToClient(_position.Value);
if (rect.Contains(clientPoint)) if (rect.Contains(clientPoint))
{ {
@ -132,7 +143,7 @@ namespace Avalonia.Input
if(mouse._disposed) if(mouse._disposed)
return; return;
Position = e.Root.PointToScreen(e.Position); _position = e.Root.PointToScreen(e.Position);
var props = CreateProperties(e); var props = CreateProperties(e);
var keyModifiers = KeyModifiersUtils.ConvertToKey(e.InputModifiers); var keyModifiers = KeyModifiersUtils.ConvertToKey(e.InputModifiers);
switch (e.Type) switch (e.Type)
@ -176,6 +187,7 @@ namespace Avalonia.Input
device = device ?? throw new ArgumentNullException(nameof(device)); device = device ?? throw new ArgumentNullException(nameof(device));
root = root ?? throw new ArgumentNullException(nameof(root)); root = root ?? throw new ArgumentNullException(nameof(root));
_position = null;
ClearPointerOver(this, timestamp, root, properties, inputModifiers); ClearPointerOver(this, timestamp, root, properties, inputModifiers);
} }

Loading…
Cancel
Save