Browse Source

Line endings and csproj integration

pull/1977/head
Nikita Tsukanov 7 years ago
parent
commit
6c729fa79e
  1. 26
      Avalonia.sln
  2. 62
      src/Avalonia.Native/Avalonia.Native.csproj
  3. 183
      src/Avalonia.Native/AvaloniaNativePlatform.cs
  4. 34
      src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs
  5. 4
      src/Avalonia.Native/PlatformThreadingInterface.cs
  6. 40
      src/Avalonia.Native/ScreenImpl.cs

26
Avalonia.sln

@ -188,6 +188,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.UnitTests", "
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.OpenGL", "src\Avalonia.OpenGL\Avalonia.OpenGL.csproj", "{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.OpenGL", "src\Avalonia.OpenGL\Avalonia.OpenGL.csproj", "{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{12A91A62-C064-42CA-9A8C-A1272F354388}"
EndProject
Global Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@ -1689,6 +1691,30 @@ Global
{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhone.Build.0 = Release|Any CPU {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhone.Build.0 = Release|Any CPU
{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhone.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|Any CPU.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhone.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|Any CPU.Build.0 = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhone.ActiveCfg = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhone.Build.0 = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

62
src/Avalonia.Native/Avalonia.Native.csproj

@ -1,31 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<CastXmlPath>/usr/local/bin/castxml</CastXmlPath> <CastXmlPath Condition="Exists('/usr/bin/castxml')">/usr/bin/castxml</CastXmlPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <CastXmlPath Condition="Exists('/usr/local/bin/castxml')">/usr/local/bin/castxml</CastXmlPath>
<SharpGenGeneratedCodeFolder>$(MSBuildThisFileDirectory)/Generated</SharpGenGeneratedCodeFolder>
</PropertyGroup> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ItemGroup> <SharpGenGeneratedCodeFolder>$(MSBuildThisFileDirectory)/Generated</SharpGenGeneratedCodeFolder>
<PackageReference Include="SharpGenTools.Sdk" Version="1.1.2" PrivateAssets="all" /> </PropertyGroup>
<PackageReference Include="SharpGen.Runtime.Com" Version="1.1.0" /> <ItemGroup>
<PackageReference Include="Avalonia" Version="0.6.2-build6362-beta" /> <PackageReference Include="SharpGenTools.Sdk" Version="1.1.2" PrivateAssets="all" />
<SharpGenMapping Include="Mappings.xml" /> <PackageReference Include="SharpGen.Runtime.Com" Version="1.1.0" />
</ItemGroup> <SharpGenMapping Include="Mappings.xml" />
<ItemGroup> <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
<Compile Remove="Generated\LocalInterop.cs" /> <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
<Compile Remove="Generated\Structures.cs" /> <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj" />
<Compile Remove="Generated\Functions.cs" /> <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
<Compile Remove="Generated\Interfaces.cs" /> <ProjectReference Include="..\Avalonia.OpenGL\Avalonia.OpenGL.csproj" />
<Compile Remove="Generated\LocalInterop.cs" /> <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
<Compile Remove="Generated\Structures.cs" /> </ItemGroup>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'"> <ItemGroup Condition="'$(Configuration)' == 'Release'">
<Content Include="../../Build/Products/Release/libAvalonia.Native.OSX.dylib"> <Content Include="../../Build/Products/Release/libAvalonia.Native.OSX.dylib">
<PackagePath>runtimes/osx/native/libAvaloniaNative.dylib</PackagePath> <PackagePath>runtimes/osx/native/libAvaloniaNative.dylib</PackagePath>
<Pack>true</Pack> <Pack>true</Pack>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>
</Project> </Project>

183
src/Avalonia.Native/AvaloniaNativePlatform.cs

@ -1,7 +1,6 @@
// Copyright (c) The Avalonia Project. All rights reserved. // Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System;
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Avalonia.Controls.Platform; using Avalonia.Controls.Platform;
@ -12,72 +11,72 @@ using Avalonia.OpenGL;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.Rendering; using Avalonia.Rendering;
namespace Avalonia.Native namespace Avalonia.Native
{ {
class AvaloniaNativePlatform : IPlatformSettings, IWindowingPlatform class AvaloniaNativePlatform : IPlatformSettings, IWindowingPlatform
{ {
private readonly IAvaloniaNativeFactory _factory; private readonly IAvaloniaNativeFactory _factory;
[DllImport("libAvaloniaNative")] [DllImport("libAvaloniaNative")]
static extern IntPtr CreateAvaloniaNative(); static extern IntPtr CreateAvaloniaNative();
internal static readonly MouseDevice MouseDevice = new MouseDevice(); internal static readonly MouseDevice MouseDevice = new MouseDevice();
internal static readonly KeyboardDevice KeyboardDevice = new KeyboardDevice(); internal static readonly KeyboardDevice KeyboardDevice = new KeyboardDevice();
public Size DoubleClickSize => new Size(4, 4); public Size DoubleClickSize => new Size(4, 4);
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); //TODO public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); //TODO
public static void Initialize(IntPtr factory, Action<AvaloniaNativeOptions> configure) public static void Initialize(IntPtr factory, Action<AvaloniaNativeOptions> configure)
{ {
new AvaloniaNativePlatform(new IAvaloniaNativeFactory(factory)) new AvaloniaNativePlatform(new IAvaloniaNativeFactory(factory))
.DoInitialize(configure); .DoInitialize(configure);
}
delegate IntPtr CreateAvaloniaNativeDelegate();
public static void Initialize(string library, Action<AvaloniaNativeOptions> configure)
{
var loader = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? (IDynLoader)new Win32Loader() : new UnixLoader();
var lib = loader.LoadLibrary(library);
var proc = loader.GetProcAddress(lib, "CreateAvaloniaNative", false);
var d = Marshal.GetDelegateForFunctionPointer<CreateAvaloniaNativeDelegate>(proc);
Initialize(d(), configure);
} }
delegate IntPtr CreateAvaloniaNativeDelegate(); public static void Initialize(Action<AvaloniaNativeOptions> configure)
public static void Initialize(string library, Action<AvaloniaNativeOptions> configure)
{
var loader = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? (IDynLoader)new Win32Loader() : new UnixLoader();
var lib = loader.LoadLibrary(library);
var proc = loader.GetProcAddress(lib, "CreateAvaloniaNative", false);
var d = Marshal.GetDelegateForFunctionPointer<CreateAvaloniaNativeDelegate>(proc);
Initialize(d(), configure);
}
public static void Initialize(Action<AvaloniaNativeOptions> configure)
{
Initialize(CreateAvaloniaNative(), configure);
}
private AvaloniaNativePlatform(IAvaloniaNativeFactory factory)
{ {
_factory = factory; Initialize(CreateAvaloniaNative(), configure);
} }
void DoInitialize(Action<AvaloniaNativeOptions> configure) private AvaloniaNativePlatform(IAvaloniaNativeFactory factory)
{ {
var opts = new AvaloniaNativeOptions(_factory); _factory = factory;
configure?.Invoke(opts); }
_factory.Initialize();
void DoInitialize(Action<AvaloniaNativeOptions> configure)
AvaloniaLocator.CurrentMutable {
.Bind<IPlatformThreadingInterface>().ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface())) var opts = new AvaloniaNativeOptions(_factory);
.Bind<IStandardCursorFactory>().ToConstant(new CursorFactory(_factory.CreateCursorFactory())) configure?.Invoke(opts);
.Bind<IPlatformIconLoader>().ToSingleton<IconLoader>() _factory.Initialize();
.Bind<IKeyboardDevice>().ToConstant(KeyboardDevice)
.Bind<IMouseDevice>().ToConstant(MouseDevice) AvaloniaLocator.CurrentMutable
.Bind<IPlatformSettings>().ToConstant(this) .Bind<IPlatformThreadingInterface>().ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface()))
.Bind<IWindowingPlatform>().ToConstant(this) .Bind<IStandardCursorFactory>().ToConstant(new CursorFactory(_factory.CreateCursorFactory()))
.Bind<IClipboard>().ToConstant(new ClipboardImpl(_factory.CreateClipboard())) .Bind<IPlatformIconLoader>().ToSingleton<IconLoader>()
.Bind<IRenderLoop>().ToConstant(new RenderLoop()) .Bind<IKeyboardDevice>().ToConstant(KeyboardDevice)
.Bind<IRenderTimer>().ToConstant(new DefaultRenderTimer(60)) .Bind<IMouseDevice>().ToConstant(MouseDevice)
.Bind<ISystemDialogImpl>().ToConstant(new SystemDialogs(_factory.CreateSystemDialogs())) .Bind<IPlatformSettings>().ToConstant(this)
.Bind<IWindowingPlatformGlFeature>().ToConstant(new GlPlatformFeature(_factory.ObtainGlFeature())) .Bind<IWindowingPlatform>().ToConstant(this)
.Bind<AvaloniaNativeOptions>().ToConstant(opts); .Bind<IClipboard>().ToConstant(new ClipboardImpl(_factory.CreateClipboard()))
.Bind<IRenderLoop>().ToConstant(new RenderLoop())
.Bind<IRenderTimer>().ToConstant(new DefaultRenderTimer(60))
.Bind<ISystemDialogImpl>().ToConstant(new SystemDialogs(_factory.CreateSystemDialogs()))
.Bind<IWindowingPlatformGlFeature>().ToConstant(new GlPlatformFeature(_factory.ObtainGlFeature()))
.Bind<AvaloniaNativeOptions>().ToConstant(opts);
} }
public IWindowImpl CreateWindow() public IWindowImpl CreateWindow()
@ -91,43 +90,43 @@ namespace Avalonia.Native
} }
public IPopupImpl CreatePopup() public IPopupImpl CreatePopup()
{ {
return new PopupImpl(_factory); return new PopupImpl(_factory);
} }
} }
public class AvaloniaNativeMacOptions public class AvaloniaNativeMacOptions
{ {
private readonly IAvnMacOptions _opts; private readonly IAvnMacOptions _opts;
private bool _showInDock; private bool _showInDock;
internal AvaloniaNativeMacOptions(IAvnMacOptions opts) internal AvaloniaNativeMacOptions(IAvnMacOptions opts)
{ {
_opts = opts; _opts = opts;
ShowInDock = true; ShowInDock = true;
} }
public bool ShowInDock public bool ShowInDock
{ {
get => _showInDock; get => _showInDock;
set set
{ {
_showInDock = value; _showInDock = value;
_opts.ShowInDock = value ? 1 : 0; _opts.ShowInDock = value ? 1 : 0;
} }
} }
} }
public class AvaloniaNativeOptions public class AvaloniaNativeOptions
{ {
public AvaloniaNativeMacOptions MacOptions { get; set; } public AvaloniaNativeMacOptions MacOptions { get; set; }
public bool UseDeferredRendering { get; set; } = true; public bool UseDeferredRendering { get; set; } = true;
public bool UseGpu { get; set; } = false; public bool UseGpu { get; set; } = false;
internal AvaloniaNativeOptions(IAvaloniaNativeFactory factory) internal AvaloniaNativeOptions(IAvaloniaNativeFactory factory)
{ {
var mac = factory.GetMacOptions(); var mac = factory.GetMacOptions();
if (mac != null) if (mac != null)
MacOptions = new AvaloniaNativeMacOptions(mac); MacOptions = new AvaloniaNativeMacOptions(mac);
} }
} }
} }

34
src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs

@ -1,29 +1,29 @@
// Copyright (c) The Avalonia Project. All rights reserved. // Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System; using System;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Native; using Avalonia.Native;
namespace Avalonia namespace Avalonia
{ {
public static class AvaloniaNativePlatformExtensions public static class AvaloniaNativePlatformExtensions
{ {
public static T UseAvaloniaNative<T>(this T builder, public static T UseAvaloniaNative<T>(this T builder,
string libraryPath = null, string libraryPath = null,
Action<AvaloniaNativeOptions> configure = null) Action<AvaloniaNativeOptions> configure = null)
where T : AppBuilderBase<T>, new() where T : AppBuilderBase<T>, new()
{ {
if (libraryPath == null) if (libraryPath == null)
{ {
builder.UseWindowingSubsystem(() => AvaloniaNativePlatform.Initialize(configure)); builder.UseWindowingSubsystem(() => AvaloniaNativePlatform.Initialize(configure));
} }
else else
{ {
builder.UseWindowingSubsystem(() => AvaloniaNativePlatform.Initialize(libraryPath, configure)); builder.UseWindowingSubsystem(() => AvaloniaNativePlatform.Initialize(libraryPath, configure));
} }
return builder; return builder;
} }
} }
} }

4
src/Avalonia.Native/PlatformThreadingInterface.cs

@ -1,4 +1,4 @@
// Copyright (c) The Avalonia Project. All rights reserved. // Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System; using System;
@ -49,7 +49,7 @@ namespace Avalonia.Native
_native = native; _native = native;
using (var cb = new SignaledCallback(this)) using (var cb = new SignaledCallback(this))
_native.SignaledCallback = cb; _native.SignaledCallback = cb;
} }
public bool CurrentThreadIsLoopThread => _native.CurrentThreadIsLoopThread; public bool CurrentThreadIsLoopThread => _native.CurrentThreadIsLoopThread;

40
src/Avalonia.Native/ScreenImpl.cs

@ -1,44 +1,44 @@
// Copyright (c) The Avalonia Project. All rights reserved. // Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System; using System;
using Avalonia.Native.Interop; using Avalonia.Native.Interop;
using Avalonia.Platform; using Avalonia.Platform;
namespace Avalonia.Native namespace Avalonia.Native
{ {
class ScreenImpl : IScreenImpl, IDisposable class ScreenImpl : IScreenImpl, IDisposable
{ {
private IAvnScreens _native; private IAvnScreens _native;
public ScreenImpl(IAvnScreens native) public ScreenImpl(IAvnScreens native)
{ {
_native = native; _native = native;
} }
public int ScreenCount => _native.GetScreenCount(); public int ScreenCount => _native.GetScreenCount();
public Screen[] AllScreens public Screen[] AllScreens
{ {
get get
{ {
var count = ScreenCount; var count = ScreenCount;
var result = new Screen[count]; var result = new Screen[count];
for(int i = 0; i < count; i++) for(int i = 0; i < count; i++)
{ {
var screen = _native.GetScreen(i); var screen = _native.GetScreen(i);
result[i] = new Screen(screen.Bounds.ToAvaloniaRect(), screen.WorkingArea.ToAvaloniaRect(), screen.Primary); result[i] = new Screen(screen.Bounds.ToAvaloniaRect(), screen.WorkingArea.ToAvaloniaRect(), screen.Primary);
} }
return result; return result;
} }
} }
public void Dispose () public void Dispose ()
{ {
_native.Dispose(); _native.Dispose();
_native = null; _native = null;
} }
} }

Loading…
Cancel
Save