Browse Source

use IPlatformSettings instead of creating a separate interface.

pull/7274/head
Takoooooo 4 years ago
parent
commit
21cc80932a
  1. 12
      src/Android/Avalonia.Android/AndroidPlatform.cs
  2. 4
      src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs
  3. 4
      src/Avalonia.Headless/HeadlessPlatformStubs.cs
  4. 2
      src/Avalonia.Input/TouchDevice.cs
  5. 7
      src/Avalonia.Native/AvaloniaNativePlatform.cs
  6. 6
      src/Avalonia.Visuals/ApiCompatBaseline.txt
  7. 10
      src/Avalonia.Visuals/Platform/IPlatformSettings.cs
  8. 17
      src/Avalonia.Visuals/Platform/ITouchPlatformSettings.cs
  9. 6
      src/Avalonia.X11/Stubs.cs
  10. 5
      src/Avalonia.X11/X11Platform.cs
  11. 4
      src/Linux/Avalonia.LinuxFramebuffer/Stubs.cs
  12. 3
      src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs
  13. 7
      src/Windows/Avalonia.Win32/Win32Platform.cs
  14. 16
      src/iOS/Avalonia.iOS/Platform.cs
  15. 4
      tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs

12
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; }
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickSize"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(4, 4);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickTime"/>
/// <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)
{
Options = options;
@ -49,7 +53,7 @@ namespace Avalonia.Android
.Bind<ICursorFactory>().ToTransient<CursorFactory>()
.Bind<IWindowingPlatform>().ToConstant(new WindowingPlatformStub())
.Bind<IKeyboardDevice>().ToSingleton<AndroidKeyboardDevice>()
.Bind<ITouchPlatformSettings>().ToConstant(Instance)
.Bind<IPlatformSettings>().ToConstant(Instance)
.Bind<IPlatformThreadingInterface>().ToConstant(new AndroidThreadingInterface())
.Bind<ISystemDialogImpl>().ToTransient<SystemDialogImpl>()
.Bind<IPlatformIconLoader>().ToSingleton<PlatformIconLoaderStub>()

4
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;
}
}

4
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

2
src/Avalonia.Input/TouchDevice.cs

@ -58,7 +58,7 @@ namespace Avalonia.Input
}
else
{
var settings = AvaloniaLocator.Current.GetRequiredService<ITouchPlatformSettings>();
var settings = AvaloniaLocator.Current.GetRequiredService<IPlatformSettings>();
if (!_lastClickRect.Contains(args.Position)
|| ev.Timestamp - _lastClickTime > settings.TouchDoubleClickTime.TotalMilliseconds)

7
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
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickSize"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16, 16);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickTime"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
public static AvaloniaNativePlatform Initialize(IntPtr factory, AvaloniaNativePlatformOptions options)
@ -108,7 +108,6 @@ namespace Avalonia.Native
.Bind<IPlatformIconLoader>().ToSingleton<IconLoader>()
.Bind<IKeyboardDevice>().ToConstant(KeyboardDevice)
.Bind<IPlatformSettings>().ToConstant(this)
.Bind<ITouchPlatformSettings>().ToConstant(this)
.Bind<IWindowingPlatform>().ToConstant(this)
.Bind<IClipboard>().ToConstant(new ClipboardImpl(_factory.CreateClipboard()))
.Bind<IRenderLoop>().ToConstant(new RenderLoop())

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.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

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

@ -7,5 +7,15 @@ namespace Avalonia.Platform
Size DoubleClickSize { 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; }
}
}

17
src/Avalonia.Visuals/Platform/ITouchPlatformSettings.cs

@ -1,17 +0,0 @@
using System;
namespace Avalonia.Platform
{
public interface ITouchPlatformSettings
{
/// <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; }
}
}

6
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);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickSize"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16, 16);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickTime"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
}
}

5
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<IWindowingPlatform>().ToConstant(this)
.Bind<IPlatformThreadingInterface>().ToConstant(new X11PlatformThreading(this))
@ -78,8 +78,7 @@ namespace Avalonia.X11
.Bind<IKeyboardDevice>().ToFunc(() => KeyboardDevice)
.Bind<ICursorFactory>().ToConstant(new X11CursorFactory(Display))
.Bind<IClipboard>().ToConstant(new X11Clipboard(this))
.Bind<ITouchPlatformSettings>().ToConstant(platformSettingStub)
.Bind<IPlatformSettings>().ToConstant(platformSettingStub)
.Bind<IPlatformSettings>().ToConstant(new PlatformSettingsStub())
.Bind<IPlatformIconLoader>().ToConstant(new X11IconLoader(Info))
.Bind<ISystemDialogImpl>().ToConstant(new GtkSystemDialog())
.Bind<IMountedVolumeInfoProvider>().ToConstant(new LinuxMountedVolumeInfoProvider())

4
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;
}
}

3
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();

7
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());
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickSize"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(16,16);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickTime"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
public TimeSpan TouchDoubleClickTime => DoubleClickTime;
public static void Initialize()
{
@ -151,7 +151,6 @@ namespace Avalonia.Win32
.Bind<IClipboard>().ToSingleton<ClipboardImpl>()
.Bind<ICursorFactory>().ToConstant(CursorFactory.Instance)
.Bind<IKeyboardDevice>().ToConstant(WindowsKeyboardDevice.Instance)
.Bind<ITouchPlatformSettings>().ToConstant(s_instance)
.Bind<IPlatformSettings>().ToConstant(s_instance)
.Bind<IPlatformThreadingInterface>().ToConstant(s_instance)
.Bind<IRenderLoop>().ToConstant(new RenderLoop())

16
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
{
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickSize"/>
/// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
public Size TouchDoubleClickSize => new Size(10, 10);
/// <inheritdoc cref="ITouchPlatformSettings.TouchDoubleClickTime"/>
/// <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()
{
GlFeature ??= new EaglFeature();
@ -33,7 +35,7 @@ namespace Avalonia.iOS
.Bind<ICursorFactory>().ToConstant(new CursorFactoryStub())
.Bind<IWindowingPlatform>().ToConstant(new WindowingPlatformStub())
.Bind<IClipboard>().ToConstant(new ClipboardImpl())
.Bind<ITouchPlatformSettings>().ToConstant(new PlatformSettings())
.Bind<IPlatformSettings>().ToConstant(new PlatformSettings())
.Bind<IPlatformIconLoader>().ToConstant(new PlatformIconLoaderStub())
.Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>()
.Bind<IRenderLoop>().ToSingleton<RenderLoop>()

4
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<ITouchPlatformSettings>();
var iSettingsMock = new Mock<IPlatformSettings>();
iSettingsMock.Setup(x => x.TouchDoubleClickTime).Returns(doubleClickTime);
AvaloniaLocator.CurrentMutable.BindToSelf(this)
.Bind<ITouchPlatformSettings>().ToConstant(iSettingsMock.Object);
.Bind<IPlatformSettings>().ToConstant(iSettingsMock.Object);
return unitTestApp;
}

Loading…
Cancel
Save