diff --git a/Avalonia.sln b/Avalonia.sln
index 7cf2cf3b8a..88914fe188 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2024
+VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
EndProject
@@ -11,7 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Layout", "src\Aval
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windows", "Windows", "{B39A8919-9F95-48FE-AD7B-76E08B509888}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Win32", "src\Windows\Avalonia.Win32\Avalonia.Win32.csproj", "{811A76CF-1CF6-440F-963B-BBE31BD72A82}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Win32", "src\Windows\Avalonia.Win32\Avalonia.Win32.csproj", "{811A76CF-1CF6-440F-963B-BBE31BD72A82}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1", "src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj", "{3E908F67-5543-4879-A1DC-08EACE79B3CD}"
EndProject
@@ -126,10 +126,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RenderTest", "samples\Rende
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Android", "samples\ControlCatalog.Android\ControlCatalog.Android.csproj", "{29132311-1848-4FD6-AE0C-4FF841151BD3}"
EndProject
-Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Avalonia.Win32.Shared", "src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.shproj", "{9DEFC6B7-845B-4D8F-AFC0-D32BF0032B8C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Win32.NetStandard", "src\Windows\Avalonia.Win32.NetStandard\Avalonia.Win32.NetStandard.csproj", "{40759A76-D0F2-464E-8000-6FF0F5C4BD7C}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetCoreRuntime", "src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj", "{7863EA94-F0FB-4386-BF8C-E5BFA761560A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia", "src\Skia\Avalonia.Skia\Avalonia.Skia.csproj", "{7D2D3083-71DD-4CC9-8907-39A0D86FB322}"
@@ -196,14 +192,11 @@ Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4
- src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4
src\Shared\RenderHelpers\RenderHelpers.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4
- src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{811a76cf-1cf6-440f-963b-bbe31bd72a82}*SharedItemsImports = 4
- src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{9defc6b7-845b-4d8f-afc0-d32bf0032b8c}*SharedItemsImports = 13
tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{dabfd304-d6a4-4752-8123-c2ccf7ac7831}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{e4d9629c-f168-4224-3f51-a5e482ffbc42}*SharedItemsImports = 13
EndGlobalSection
@@ -369,6 +362,7 @@ Global
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|x86.ActiveCfg = Debug|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Debug|x86.Build.0 = Debug|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -378,6 +372,7 @@ Global
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|x86.ActiveCfg = Release|Any CPU
{811A76CF-1CF6-440F-963B-BBE31BD72A82}.Release|x86.Build.0 = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
@@ -1994,46 +1989,6 @@ Global
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|x86.ActiveCfg = Release|Any CPU
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|x86.Build.0 = Release|Any CPU
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|x86.Deploy.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|NetCoreOnly.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|NetCoreOnly.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Ad-Hoc|x86.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|iPhone.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|NetCoreOnly.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|NetCoreOnly.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|x86.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.AppStore|x86.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|iPhone.Build.0 = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Debug|x86.Build.0 = Debug|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|Any CPU.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|iPhone.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|iPhone.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|NetCoreOnly.Build.0 = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|x86.ActiveCfg = Release|Any CPU
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C}.Release|x86.Build.0 = Release|Any CPU
{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -2623,8 +2578,6 @@ Global
{C7A69145-60B6-4882-97D6-A3921DD43978} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9}
{F1FDC5B0-4654-416F-AE69-E3E9BBD87801} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{29132311-1848-4FD6-AE0C-4FF841151BD3} = {9B9E3891-2366-4253-A952-D08BCEB71098}
- {9DEFC6B7-845B-4D8F-AFC0-D32BF0032B8C} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
- {40759A76-D0F2-464E-8000-6FF0F5C4BD7C} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
{7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
{BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {B9894058-278A-46B5-B6ED-AD613FCC03B3}
{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098}
diff --git a/packages.cake b/packages.cake
index bc290fce22..134340f459 100644
--- a/packages.cake
+++ b/packages.cake
@@ -376,8 +376,7 @@ public class Packages
},
Files = new []
{
- new NuSpecContent { Source = "Avalonia.Win32/bin/" + parameters.DirSuffix + "/Avalonia.Win32.dll", Target = "lib/net45" },
- new NuSpecContent { Source = "Avalonia.Win32.NetStandard/bin/" + parameters.DirSuffix + "/netstandard2.0/Avalonia.Win32.dll", Target = "lib/netstandard2.0" }
+ new NuSpecContent { Source = "Avalonia.Win32/bin/" + parameters.DirSuffix + "/netstandard2.0/Avalonia.Win32.dll", Target = "lib/netstandard2.0" }
},
BasePath = context.Directory("./src/Windows"),
OutputDirectory = parameters.NugetRoot
diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
index 8630e7b228..a7586ac7ac 100644
--- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
+++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/src/Windows/Avalonia.Win32.Interop/Avalonia.Win32.Interop.csproj b/src/Windows/Avalonia.Win32.Interop/Avalonia.Win32.Interop.csproj
index 368e5986b2..7b480ef328 100644
--- a/src/Windows/Avalonia.Win32.Interop/Avalonia.Win32.Interop.csproj
+++ b/src/Windows/Avalonia.Win32.Interop/Avalonia.Win32.Interop.csproj
@@ -34,6 +34,7 @@
+
@@ -48,6 +49,9 @@
UnmanagedMethods.cs
+
+ Component
+
diff --git a/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs b/src/Windows/Avalonia.Win32.Interop/WinForms/WinFormsAvaloniaControlHost.cs
similarity index 99%
rename from src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs
rename to src/Windows/Avalonia.Win32.Interop/WinForms/WinFormsAvaloniaControlHost.cs
index a484d6c0d2..fe626f4d38 100644
--- a/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs
+++ b/src/Windows/Avalonia.Win32.Interop/WinForms/WinFormsAvaloniaControlHost.cs
@@ -1,7 +1,6 @@
using System;
using System.ComponentModel;
using System.Windows.Forms;
-using Avalonia.Controls;
using Avalonia.Controls.Embedding;
using Avalonia.Input;
using Avalonia.VisualTree;
diff --git a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj
deleted file mode 100644
index bae634b030..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- netstandard2.0
- False
- false
- Avalonia.Win32
- Avalonia.Win32
-
-
- true
- full
- false
- bin\Debug\
- TRACE;DEBUG;NETSTANDARD
- prompt
- 4
- true
-
-
- pdbonly
- true
- bin\Release\
- TRACE;NETSTANDARD
- prompt
- 4
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Windows/Avalonia.Win32.NetStandard/ComStreamWrapper.cs b/src/Windows/Avalonia.Win32.NetStandard/ComStreamWrapper.cs
deleted file mode 100644
index 083021f58d..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/ComStreamWrapper.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-//
-// System.Drawing.ComIStreamWrapper.cs
-//
-// Author:
-// Kornél Pál
-//
-// Copyright (C) 2005-2008 Kornél Pál
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.IO;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Runtime.InteropServices.ComTypes;
-using STATSTG = System.Runtime.InteropServices.ComTypes.STATSTG;
-
-namespace Avalonia.Win32
-{
- // Stream to IStream wrapper for COM interop
- internal sealed class ComIStreamWrapper : IStream
- {
- private const int STG_E_INVALIDFUNCTION = unchecked((int)0x80030001);
-
- private readonly Stream baseStream;
- private long position = -1;
-
- internal ComIStreamWrapper(Stream stream)
- {
- baseStream = stream;
- }
-
- private void SetSizeToPosition()
- {
- if (position != -1)
- {
- if (position > baseStream.Length)
- baseStream.SetLength(position);
- baseStream.Position = position;
- position = -1;
- }
- }
-
- public void Read(byte[] pv, int cb, IntPtr pcbRead)
- {
- int read = 0;
-
- if (cb != 0)
- {
- SetSizeToPosition();
- read = baseStream.Read(pv, 0, cb);
- }
-
- if (pcbRead != IntPtr.Zero)
- Marshal.WriteInt32(pcbRead, read);
- }
-
- public void Write(byte[] pv, int cb, IntPtr pcbWritten)
- {
- if (cb != 0)
- {
- SetSizeToPosition();
- baseStream.Write(pv, 0, cb);
- }
-
- if (pcbWritten != IntPtr.Zero)
- Marshal.WriteInt32(pcbWritten, cb);
- }
-
- public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition)
- {
- long length = baseStream.Length;
- long newPosition;
-
- switch ((SeekOrigin)dwOrigin)
- {
- case SeekOrigin.Begin:
- newPosition = dlibMove;
- break;
- case SeekOrigin.Current:
- if (position == -1)
- newPosition = baseStream.Position + dlibMove;
- else
- newPosition = position + dlibMove;
- break;
- case SeekOrigin.End:
- newPosition = length + dlibMove;
- break;
- default:
- throw new COMException(null, STG_E_INVALIDFUNCTION);
- }
-
- if (newPosition > length)
- position = newPosition;
- else
- {
- baseStream.Position = newPosition;
- position = -1;
- }
-
- if (plibNewPosition != IntPtr.Zero)
- Marshal.WriteInt64(plibNewPosition, newPosition);
- }
-
- public void SetSize(long libNewSize)
- {
- baseStream.SetLength(libNewSize);
- }
-
- public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
- {
- byte[] buffer;
- long written = 0;
- int read;
- int count;
-
- if (cb != 0)
- {
- if (cb < 4096)
- count = (int)cb;
- else
- count = 4096;
- buffer = new byte[count];
- SetSizeToPosition();
- while (true)
- {
- if ((read = baseStream.Read(buffer, 0, count)) == 0)
- break;
- pstm.Write(buffer, read, IntPtr.Zero);
- written += read;
- if (written >= cb)
- break;
- if (cb - written < 4096)
- count = (int)(cb - written);
- }
- }
-
- if (pcbRead != IntPtr.Zero)
- Marshal.WriteInt64(pcbRead, written);
- if (pcbWritten != IntPtr.Zero)
- Marshal.WriteInt64(pcbWritten, written);
- }
-
- public void Commit(int grfCommitFlags)
- {
- baseStream.Flush();
- SetSizeToPosition();
- }
-
- public void Revert()
- {
- throw new COMException(null, STG_E_INVALIDFUNCTION);
- }
-
- public void LockRegion(long libOffset, long cb, int dwLockType)
- {
- throw new COMException(null, STG_E_INVALIDFUNCTION);
- }
-
- public void UnlockRegion(long libOffset, long cb, int dwLockType)
- {
- throw new COMException(null, STG_E_INVALIDFUNCTION);
- }
-
- public void Stat(out STATSTG pstatstg, int grfStatFlag)
- {
- pstatstg = new STATSTG();
- pstatstg.cbSize = baseStream.Length;
- }
-
- public void Clone(out IStream ppstm)
- {
- ppstm = null;
- throw new COMException(null, STG_E_INVALIDFUNCTION);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Windows/Avalonia.Win32.NetStandard/Gdip.cs b/src/Windows/Avalonia.Win32.NetStandard/Gdip.cs
deleted file mode 100644
index b3d1c28689..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/Gdip.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-// Code copy-pasted from from Mono / System.Drawing.*.cs
-// Original license below:
-//
-// Authors:
-// Alexandre Pigolkine (pigolkine@gmx.de)
-// Jordi Mas (jordi@ximian.com)
-// Sanjay Gupta (gsanjay@novell.com)
-// Ravindra (rkumar@novell.com)
-// Peter Dennis Bartok (pbartok@novell.com)
-// Sebastien Pouliot
-//
-//
-// Copyright (C) 2004, 2007 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Runtime.InteropServices.ComTypes;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Avalonia.Win32
-{
- static class Gdip
- {
- public enum Status
- {
- Ok = 0,
- GenericError = 1,
- InvalidParameter = 2,
- OutOfMemory = 3,
- ObjectBusy = 4,
- InsufficientBuffer = 5,
- NotImplemented = 6,
- Win32Error = 7,
- WrongState = 8,
- Aborted = 9,
- FileNotFound = 10,
- ValueOverflow = 11,
- AccessDenied = 12,
- UnknownImageFormat = 13,
- FontFamilyNotFound = 14,
- FontStyleNotFound = 15,
- NotTrueTypeFont = 16,
- UnsupportedGdiplusVersion = 17,
- GdiplusNotInitialized = 18,
- PropertyNotFound = 19,
- PropertyNotSupported = 20,
- ProfileNotFound = 21
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct GdiplusStartupInput
- {
- // internalted to silent compiler
- internal uint GdiplusVersion;
- internal IntPtr DebugEventCallback;
- internal int SuppressBackgroundThread;
- internal int SuppressExternalCodecs;
-
- internal static GdiplusStartupInput MakeGdiplusStartupInput()
- {
- GdiplusStartupInput result = new GdiplusStartupInput();
- result.GdiplusVersion = 1;
- result.DebugEventCallback = IntPtr.Zero;
- result.SuppressBackgroundThread = 0;
- result.SuppressExternalCodecs = 0;
- return result;
- }
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct GdiplusStartupOutput
- {
- internal IntPtr NotificationHook;
- internal IntPtr NotificationUnhook;
-
- internal static GdiplusStartupOutput MakeGdiplusStartupOutput()
- {
- GdiplusStartupOutput result = new GdiplusStartupOutput();
- result.NotificationHook = result.NotificationUnhook = IntPtr.Zero;
- return result;
- }
- }
-
-
- [DllImport("gdiplus.dll")]
- public static extern Status GdiplusStartup(ref ulong token, ref GdiplusStartupInput input, ref GdiplusStartupOutput output);
-
- [DllImport("gdiplus.dll", ExactSpelling = true, CharSet = CharSet.Unicode)]
- public static extern Status GdipLoadImageFromStream([MarshalAs(UnmanagedType.Interface, MarshalTypeRef = typeof(IStream))] IStream stream, out IntPtr image);
- [DllImport("gdiplus.dll")]
- public static extern Status GdipCreateHICONFromBitmap(IntPtr bmp, out IntPtr HandleIcon);
-
- [DllImport("gdiplus.dll")]
- internal static extern Status GdipDisposeImage(IntPtr image);
-
- static Gdip()
- {
- ulong token = 0;
- var input = GdiplusStartupInput.MakeGdiplusStartupInput();
- var output = GdiplusStartupOutput.MakeGdiplusStartupOutput();
- GdiplusStartup(ref token, ref input, ref output);
- }
- }
-}
diff --git a/src/Windows/Avalonia.Win32.NetStandard/IconImpl.cs b/src/Windows/Avalonia.Win32.NetStandard/IconImpl.cs
deleted file mode 100644
index 49d039e655..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/IconImpl.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Runtime.InteropServices.ComTypes;
-using System.Text;
-using System.Threading.Tasks;
-using Avalonia.Platform;
-
-namespace Avalonia.Win32
-{
- public class IconImpl : IWindowIconImpl
- {
- private readonly MemoryStream _ms;
-
- public IconImpl(Stream data)
- {
- _ms = new MemoryStream();
- data.CopyTo(_ms);
- _ms.Seek(0, SeekOrigin.Begin);
- IntPtr bitmap;
- var status = Gdip.GdipLoadImageFromStream(new ComIStreamWrapper(_ms), out bitmap);
- if (status != Gdip.Status.Ok)
- throw new Exception("Unable to load icon, gdip status: " + (int) status);
- IntPtr icon;
- status = Gdip.GdipCreateHICONFromBitmap(bitmap, out icon);
- if (status != Gdip.Status.Ok)
- throw new Exception("Unable to create HICON, gdip status: " + (int)status);
- Gdip.GdipDisposeImage(bitmap);
- HIcon = icon;
- }
-
- public IntPtr HIcon { get;}
- public void Save(Stream outputStream)
- {
- lock (_ms)
- {
- _ms.Seek(0, SeekOrigin.Begin);
- _ms.CopyTo(outputStream);
- }
- }
-
- }
-}
diff --git a/src/Windows/Avalonia.Win32.NetStandard/NativeWin32Platform.cs b/src/Windows/Avalonia.Win32.NetStandard/NativeWin32Platform.cs
deleted file mode 100644
index 2695a5b8b6..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/NativeWin32Platform.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Avalonia.Platform;
-
-namespace Avalonia.Win32
-{
- partial class Win32Platform
- {
- //TODO: An actual implementation
- public IWindowIconImpl LoadIcon(string fileName)
- {
- //No file IO for netstandard, still waiting for proper net core tooling
- throw new NotSupportedException();
- }
-
- public IWindowIconImpl LoadIcon(Stream stream) => new IconImpl(stream);
-
- public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
- {
- var ms = new MemoryStream();
- bitmap.Save(ms);
- ms.Seek(0, SeekOrigin.Begin);
- return new IconImpl(ms);
- }
- }
-}
diff --git a/src/Windows/Avalonia.Win32.NetStandard/Win32Exception.cs b/src/Windows/Avalonia.Win32.NetStandard/Win32Exception.cs
deleted file mode 100644
index 45926a881d..0000000000
--- a/src/Windows/Avalonia.Win32.NetStandard/Win32Exception.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Avalonia.Win32.NetStandard
-{
- class AvaloniaWin32Exception : Exception
- {
- }
-}
diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.Shared.projitems b/src/Windows/Avalonia.Win32/Avalonia.Win32.Shared.projitems
deleted file mode 100644
index cca6f5acf1..0000000000
--- a/src/Windows/Avalonia.Win32/Avalonia.Win32.Shared.projitems
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- true
- 9defc6b7-845b-4d8f-afc0-d32bf0032b8c
-
-
- Avalonia.Win32.Shared
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Properties\SharedAssemblyInfo.cs
-
-
-
\ No newline at end of file
diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj
index 14f6211d68..e055f3c20f 100644
--- a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj
+++ b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj
@@ -1,103 +1,19 @@
-
-
-
+
- Debug
- AnyCPU
- {811A76CF-1CF6-440F-963B-BBE31BD72A82}
- Library
- Properties
- Avalonia.Win32
- Avalonia.Win32
- v4.6.1
- 512
-
-
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
- bin\Debug\Avalonia.Win32.xml
- true
- CS1591
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- bin\Release\Avalonia.Win32.xml
+ netstandard2.0
true
- CS1591
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Component
-
-
-
+
+
+
+
+
+
+
+
-
- {D211E587-D8BC-45B9-95A4-F297C8FA5200}
- Avalonia.Animation
-
-
- {B09B78D8-9B26-48B0-9149-D64A2F120F3F}
- Avalonia.Base
-
-
- {D2221C82-4A25-4583-9B43-D791E3F6820C}
- Avalonia.Controls
-
-
- {7062AE20-5DCC-4442-9645-8195BDECE63E}
- Avalonia.Diagnostics
-
-
- {62024B2D-53EB-4638-B26B-85EEAA54866E}
- Avalonia.Input
-
-
- {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}
- Avalonia.Interactivity
-
-
- {42472427-4774-4C81-8AFF-9F27B8E31721}
- Avalonia.Layout
-
-
- {EB582467-6ABB-43A1-B052-E981BA910E3A}
- Avalonia.Visuals
-
-
- {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}
- Avalonia.Styling
-
+
-
-
-
\ No newline at end of file
diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
index a0518cf92e..f13dd3272c 100644
--- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
+++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
@@ -1098,7 +1098,7 @@ namespace Avalonia.Win32.Interop
}
}
- [StructLayout(LayoutKind.Sequential)]
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WNDCLASSEX
{
public int cbSize;
diff --git a/src/Windows/Avalonia.Win32/Properties/AssemblyInfo.cs b/src/Windows/Avalonia.Win32/Properties/AssemblyInfo.cs
index 5b4d2cef23..38ec891f76 100644
--- a/src/Windows/Avalonia.Win32/Properties/AssemblyInfo.cs
+++ b/src/Windows/Avalonia.Win32/Properties/AssemblyInfo.cs
@@ -3,7 +3,5 @@
using Avalonia.Platform;
using Avalonia.Win32;
-using System.Reflection;
-[assembly: AssemblyTitle("Avalonia.Win32")]
[assembly: ExportWindowingSubsystem(OperatingSystemType.WinNT, 1, "Win32", typeof(Win32Platform), nameof(Win32Platform.Initialize))]
diff --git a/src/Windows/Avalonia.Win32/Settings.StyleCop b/src/Windows/Avalonia.Win32/Settings.StyleCop
deleted file mode 100644
index 5bd6cda777..0000000000
--- a/src/Windows/Avalonia.Win32/Settings.StyleCop
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs
index a490e59cb7..4e1ba618a8 100644
--- a/src/Windows/Avalonia.Win32/Win32Platform.cs
+++ b/src/Windows/Avalonia.Win32/Win32Platform.cs
@@ -16,6 +16,7 @@ using Avalonia.Win32.Interop;
using Avalonia.Controls;
using Avalonia.Rendering;
using Avalonia.Threading;
+using System.IO;
#if NETSTANDARD
using Win32Exception = Avalonia.Win32.NetStandard.AvaloniaWin32Exception;
#else
@@ -40,7 +41,7 @@ namespace Avalonia
namespace Avalonia.Win32
{
- partial class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, IWindowingPlatform, IPlatformIconLoader
+ class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, IWindowingPlatform, IPlatformIconLoader
{
private static readonly Win32Platform s_instance = new Win32Platform();
private static uint _uiThread;
@@ -205,5 +206,40 @@ namespace Avalonia.Win32
{
return new PopupImpl();
}
+
+ public IWindowIconImpl LoadIcon(string fileName)
+ {
+ using (var stream = File.OpenRead(fileName))
+ {
+ return CreateIconImpl(stream);
+ }
+ }
+
+ public IWindowIconImpl LoadIcon(Stream stream)
+ {
+ return CreateIconImpl(stream);
+ }
+
+ public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
+ {
+ using (var memoryStream = new MemoryStream())
+ {
+ bitmap.Save(memoryStream);
+ return new IconImpl(new System.Drawing.Bitmap(memoryStream));
+ }
+ }
+
+ private static IconImpl CreateIconImpl(Stream stream)
+ {
+ try
+ {
+ return new IconImpl(new System.Drawing.Icon(stream));
+ }
+ catch (ArgumentException)
+ {
+ return new IconImpl(new System.Drawing.Bitmap(stream));
+ }
+ }
+
}
}
diff --git a/src/Windows/Avalonia.Win32/WinFormsWin32Platform.cs b/src/Windows/Avalonia.Win32/WinFormsWin32Platform.cs
deleted file mode 100644
index ec666e1f37..0000000000
--- a/src/Windows/Avalonia.Win32/WinFormsWin32Platform.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Avalonia.Platform;
-
-namespace Avalonia.Win32
-{
- partial class Win32Platform
- {
- public IWindowIconImpl LoadIcon(string fileName)
- {
- using (var stream = File.OpenRead(fileName))
- {
- return CreateImpl(stream);
- }
- }
-
- public IWindowIconImpl LoadIcon(Stream stream)
- {
- return CreateImpl(stream);
- }
-
- public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
- {
- using (var memoryStream = new MemoryStream())
- {
- bitmap.Save(memoryStream);
- return new IconImpl(new System.Drawing.Bitmap(memoryStream));
- }
- }
-
- private static IconImpl CreateImpl(Stream stream)
- {
- try
- {
- return new IconImpl(new System.Drawing.Icon(stream));
- }
- catch (ArgumentException)
- {
- return new IconImpl(new System.Drawing.Bitmap(stream));
- }
- }
- }
-}
diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs
index 348468e0e7..3ba926b42a 100644
--- a/src/Windows/Avalonia.Win32/WindowImpl.cs
+++ b/src/Windows/Avalonia.Win32/WindowImpl.cs
@@ -1,29 +1,24 @@
// 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.
-using Avalonia.Input;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
-using System.Linq;
+using System.Reactive.Disposables;
using System.Runtime.InteropServices;
using Avalonia.Controls;
-using System.Reactive.Disposables;
+using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Platform;
+using Avalonia.Rendering;
using Avalonia.Win32.Input;
using Avalonia.Win32.Interop;
using static Avalonia.Win32.Interop.UnmanagedMethods;
-using Avalonia.Rendering;
-using Avalonia.Threading;
-#if NETSTANDARD
-using Win32Exception = Avalonia.Win32.NetStandard.AvaloniaWin32Exception;
-#endif
namespace Avalonia.Win32
{
- class WindowImpl : IWindowImpl
+ public class WindowImpl : IWindowImpl
{
private static readonly List s_instances = new List();
@@ -646,7 +641,7 @@ namespace Avalonia.Win32
// Ensure that the delegate doesn't get garbage collected by storing it as a field.
_wndProcDelegate = new UnmanagedMethods.WndProc(WndProc);
- _className = Guid.NewGuid().ToString();
+ _className = "Avalonia-" + Guid.NewGuid();
UnmanagedMethods.WNDCLASSEX wndClassEx = new UnmanagedMethods.WNDCLASSEX
{