committed by
GitHub
41 changed files with 476 additions and 932 deletions
@ -0,0 +1,5 @@ |
|||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="System.Drawing.Common" Version="4.5.0-preview1-25914-04" /> |
||||
|
</ItemGroup> |
||||
|
</Project> |
||||
@ -0,0 +1,127 @@ |
|||||
|
// 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 System; |
||||
|
using System.Collections; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.Specialized; |
||||
|
using System.Reactive; |
||||
|
using System.Reactive.Disposables; |
||||
|
using System.Reactive.Linq; |
||||
|
using System.Reactive.Subjects; |
||||
|
using Avalonia.Utilities; |
||||
|
|
||||
|
namespace Avalonia.Collections |
||||
|
{ |
||||
|
public static class NotifyCollectionChangedExtensions |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Gets a weak observable for the CollectionChanged event.
|
||||
|
/// </summary>
|
||||
|
/// <param name="collection">The collection.</param>
|
||||
|
/// <returns>An observable.</returns>
|
||||
|
public static IObservable<NotifyCollectionChangedEventArgs> GetWeakCollectionChangedObservable( |
||||
|
this INotifyCollectionChanged collection) |
||||
|
{ |
||||
|
Contract.Requires<ArgumentNullException>(collection != null); |
||||
|
|
||||
|
return new WeakCollectionChangedObservable(new WeakReference<INotifyCollectionChanged>(collection)); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Subcribes to the CollectionChanged event using a weak subscription.
|
||||
|
/// </summary>
|
||||
|
/// <param name="collection">The collection.</param>
|
||||
|
/// <param name="handler">
|
||||
|
/// An action called when the collection event is raised.
|
||||
|
/// </param>
|
||||
|
/// <returns>A disposable used to terminate the subscription.</returns>
|
||||
|
public static IDisposable WeakSubscribe( |
||||
|
this INotifyCollectionChanged collection, |
||||
|
NotifyCollectionChangedEventHandler handler) |
||||
|
{ |
||||
|
Contract.Requires<ArgumentNullException>(collection != null); |
||||
|
Contract.Requires<ArgumentNullException>(handler != null); |
||||
|
|
||||
|
return |
||||
|
collection.GetWeakCollectionChangedObservable() |
||||
|
.Subscribe(e => handler.Invoke(collection, e)); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Subcribes to the CollectionChanged event using a weak subscription.
|
||||
|
/// </summary>
|
||||
|
/// <param name="collection">The collection.</param>
|
||||
|
/// <param name="handler">
|
||||
|
/// An action called when the collection event is raised.
|
||||
|
/// </param>
|
||||
|
/// <returns>A disposable used to terminate the subscription.</returns>
|
||||
|
public static IDisposable WeakSubscribe( |
||||
|
this INotifyCollectionChanged collection, |
||||
|
Action<NotifyCollectionChangedEventArgs> handler) |
||||
|
{ |
||||
|
Contract.Requires<ArgumentNullException>(collection != null); |
||||
|
Contract.Requires<ArgumentNullException>(handler != null); |
||||
|
|
||||
|
return |
||||
|
collection.GetWeakCollectionChangedObservable() |
||||
|
.Subscribe(handler); |
||||
|
} |
||||
|
|
||||
|
private class WeakCollectionChangedObservable : ObservableBase<NotifyCollectionChangedEventArgs>, |
||||
|
IWeakSubscriber<NotifyCollectionChangedEventArgs> |
||||
|
{ |
||||
|
private WeakReference<INotifyCollectionChanged> _sourceReference; |
||||
|
private readonly Subject<NotifyCollectionChangedEventArgs> _changed = new Subject<NotifyCollectionChangedEventArgs>(); |
||||
|
|
||||
|
private int _count; |
||||
|
|
||||
|
public WeakCollectionChangedObservable(WeakReference<INotifyCollectionChanged> source) |
||||
|
{ |
||||
|
_sourceReference = source; |
||||
|
} |
||||
|
|
||||
|
public void OnEvent(object sender, NotifyCollectionChangedEventArgs e) |
||||
|
{ |
||||
|
_changed.OnNext(e); |
||||
|
} |
||||
|
|
||||
|
protected override IDisposable SubscribeCore(IObserver<NotifyCollectionChangedEventArgs> observer) |
||||
|
{ |
||||
|
if (_sourceReference.TryGetTarget(out INotifyCollectionChanged instance)) |
||||
|
{ |
||||
|
if (_count++ == 0) |
||||
|
{ |
||||
|
WeakSubscriptionManager.Subscribe( |
||||
|
instance, |
||||
|
nameof(instance.CollectionChanged), |
||||
|
this); |
||||
|
} |
||||
|
|
||||
|
return Observable.Using(() => Disposable.Create(DecrementCount), _ => _changed) |
||||
|
.Subscribe(observer); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
_changed.OnCompleted(); |
||||
|
observer.OnCompleted(); |
||||
|
return Disposable.Empty; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void DecrementCount() |
||||
|
{ |
||||
|
if (--_count == 0) |
||||
|
{ |
||||
|
if (_sourceReference.TryGetTarget(out INotifyCollectionChanged instance)) |
||||
|
{ |
||||
|
WeakSubscriptionManager.Unsubscribe( |
||||
|
instance, |
||||
|
nameof(instance.CollectionChanged), |
||||
|
this); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
namespace Avalonia.Controls |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Determines the startup location of the window.
|
||||
|
/// </summary>
|
||||
|
public enum WindowStartupLocation |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// The startup location is defined by the Position property.
|
||||
|
/// </summary>
|
||||
|
Manual, |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// The startup location is the center of the screen.
|
||||
|
/// </summary>
|
||||
|
CenterScreen, |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// The startup location is the center of the owner window. If the owner window is not specified, the startup location will be <see cref="Manual"/>.
|
||||
|
/// </summary>
|
||||
|
CenterOwner |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Input.Platform; |
||||
|
using MonoMac.AppKit; |
||||
|
|
||||
|
namespace Avalonia.MonoMac |
||||
|
{ |
||||
|
class ClipboardImpl : IClipboard |
||||
|
{ |
||||
|
public Task<string> GetTextAsync() |
||||
|
{ |
||||
|
return Task.FromResult(NSPasteboard.GeneralPasteboard.GetStringForType(NSPasteboard.NSStringType)); |
||||
|
} |
||||
|
|
||||
|
public Task SetTextAsync(string text) |
||||
|
{ |
||||
|
NSPasteboard.GeneralPasteboard.ClearContents(); |
||||
|
if (text != null) |
||||
|
NSPasteboard.GeneralPasteboard.SetStringForType(text, NSPasteboard.NSStringType); |
||||
|
return Task.CompletedTask; |
||||
|
} |
||||
|
|
||||
|
public async Task ClearAsync() |
||||
|
{ |
||||
|
NSPasteboard.GeneralPasteboard.ClearContents(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -1,7 +1,6 @@ |
|||||
using System; |
using System; |
||||
using System.ComponentModel; |
using System.ComponentModel; |
||||
using System.Windows.Forms; |
using System.Windows.Forms; |
||||
using Avalonia.Controls; |
|
||||
using Avalonia.Controls.Embedding; |
using Avalonia.Controls.Embedding; |
||||
using Avalonia.Input; |
using Avalonia.Input; |
||||
using Avalonia.VisualTree; |
using Avalonia.VisualTree; |
||||
@ -1,49 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk"> |
|
||||
<PropertyGroup> |
|
||||
<TargetFramework>netstandard2.0</TargetFramework> |
|
||||
<EnableDefaultCompileItems>False</EnableDefaultCompileItems> |
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo> |
|
||||
<RootNamespace>Avalonia.Win32</RootNamespace> |
|
||||
<AssemblyName>Avalonia.Win32</AssemblyName> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> |
|
||||
<DebugSymbols>true</DebugSymbols> |
|
||||
<DebugType>full</DebugType> |
|
||||
<Optimize>false</Optimize> |
|
||||
<OutputPath>bin\Debug\</OutputPath> |
|
||||
<DefineConstants>TRACE;DEBUG;NETSTANDARD</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> |
|
||||
<DebugType>pdbonly</DebugType> |
|
||||
<Optimize>true</Optimize> |
|
||||
<OutputPath>bin\Release\</OutputPath> |
|
||||
<DefineConstants>TRACE;NETSTANDARD</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
|
||||
</PropertyGroup> |
|
||||
<ItemGroup> |
|
||||
<Folder Include="Properties\" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" /> |
|
||||
<ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<Compile Include="ComStreamWrapper.cs" /> |
|
||||
<Compile Include="Gdip.cs" /> |
|
||||
<Compile Include="IconImpl.cs" /> |
|
||||
<Compile Include="NativeWin32Platform.cs" /> |
|
||||
<Compile Include="Win32Exception.cs" /> |
|
||||
</ItemGroup> |
|
||||
<Import Project="..\Avalonia.Win32\Avalonia.Win32.Shared.projitems" Label="Shared" /> |
|
||||
</Project> |
|
||||
@ -1,197 +0,0 @@ |
|||||
//
|
|
||||
// System.Drawing.ComIStreamWrapper.cs
|
|
||||
//
|
|
||||
// Author:
|
|
||||
// Kornél Pál <http://www.kornelpal.hu/>
|
|
||||
//
|
|
||||
// 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); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -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 <sebastien@ximian.com>
|
|
||||
//
|
|
||||
//
|
|
||||
// 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); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -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); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
@ -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); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -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 |
|
||||
{ |
|
||||
} |
|
||||
} |
|
||||
@ -1,35 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||
<PropertyGroup> |
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects> |
|
||||
<HasSharedItems>true</HasSharedItems> |
|
||||
<SharedGUID>9defc6b7-845b-4d8f-afc0-d32bf0032b8c</SharedGUID> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Label="Configuration"> |
|
||||
<Import_RootNamespace>Avalonia.Win32.Shared</Import_RootNamespace> |
|
||||
</PropertyGroup> |
|
||||
<ItemGroup> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ClipboardImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)CursorFactory.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)EmbeddedWindowImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)FramebufferManager.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Input\KeyInterop.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Input\WindowsKeyboardDevice.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Input\WindowsMouseDevice.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Interop\UnmanagedMethods.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)PlatformConstants.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)PopupImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)RenderLoop.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ScreenImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)SystemDialogImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Win32Platform.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)WindowFramebuffer.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)WindowImpl.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)WinScreen.cs" /> |
|
||||
<Compile Include="$(MSBuildThisFileDirectory)..\..\Shared\WindowResizeDragHelper.cs" /> |
|
||||
<Compile Include="..\..\Shared\SharedAssemblyInfo.cs"> |
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link> |
|
||||
</Compile> |
|
||||
</ItemGroup> |
|
||||
</Project> |
|
||||
@ -1,103 +1,17 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
<Project Sdk="Microsoft.NET.Sdk"> |
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
||||
<PropertyGroup> |
<PropertyGroup> |
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
<TargetFramework>netstandard2.0</TargetFramework> |
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||
<ProjectGuid>{811A76CF-1CF6-440F-963B-BBE31BD72A82}</ProjectGuid> |
|
||||
<OutputType>Library</OutputType> |
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder> |
|
||||
<RootNamespace>Avalonia.Win32</RootNamespace> |
|
||||
<AssemblyName>Avalonia.Win32</AssemblyName> |
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> |
|
||||
<FileAlignment>512</FileAlignment> |
|
||||
<NuGetPackageImportStamp> |
|
||||
</NuGetPackageImportStamp> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||
<DebugSymbols>true</DebugSymbols> |
|
||||
<DebugType>full</DebugType> |
|
||||
<Optimize>false</Optimize> |
|
||||
<OutputPath>bin\Debug\</OutputPath> |
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
<DocumentationFile>bin\Debug\Avalonia.Win32.xml</DocumentationFile> |
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
|
||||
<NoWarn>CS1591</NoWarn> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
||||
<DebugType>pdbonly</DebugType> |
|
||||
<Optimize>true</Optimize> |
|
||||
<OutputPath>bin\Release\</OutputPath> |
|
||||
<DefineConstants>TRACE</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
<DocumentationFile>bin\Release\Avalonia.Win32.xml</DocumentationFile> |
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
||||
<NoWarn>CS1591</NoWarn> |
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> |
|
||||
</PropertyGroup> |
</PropertyGroup> |
||||
<ItemGroup> |
<ItemGroup> |
||||
<Reference Include="PresentationCore" /> |
<ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj" /> |
||||
<Reference Include="PresentationFramework" /> |
<ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" /> |
||||
<Reference Include="System" /> |
<ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" /> |
||||
<Reference Include="System.Core" /> |
<ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" /> |
||||
<Reference Include="System.Drawing" /> |
<ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" /> |
||||
<Reference Include="System.Windows.Forms" /> |
<ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj" /> |
||||
<Reference Include="Microsoft.CSharp" /> |
<ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" /> |
||||
<Reference Include="System.Windows.Forms" /> |
<ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" /> |
||||
<Reference Include="Microsoft.CSharp" /> |
|
||||
<Reference Include="System.Xaml" /> |
|
||||
<Reference Include="WindowsBase" /> |
|
||||
<Reference Include="WindowsFormsIntegration" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<Compile Include="Embedding\WinFormsAvaloniaControlHost.cs"> |
|
||||
<SubType>Component</SubType> |
|
||||
</Compile> |
|
||||
<Compile Include="IconImpl.cs" /> |
|
||||
<Compile Include="WinFormsWin32Platform.cs" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj"> |
|
||||
<Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project> |
|
||||
<Name>Avalonia.Animation</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj"> |
|
||||
<Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project> |
|
||||
<Name>Avalonia.Base</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj"> |
|
||||
<Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project> |
|
||||
<Name>Avalonia.Controls</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj"> |
|
||||
<Project>{7062AE20-5DCC-4442-9645-8195BDECE63E}</Project> |
|
||||
<Name>Avalonia.Diagnostics</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj"> |
|
||||
<Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project> |
|
||||
<Name>Avalonia.Input</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj"> |
|
||||
<Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project> |
|
||||
<Name>Avalonia.Interactivity</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj"> |
|
||||
<Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project> |
|
||||
<Name>Avalonia.Layout</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj"> |
|
||||
<Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project> |
|
||||
<Name>Avalonia.Visuals</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj"> |
|
||||
<Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project> |
|
||||
<Name>Avalonia.Styling</Name> |
|
||||
</ProjectReference> |
|
||||
</ItemGroup> |
</ItemGroup> |
||||
<Import Project="Avalonia.Win32.Shared.projitems" Label="Shared" /> |
<Import Project="$(MSBuildThisFileDirectory)\..\..\..\build\System.Drawing.Common.props" /> |
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
</Project> |
||||
<Import Project="..\..\..\build\Rx.props" /> |
|
||||
</Project> |
|
||||
|
|||||
@ -1,184 +0,0 @@ |
|||||
<StyleCopSettings Version="105"> |
|
||||
<Analyzers> |
|
||||
<Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules"> |
|
||||
<Rules> |
|
||||
<Rule Name="ElementsMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="PartialElementsMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="EnumerationItemsMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DocumentationMustContainValidXml"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementDocumentationMustHaveSummary"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="PartialElementDocumentationMustHaveSummary"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementDocumentationMustHaveSummaryText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="PartialElementDocumentationMustHaveSummaryText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementDocumentationMustNotHaveDefaultSummary"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementParametersMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementParameterDocumentationMustMatchElementParameters"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementParameterDocumentationMustDeclareParameterName"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementParameterDocumentationMustHaveText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementReturnValueMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementReturnValueDocumentationMustHaveText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="VoidReturnValueMustNotBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="GenericTypeParametersMustBeDocumented"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="GenericTypeParametersMustBeDocumentedPartialClass"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="GenericTypeParameterDocumentationMustHaveText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="PropertySummaryDocumentationMustMatchAccessors"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementDocumentationMustNotBeCopiedAndPasted"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DocumentationTextMustNotBeEmpty"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DocumentationTextMustContainWhitespace"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DocumentationMustMeetCharacterPercentage"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="DocumentationHeadersMustNotContainBlankLines"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="IncludedDocumentationXPathDoesNotExist"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="IncludeNodeDoesNotContainValidFileAndPath"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="InheritDocMustBeUsedWithInheritingClass"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
<Rule Name="ElementDocumentationMustBeSpelledCorrectly"> |
|
||||
<RuleSettings> |
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty> |
|
||||
</RuleSettings> |
|
||||
</Rule> |
|
||||
</Rules> |
|
||||
<AnalyzerSettings /> |
|
||||
</Analyzer> |
|
||||
</Analyzers> |
|
||||
</StyleCopSettings> |
|
||||
@ -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)); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue