Browse Source

Pass PointerPressed event to BeginModeDrag and BeginResizeDrag.

pull/3107/head
Jumar Macato 7 years ago
parent
commit
88446b1e9e
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 11
      samples/ControlCatalog/DecoratedWindow.xaml.cs
  2. 13
      src/Avalonia.Controls/Platform/IWindowImpl.cs
  3. 4
      src/Avalonia.Controls/Window.cs
  4. 5
      src/Avalonia.DesignerSupport/Remote/PreviewerWindowImpl.cs
  5. 14
      src/Avalonia.DesignerSupport/Remote/Stubs.cs
  6. 4
      src/Avalonia.Native/WindowImplBase.cs
  7. 12
      src/Avalonia.X11/X11Window.cs
  8. 4
      src/Windows/Avalonia.Win32/WindowImpl.cs

11
samples/ControlCatalog/DecoratedWindow.xaml.cs

@ -18,18 +18,18 @@ namespace ControlCatalog
{
var ctl = this.FindControl<Control>(name);
ctl.Cursor = new Cursor(cursor);
ctl.PointerPressed += delegate
ctl.PointerPressed += (i, e) =>
{
PlatformImpl?.BeginResizeDrag(edge);
PlatformImpl?.BeginResizeDrag(edge, e);
};
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
this.FindControl<Control>("TitleBar").PointerPressed += delegate
this.FindControl<Control>("TitleBar").PointerPressed += (i, e) =>
{
PlatformImpl?.BeginMoveDrag();
PlatformImpl?.BeginMoveDrag(e);
};
SetupSide("Left", StandardCursorType.LeftSide, WindowEdge.West);
SetupSide("Right", StandardCursorType.RightSide, WindowEdge.East);
@ -39,7 +39,8 @@ namespace ControlCatalog
SetupSide("TopRight", StandardCursorType.TopRightCorner, WindowEdge.NorthEast);
SetupSide("BottomLeft", StandardCursorType.BottomLeftCorner, WindowEdge.SouthWest);
SetupSide("BottomRight", StandardCursorType.BottomRightCorner, WindowEdge.SouthEast);
this.FindControl<Button>("MinimizeButton").Click += delegate { this.WindowState = WindowState.Minimized; };
this.FindControl<Button>("MinimizeButton").Click += delegate
{ this.WindowState = WindowState.Minimized; };
this.FindControl<Button>("MaximizeButton").Click += delegate
{
WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;

13
src/Avalonia.Controls/Platform/IWindowImpl.cs

@ -3,6 +3,7 @@
using System;
using Avalonia.Controls;
using Avalonia.Input;
namespace Avalonia.Platform
{
@ -57,28 +58,28 @@ namespace Avalonia.Platform
/// Return true to prevent the underlying implementation from closing.
/// </summary>
Func<bool> Closing { get; set; }
/// <summary>
/// Starts moving a window with left button being held. Should be called from left mouse button press event handler.
/// </summary>
void BeginMoveDrag();
void BeginMoveDrag(PointerPressedEventArgs e);
/// <summary>
/// Starts resizing a window. This function is used if an application has window resizing controls.
/// Should be called from left mouse button press event handler
/// </summary>
void BeginResizeDrag(WindowEdge edge);
void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e);
/// <summary>
/// Sets the client size of the top level.
/// </summary>
void Resize(Size clientSize);
/// <summary>
/// Sets the client size of the top level.
/// </summary>
void Move(PixelPoint point);
/// <summary>
/// Minimum width of the window.
/// </summary>

4
src/Avalonia.Controls/Window.cs

@ -261,13 +261,13 @@ namespace Avalonia.Controls
/// <summary>
/// Starts moving a window with left button being held. Should be called from left mouse button press event handler
/// </summary>
public void BeginMoveDrag() => PlatformImpl?.BeginMoveDrag();
public void BeginMoveDrag(PointerPressedEventArgs e) => PlatformImpl?.BeginMoveDrag(e);
/// <summary>
/// Starts resizing a window. This function is used if an application has window resizing controls.
/// Should be called from left mouse button press event handler
/// </summary>
public void BeginResizeDrag(WindowEdge edge) => PlatformImpl?.BeginResizeDrag(edge);
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e) => PlatformImpl?.BeginResizeDrag(edge, e);
/// <summary>
/// Carries out the arrange pass of the window.

5
src/Avalonia.DesignerSupport/Remote/PreviewerWindowImpl.cs

@ -2,6 +2,7 @@
using System.Reactive.Disposables;
using Avalonia.Controls;
using Avalonia.Controls.Remote.Server;
using Avalonia.Input;
using Avalonia.Platform;
using Avalonia.Remote.Protocol;
using Avalonia.Remote.Protocol.Viewport;
@ -27,11 +28,11 @@ namespace Avalonia.DesignerSupport.Remote
{
}
public void BeginMoveDrag()
public void BeginMoveDrag(PointerPressedEventArgs e)
{
}
public void BeginResizeDrag(WindowEdge edge)
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)
{
}

14
src/Avalonia.DesignerSupport/Remote/Stubs.cs

@ -46,7 +46,7 @@ namespace Avalonia.DesignerSupport.Remote
Resize(size);
}));
}
public IRenderer CreateRenderer(IRenderRoot root) => new ImmediateRenderer(root);
public void Dispose()
{
@ -75,11 +75,11 @@ namespace Avalonia.DesignerSupport.Remote
{
}
public void BeginMoveDrag()
public void BeginMoveDrag(PointerPressedEventArgs e)
{
}
public void BeginResizeDrag(WindowEdge edge)
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)
{
}
@ -93,7 +93,7 @@ namespace Avalonia.DesignerSupport.Remote
public void Move(PixelPoint point)
{
}
public IScreenImpl Screen { get; } = new ScreenStub();
@ -153,7 +153,7 @@ namespace Avalonia.DesignerSupport.Remote
{
public void Save(Stream outputStream)
{
}
}
@ -167,10 +167,10 @@ namespace Avalonia.DesignerSupport.Remote
class SystemDialogsStub : ISystemDialogImpl
{
public Task<string[]> ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent) =>
Task.FromResult((string[]) null);
Task.FromResult((string[])null);
public Task<string> ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) =>
Task.FromResult((string) null);
Task.FromResult((string)null);
}
class ScreenStub : IScreenImpl

4
src/Avalonia.Native/WindowImplBase.cs

@ -301,7 +301,7 @@ namespace Avalonia.Native
_native.Hide();
}
public void BeginMoveDrag()
public void BeginMoveDrag(PointerPressedEventArgs e)
{
_native.BeginMoveDrag();
}
@ -343,7 +343,7 @@ namespace Avalonia.Native
_native.SetMinMaxSize(minSize.ToAvnSize(), maxSize.ToAvnSize());
}
public void BeginResizeDrag(WindowEdge edge)
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)
{
}

12
src/Avalonia.X11/X11Window.cs

@ -878,21 +878,23 @@ namespace Avalonia.X11
}
void BeginMoveResize(NetWmMoveResize side)
void BeginMoveResize(NetWmMoveResize side, PointerPressedEventArgs e)
{
var pos = GetCursorPos(_x11);
XUngrabPointer(_x11.Display, new IntPtr(0));
SendNetWMMessage (_x11.Atoms._NET_WM_MOVERESIZE, (IntPtr) pos.x, (IntPtr) pos.y,
(IntPtr) side,
(IntPtr) 1, (IntPtr)1); // left button
e.Pointer.Capture(null);
}
public void BeginMoveDrag()
public void BeginMoveDrag(PointerPressedEventArgs e)
{
BeginMoveResize(NetWmMoveResize._NET_WM_MOVERESIZE_MOVE);
BeginMoveResize(NetWmMoveResize._NET_WM_MOVERESIZE_MOVE, e);
}
public void BeginResizeDrag(WindowEdge edge)
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)
{
var side = NetWmMoveResize._NET_WM_MOVERESIZE_CANCEL;
if (edge == WindowEdge.East)
@ -911,7 +913,7 @@ namespace Avalonia.X11
side = NetWmMoveResize._NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT;
if (edge == WindowEdge.SouthWest)
side = NetWmMoveResize._NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT;
BeginMoveResize(side);
BeginMoveResize(side, e);
}
public void SetTitle(string title)

4
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -331,7 +331,7 @@ namespace Avalonia.Win32
ShowWindow(_showWindowState);
}
public void BeginMoveDrag()
public void BeginMoveDrag(PointerPressedEventArgs e)
{
WindowsMouseDevice.Instance.Capture(null);
UnmanagedMethods.DefWindowProc(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN,
@ -350,7 +350,7 @@ namespace Avalonia.Win32
{WindowEdge.West, UnmanagedMethods.HitTestValues.HTLEFT}
};
public void BeginResizeDrag(WindowEdge edge)
public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)
{
#if USE_MANAGED_DRAG
_managedDrag.BeginResizeDrag(edge, ScreenToClient(MouseDevice.Position));

Loading…
Cancel
Save