Browse Source

Merge branch 'master' into wgl_alpha

pull/7285/head
Emmanuel Hansen 5 years ago
committed by GitHub
parent
commit
bc1aab1013
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      src/Android/Avalonia.Android/AndroidPlatform.cs
  2. 4
      src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs
  3. 4
      src/Avalonia.Headless/HeadlessPlatformStubs.cs
  4. 11
      src/Avalonia.Input/TouchDevice.cs
  5. 28
      src/Avalonia.Native/AvaloniaNativePlatform.cs
  6. 6
      src/Avalonia.Visuals/ApiCompatBaseline.txt
  7. 10
      src/Avalonia.Visuals/Platform/IPlatformSettings.cs
  8. 12
      src/Avalonia.X11/Stubs.cs
  9. 1
      src/Avalonia.X11/X11Platform.cs
  10. 4
      src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs
  11. 3
      src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs
  12. 5
      src/Windows/Avalonia.Win32/Win32Platform.cs
  13. 15
      src/iOS/Avalonia.iOS/Platform.cs
  14. 2
      tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs

12
src/Android/Avalonia.Android/AndroidPlatform.cs

@ -33,8 +33,16 @@ namespace Avalonia.Android
{ {
public static readonly AndroidPlatform Instance = new AndroidPlatform(); public static readonly AndroidPlatform Instance = new AndroidPlatform();
public static AndroidPlatformOptions Options { get; private set; } public static AndroidPlatformOptions Options { get; private set; }
public Size DoubleClickSize => new Size(4, 4);
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(200); /// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(4, 4);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => TimeSpan.FromMilliseconds(200);
public Size DoubleClickSize => TouchDoubleClickSize;
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500);
public static void Initialize(Type appType, AndroidPlatformOptions options) public static void Initialize(Type appType, AndroidPlatformOptions options)
{ {

4
src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs

@ -64,5 +64,9 @@ namespace Avalonia.DesignerSupport.Remote
public Size DoubleClickSize { get; } = new Size(2, 2); public Size DoubleClickSize { get; } = new Size(2, 2);
public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500);
public Size TouchDoubleClickSize => new Size(16, 16);
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
} }
} }

4
src/Avalonia.Headless/HeadlessPlatformStubs.cs

@ -67,6 +67,10 @@ namespace Avalonia.Headless
{ {
public Size DoubleClickSize { get; } = new Size(2, 2); public Size DoubleClickSize { get; } = new Size(2, 2);
public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500);
public Size TouchDoubleClickSize => new Size(16,16);
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
} }
class HeadlessSystemDialogsStub : ISystemDialogImpl class HeadlessSystemDialogsStub : ISystemDialogImpl

11
src/Avalonia.Input/TouchDevice.cs

@ -58,20 +58,17 @@ namespace Avalonia.Input
} }
else else
{ {
var settings = AvaloniaLocator.Current.GetService<IPlatformSettings>(); var settings = AvaloniaLocator.Current.GetRequiredService<IPlatformSettings>();
if (settings == null)
{
throw new Exception("IPlatformSettings can not be null.");
}
if (!_lastClickRect.Contains(args.Position) if (!_lastClickRect.Contains(args.Position)
|| ev.Timestamp - _lastClickTime > settings.DoubleClickTime.TotalMilliseconds) || ev.Timestamp - _lastClickTime > settings.TouchDoubleClickTime.TotalMilliseconds)
{ {
_clickCount = 0; _clickCount = 0;
} }
++_clickCount; ++_clickCount;
_lastClickTime = ev.Timestamp; _lastClickTime = ev.Timestamp;
_lastClickRect = new Rect(args.Position, new Size()) _lastClickRect = new Rect(args.Position, new Size())
.Inflate(new Thickness(16, 16)); .Inflate(new Thickness(settings.TouchDoubleClickSize.Width / 2, settings.TouchDoubleClickSize.Height / 2));
} }
target.RaiseEvent(new PointerPressedEventArgs(target, pointer, target.RaiseEvent(new PointerPressedEventArgs(target, pointer,

28
src/Avalonia.Native/AvaloniaNativePlatform.cs

@ -26,9 +26,15 @@ namespace Avalonia.Native
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); //TODO public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); //TODO
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16, 16);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
public static AvaloniaNativePlatform Initialize(IntPtr factory, AvaloniaNativePlatformOptions options) public static AvaloniaNativePlatform Initialize(IntPtr factory, AvaloniaNativePlatformOptions options)
{ {
var result = new AvaloniaNativePlatform(MicroComRuntime.CreateProxyFor<IAvaloniaNativeFactory>(factory, true)); var result = new AvaloniaNativePlatform(MicroComRuntime.CreateProxyFor<IAvaloniaNativeFactory>(factory, true));
result.DoInitialize(options); result.DoInitialize(options);
return result; return result;
@ -55,14 +61,14 @@ namespace Avalonia.Native
return Initialize(CreateAvaloniaNative(), options); return Initialize(CreateAvaloniaNative(), options);
} }
public void SetupApplicationMenuExporter () public void SetupApplicationMenuExporter()
{ {
var exporter = new AvaloniaNativeMenuExporter(_factory); var exporter = new AvaloniaNativeMenuExporter(_factory);
} }
public void SetupApplicationName () public void SetupApplicationName()
{ {
if(!string.IsNullOrWhiteSpace(Application.Current.Name)) if (!string.IsNullOrWhiteSpace(Application.Current.Name))
{ {
_factory.MacOptions.SetApplicationTitle(Application.Current.Name); _factory.MacOptions.SetApplicationTitle(Application.Current.Name);
} }
@ -80,13 +86,13 @@ namespace Avalonia.Native
GCHandle.FromIntPtr(handle).Free(); GCHandle.FromIntPtr(handle).Free();
} }
} }
void DoInitialize(AvaloniaNativePlatformOptions options) void DoInitialize(AvaloniaNativePlatformOptions options)
{ {
_options = options; _options = options;
var applicationPlatform = new AvaloniaNativeApplicationPlatform(); var applicationPlatform = new AvaloniaNativeApplicationPlatform();
_factory.Initialize(new GCHandleDeallocator(), applicationPlatform); _factory.Initialize(new GCHandleDeallocator(), applicationPlatform);
if (_factory.MacOptions != null) if (_factory.MacOptions != null)
{ {
@ -118,7 +124,7 @@ namespace Avalonia.Native
hotkeys.MoveCursorToTheStartOfLineWithSelection.Add(new KeyGesture(Key.Left, hotkeys.CommandModifiers | hotkeys.SelectionModifiers)); hotkeys.MoveCursorToTheStartOfLineWithSelection.Add(new KeyGesture(Key.Left, hotkeys.CommandModifiers | hotkeys.SelectionModifiers));
hotkeys.MoveCursorToTheEndOfLine.Add(new KeyGesture(Key.Right, hotkeys.CommandModifiers)); hotkeys.MoveCursorToTheEndOfLine.Add(new KeyGesture(Key.Right, hotkeys.CommandModifiers));
hotkeys.MoveCursorToTheEndOfLineWithSelection.Add(new KeyGesture(Key.Right, hotkeys.CommandModifiers | hotkeys.SelectionModifiers)); hotkeys.MoveCursorToTheEndOfLineWithSelection.Add(new KeyGesture(Key.Right, hotkeys.CommandModifiers | hotkeys.SelectionModifiers));
if (_options.UseGpu) if (_options.UseGpu)
{ {
try try
@ -133,7 +139,7 @@ namespace Avalonia.Native
} }
} }
public ITrayIconImpl CreateTrayIcon () public ITrayIconImpl CreateTrayIcon()
{ {
return new TrayIconImpl(_factory); return new TrayIconImpl(_factory);
} }
@ -159,8 +165,8 @@ namespace Avalonia.Native
ShowInDock = true; ShowInDock = true;
} }
public bool ShowInDock public bool ShowInDock
{ {
get => _showInDock; get => _showInDock;
set set
{ {

6
src/Avalonia.Visuals/ApiCompatBaseline.txt

@ -79,4 +79,8 @@ InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWr
InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmap(System.String)' is present in the implementation but not in the contract. InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmap(System.String)' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToHeight(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract. InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToHeight(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToWidth(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract. InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToWidth(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract.
Total Issues: 79 InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Size Avalonia.Platform.IPlatformSettings.TouchDoubleClickSize' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public System.TimeSpan Avalonia.Platform.IPlatformSettings.TouchDoubleClickTime' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Size Avalonia.Platform.IPlatformSettings.TouchDoubleClickSize.get()' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public System.TimeSpan Avalonia.Platform.IPlatformSettings.TouchDoubleClickTime.get()' is present in the implementation but not in the contract.
Total Issues: 84

10
src/Avalonia.Visuals/Platform/IPlatformSettings.cs

@ -7,5 +7,15 @@ namespace Avalonia.Platform
Size DoubleClickSize { get; } Size DoubleClickSize { get; }
TimeSpan DoubleClickTime { get; } TimeSpan DoubleClickTime { get; }
/// <summary>
/// Determines the size of the area within that you should click twice in order for a double click to be counted.
/// </summary>
Size TouchDoubleClickSize { get; }
/// <summary>
/// Determines the time span that what will be used to determine the double-click.
/// </summary>
TimeSpan TouchDoubleClickTime { get; }
} }
} }

12
src/Avalonia.X11/Stubs.cs

@ -1,10 +1,4 @@
using System; using System;
using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Controls.Platform;
using Avalonia.Input;
using Avalonia.Input.Platform;
using Avalonia.Platform; using Avalonia.Platform;
namespace Avalonia.X11 namespace Avalonia.X11
@ -13,5 +7,11 @@ namespace Avalonia.X11
{ {
public Size DoubleClickSize { get; } = new Size(2, 2); public Size DoubleClickSize { get; } = new Size(2, 2);
public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16, 16);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
} }
} }

1
src/Avalonia.X11/X11Platform.cs

@ -68,6 +68,7 @@ namespace Avalonia.X11
//TODO: log //TODO: log
if (options.UseDBusMenu) if (options.UseDBusMenu)
DBusHelper.TryInitialize(); DBusHelper.TryInitialize();
AvaloniaLocator.CurrentMutable.BindToSelf(this) AvaloniaLocator.CurrentMutable.BindToSelf(this)
.Bind<IWindowingPlatform>().ToConstant(this) .Bind<IWindowingPlatform>().ToConstant(this)
.Bind<IPlatformThreadingInterface>().ToConstant(new X11PlatformThreading(this)) .Bind<IPlatformThreadingInterface>().ToConstant(new X11PlatformThreading(this))

4
src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs

@ -18,5 +18,9 @@ namespace Avalonia.LinuxFramebuffer
{ {
public Size DoubleClickSize { get; } = new Size(4, 4); public Size DoubleClickSize { get; } = new Size(4, 4);
public TimeSpan DoubleClickTime { get; } = new TimeSpan(0, 0, 0, 0, 500); public TimeSpan DoubleClickTime { get; } = new TimeSpan(0, 0, 0, 0, 500);
public Size TouchDoubleClickSize => new Size(16,16);
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
} }
} }

3
src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs

@ -51,6 +51,9 @@ namespace Avalonia.Web.Blazor
public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500);
public Size TouchDoubleClickSize => new Size(16, 16);
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
public void RunLoop(CancellationToken cancellationToken) public void RunLoop(CancellationToken cancellationToken)
{ {
throw new NotSupportedException(); throw new NotSupportedException();

5
src/Windows/Avalonia.Win32/Win32Platform.cs

@ -134,6 +134,11 @@ namespace Avalonia.Win32
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(UnmanagedMethods.GetDoubleClickTime()); public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(UnmanagedMethods.GetDoubleClickTime());
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16,16);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
public static void Initialize() public static void Initialize()
{ {
Initialize(new Win32PlatformOptions()); Initialize(new Win32PlatformOptions());

15
src/iOS/Avalonia.iOS/Platform.cs

@ -1,11 +1,9 @@
using System; using System;
using Avalonia.Controls;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.Input.Platform; using Avalonia.Input.Platform;
using Avalonia.OpenGL; using Avalonia.OpenGL;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.Shared.PlatformSupport;
namespace Avalonia.iOS namespace Avalonia.iOS
{ {
@ -15,10 +13,17 @@ namespace Avalonia.iOS
public static DisplayLinkTimer Timer; public static DisplayLinkTimer Timer;
class PlatformSettings : IPlatformSettings class PlatformSettings : IPlatformSettings
{ {
public Size DoubleClickSize { get; } = new Size(10, 10); /// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); public Size TouchDoubleClickSize => new Size(10, 10);
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => TimeSpan.FromMilliseconds(500);
public Size DoubleClickSize => new Size(4, 4);
public TimeSpan DoubleClickTime => TouchDoubleClickTime;
} }
public static void Register() public static void Register()
{ {
GlFeature ??= new EaglFeature(); GlFeature ??= new EaglFeature();

2
tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs

@ -209,7 +209,7 @@ namespace Avalonia.Input.UnitTests
var unitTestApp = UnitTestApplication.Start( var unitTestApp = UnitTestApplication.Start(
new TestServices(inputManager: new InputManager())); new TestServices(inputManager: new InputManager()));
var iSettingsMock = new Mock<IPlatformSettings>(); var iSettingsMock = new Mock<IPlatformSettings>();
iSettingsMock.Setup(x => x.DoubleClickTime).Returns(doubleClickTime); iSettingsMock.Setup(x => x.TouchDoubleClickTime).Returns(doubleClickTime);
AvaloniaLocator.CurrentMutable.BindToSelf(this) AvaloniaLocator.CurrentMutable.BindToSelf(this)
.Bind<IPlatformSettings>().ToConstant(iSettingsMock.Object); .Bind<IPlatformSettings>().ToConstant(iSettingsMock.Object);
return unitTestApp; return unitTestApp;

Loading…
Cancel
Save