diff --git a/src/Android/Avalonia.Android/AndroidPlatform.cs b/src/Android/Avalonia.Android/AndroidPlatform.cs index 3bf01a0f15..6a940a54f1 100644 --- a/src/Android/Avalonia.Android/AndroidPlatform.cs +++ b/src/Android/Avalonia.Android/AndroidPlatform.cs @@ -29,17 +29,21 @@ namespace Avalonia namespace Avalonia.Android { - class AndroidPlatform : ITouchPlatformSettings + class AndroidPlatform : IPlatformSettings { public static readonly AndroidPlatform Instance = new AndroidPlatform(); public static AndroidPlatformOptions Options { get; private set; } - /// + /// public Size TouchDoubleClickSize => new Size(4, 4); - /// + /// public TimeSpan TouchDoubleClickTime => TimeSpan.FromMilliseconds(200); + public Size DoubleClickSize => TouchDoubleClickSize; + + public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); + public static void Initialize(Type appType, AndroidPlatformOptions options) { Options = options; @@ -49,7 +53,7 @@ namespace Avalonia.Android .Bind().ToTransient() .Bind().ToConstant(new WindowingPlatformStub()) .Bind().ToSingleton() - .Bind().ToConstant(Instance) + .Bind().ToConstant(Instance) .Bind().ToConstant(new AndroidThreadingInterface()) .Bind().ToTransient() .Bind().ToSingleton() diff --git a/src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs b/src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs index ada63f5326..5d8b166b5a 100644 --- a/src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs +++ b/src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs @@ -64,5 +64,9 @@ namespace Avalonia.DesignerSupport.Remote public Size DoubleClickSize { get; } = new Size(2, 2); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); + + public Size TouchDoubleClickSize => new Size(16, 16); + + public TimeSpan TouchDoubleClickTime => DoubleClickTime; } } diff --git a/src/Avalonia.Headless/HeadlessPlatformStubs.cs b/src/Avalonia.Headless/HeadlessPlatformStubs.cs index ce4c31e27e..605659d464 100644 --- a/src/Avalonia.Headless/HeadlessPlatformStubs.cs +++ b/src/Avalonia.Headless/HeadlessPlatformStubs.cs @@ -67,6 +67,10 @@ namespace Avalonia.Headless { public Size DoubleClickSize { get; } = new Size(2, 2); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); + + public Size TouchDoubleClickSize => new Size(16,16); + + public TimeSpan TouchDoubleClickTime => DoubleClickTime; } class HeadlessSystemDialogsStub : ISystemDialogImpl diff --git a/src/Avalonia.Input/TouchDevice.cs b/src/Avalonia.Input/TouchDevice.cs index 84974302eb..0069aa7961 100644 --- a/src/Avalonia.Input/TouchDevice.cs +++ b/src/Avalonia.Input/TouchDevice.cs @@ -58,7 +58,7 @@ namespace Avalonia.Input } else { - var settings = AvaloniaLocator.Current.GetRequiredService(); + var settings = AvaloniaLocator.Current.GetRequiredService(); if (!_lastClickRect.Contains(args.Position) || ev.Timestamp - _lastClickTime > settings.TouchDoubleClickTime.TotalMilliseconds) diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs index f2d7f741fc..5fa50f0e7f 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs @@ -11,7 +11,7 @@ using Avalonia.Rendering; namespace Avalonia.Native { - class AvaloniaNativePlatform : IPlatformSettings, ITouchPlatformSettings, IWindowingPlatform + class AvaloniaNativePlatform : IPlatformSettings, IWindowingPlatform { private readonly IAvaloniaNativeFactory _factory; private AvaloniaNativePlatformOptions _options; @@ -26,10 +26,10 @@ namespace Avalonia.Native public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); //TODO - /// + /// public Size TouchDoubleClickSize => new Size(16, 16); - /// + /// public TimeSpan TouchDoubleClickTime => DoubleClickTime; public static AvaloniaNativePlatform Initialize(IntPtr factory, AvaloniaNativePlatformOptions options) @@ -108,7 +108,6 @@ namespace Avalonia.Native .Bind().ToSingleton() .Bind().ToConstant(KeyboardDevice) .Bind().ToConstant(this) - .Bind().ToConstant(this) .Bind().ToConstant(this) .Bind().ToConstant(new ClipboardImpl(_factory.CreateClipboard())) .Bind().ToConstant(new RenderLoop()) diff --git a/src/Avalonia.Visuals/ApiCompatBaseline.txt b/src/Avalonia.Visuals/ApiCompatBaseline.txt index ad9a5fd71a..dcb3246a63 100644 --- a/src/Avalonia.Visuals/ApiCompatBaseline.txt +++ b/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.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. -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 diff --git a/src/Avalonia.Visuals/Platform/IPlatformSettings.cs b/src/Avalonia.Visuals/Platform/IPlatformSettings.cs index bcb00df5d6..e4b28e6575 100644 --- a/src/Avalonia.Visuals/Platform/IPlatformSettings.cs +++ b/src/Avalonia.Visuals/Platform/IPlatformSettings.cs @@ -7,5 +7,15 @@ namespace Avalonia.Platform Size DoubleClickSize { get; } TimeSpan DoubleClickTime { get; } + + /// + /// Determines the size of the area within that you should click twice in order for a double click to be counted. + /// + Size TouchDoubleClickSize { get; } + + /// + /// Determines the time span that what will be used to determine the double-click. + /// + TimeSpan TouchDoubleClickTime { get; } } } diff --git a/src/Avalonia.Visuals/Platform/ITouchPlatformSettings.cs b/src/Avalonia.Visuals/Platform/ITouchPlatformSettings.cs deleted file mode 100644 index bf65870d1b..0000000000 --- a/src/Avalonia.Visuals/Platform/ITouchPlatformSettings.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Avalonia.Platform -{ - public interface ITouchPlatformSettings - { - /// - /// Determines the size of the area within that you should click twice in order for a double click to be counted. - /// - Size TouchDoubleClickSize { get; } - - /// - /// Determines the time span that what will be used to determine the double-click. - /// - TimeSpan TouchDoubleClickTime { get; } - } -} diff --git a/src/Avalonia.X11/Stubs.cs b/src/Avalonia.X11/Stubs.cs index e98153e5a9..f73512f1e8 100644 --- a/src/Avalonia.X11/Stubs.cs +++ b/src/Avalonia.X11/Stubs.cs @@ -3,15 +3,15 @@ using Avalonia.Platform; namespace Avalonia.X11 { - class PlatformSettingsStub : IPlatformSettings, ITouchPlatformSettings + class PlatformSettingsStub : IPlatformSettings { public Size DoubleClickSize { get; } = new Size(2, 2); public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); - /// + /// public Size TouchDoubleClickSize => new Size(16, 16); - /// + /// public TimeSpan TouchDoubleClickTime => DoubleClickTime; } } diff --git a/src/Avalonia.X11/X11Platform.cs b/src/Avalonia.X11/X11Platform.cs index e0d84e0a2e..ec3f29c806 100644 --- a/src/Avalonia.X11/X11Platform.cs +++ b/src/Avalonia.X11/X11Platform.cs @@ -68,7 +68,7 @@ namespace Avalonia.X11 //TODO: log if (options.UseDBusMenu) DBusHelper.TryInitialize(); - var platformSettingStub = new PlatformSettingsStub(); + AvaloniaLocator.CurrentMutable.BindToSelf(this) .Bind().ToConstant(this) .Bind().ToConstant(new X11PlatformThreading(this)) @@ -78,8 +78,7 @@ namespace Avalonia.X11 .Bind().ToFunc(() => KeyboardDevice) .Bind().ToConstant(new X11CursorFactory(Display)) .Bind().ToConstant(new X11Clipboard(this)) - .Bind().ToConstant(platformSettingStub) - .Bind().ToConstant(platformSettingStub) + .Bind().ToConstant(new PlatformSettingsStub()) .Bind().ToConstant(new X11IconLoader(Info)) .Bind().ToConstant(new GtkSystemDialog()) .Bind().ToConstant(new LinuxMountedVolumeInfoProvider()) diff --git a/src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs b/src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs index 642be28c69..dd60d5f09d 100644 --- a/src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs +++ b/src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs @@ -18,5 +18,9 @@ namespace Avalonia.LinuxFramebuffer { public Size DoubleClickSize { get; } = new Size(4, 4); public TimeSpan DoubleClickTime { get; } = new TimeSpan(0, 0, 0, 0, 500); + + public Size TouchDoubleClickSize => new Size(16,16); + + public TimeSpan TouchDoubleClickTime => DoubleClickTime; } } diff --git a/src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs b/src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs index f30a36b8c9..979e66a785 100644 --- a/src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs +++ b/src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs @@ -51,6 +51,9 @@ namespace Avalonia.Web.Blazor public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500); + public Size TouchDoubleClickSize => new Size(16, 16); + + public TimeSpan TouchDoubleClickTime => DoubleClickTime; public void RunLoop(CancellationToken cancellationToken) { throw new NotSupportedException(); diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs index d1196bbc8d..5cfbab40e4 100644 --- a/src/Windows/Avalonia.Win32/Win32Platform.cs +++ b/src/Windows/Avalonia.Win32/Win32Platform.cs @@ -101,7 +101,7 @@ namespace Avalonia namespace Avalonia.Win32 { - public class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, ITouchPlatformSettings, IWindowingPlatform, IPlatformIconLoader, IPlatformLifetimeEventsImpl + public class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, IWindowingPlatform, IPlatformIconLoader, IPlatformLifetimeEventsImpl { private static readonly Win32Platform s_instance = new Win32Platform(); private static Thread _uiThread; @@ -134,10 +134,10 @@ namespace Avalonia.Win32 public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(UnmanagedMethods.GetDoubleClickTime()); - /// + /// public Size TouchDoubleClickSize => new Size(16,16); - /// + /// public TimeSpan TouchDoubleClickTime => DoubleClickTime; public static void Initialize() { @@ -151,7 +151,6 @@ namespace Avalonia.Win32 .Bind().ToSingleton() .Bind().ToConstant(CursorFactory.Instance) .Bind().ToConstant(WindowsKeyboardDevice.Instance) - .Bind().ToConstant(s_instance) .Bind().ToConstant(s_instance) .Bind().ToConstant(s_instance) .Bind().ToConstant(new RenderLoop()) diff --git a/src/iOS/Avalonia.iOS/Platform.cs b/src/iOS/Avalonia.iOS/Platform.cs index fa0db4518f..88f60ace1f 100644 --- a/src/iOS/Avalonia.iOS/Platform.cs +++ b/src/iOS/Avalonia.iOS/Platform.cs @@ -1,11 +1,9 @@ using System; -using Avalonia.Controls; using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.OpenGL; using Avalonia.Platform; using Avalonia.Rendering; -using Avalonia.Shared.PlatformSupport; namespace Avalonia.iOS { @@ -13,15 +11,19 @@ namespace Avalonia.iOS { public static EaglFeature GlFeature; public static DisplayLinkTimer Timer; - class PlatformSettings : ITouchPlatformSettings + class PlatformSettings : IPlatformSettings { - /// + /// public Size TouchDoubleClickSize => new Size(10, 10); - /// + /// public TimeSpan TouchDoubleClickTime => TimeSpan.FromMilliseconds(500); + + public Size DoubleClickSize => new Size(4, 4); + + public TimeSpan DoubleClickTime => TouchDoubleClickTime; } - + public static void Register() { GlFeature ??= new EaglFeature(); @@ -33,7 +35,7 @@ namespace Avalonia.iOS .Bind().ToConstant(new CursorFactoryStub()) .Bind().ToConstant(new WindowingPlatformStub()) .Bind().ToConstant(new ClipboardImpl()) - .Bind().ToConstant(new PlatformSettings()) + .Bind().ToConstant(new PlatformSettings()) .Bind().ToConstant(new PlatformIconLoaderStub()) .Bind().ToSingleton() .Bind().ToSingleton() diff --git a/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs b/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs index 14b7df7260..80c5a45c1a 100644 --- a/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs +++ b/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs @@ -208,10 +208,10 @@ namespace Avalonia.Input.UnitTests { var unitTestApp = UnitTestApplication.Start( new TestServices(inputManager: new InputManager())); - var iSettingsMock = new Mock(); + var iSettingsMock = new Mock(); iSettingsMock.Setup(x => x.TouchDoubleClickTime).Returns(doubleClickTime); AvaloniaLocator.CurrentMutable.BindToSelf(this) - .Bind().ToConstant(iSettingsMock.Object); + .Bind().ToConstant(iSettingsMock.Object); return unitTestApp; }