Browse Source

Merge branch 'master' of https://github.com/AvaloniaUI/Avalonia

pull/722/head
Steven Kirk 10 years ago
parent
commit
603640ea66
  1. 15
      src/Windows/Avalonia.Win32/IconImpl.cs
  2. 21
      src/Windows/Avalonia.Win32/Win32Platform.cs
  3. 4
      src/Windows/Avalonia.Win32/WindowImpl.cs

15
src/Windows/Avalonia.Win32/IconImpl.cs

@ -1,6 +1,7 @@
using Avalonia.Platform; using Avalonia.Platform;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -9,11 +10,19 @@ namespace Avalonia.Win32
{ {
class IconImpl : IWindowIconImpl class IconImpl : IWindowIconImpl
{ {
public IconImpl(System.Drawing.Bitmap iconBitmap) private Bitmap bitmap;
private Icon icon;
public IconImpl(Bitmap bitmap)
{
this.bitmap = bitmap;
}
public IconImpl(Icon icon)
{ {
IconBitmap = iconBitmap; this.icon = icon;
} }
public System.Drawing.Bitmap IconBitmap { get; } public IntPtr HIcon => icon?.Handle ?? bitmap.GetHicon();
} }
} }

21
src/Windows/Avalonia.Win32/Win32Platform.cs

@ -189,14 +189,15 @@ namespace Avalonia.Win32
public IWindowIconImpl LoadIcon(string fileName) public IWindowIconImpl LoadIcon(string fileName)
{ {
var icon = new System.Drawing.Bitmap(fileName); using (var stream = File.OpenRead(fileName))
return new IconImpl(icon); {
return CreateImpl(stream);
}
} }
public IWindowIconImpl LoadIcon(Stream stream) public IWindowIconImpl LoadIcon(Stream stream)
{ {
var icon = new System.Drawing.Bitmap(stream); return CreateImpl(stream);
return new IconImpl(icon);
} }
public IWindowIconImpl LoadIcon(IBitmapImpl bitmap) public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
@ -207,5 +208,17 @@ namespace Avalonia.Win32
return new IconImpl(new System.Drawing.Bitmap(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));
}
}
} }
} }

4
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -684,9 +684,9 @@ namespace Avalonia.Win32
public void SetIcon(IWindowIconImpl icon) public void SetIcon(IWindowIconImpl icon)
{ {
var impl = (IconImpl)icon; var impl = (IconImpl)icon;
var nativeIcon = impl.IconBitmap; var hIcon = impl.HIcon;
UnmanagedMethods.PostMessage(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_SETICON, UnmanagedMethods.PostMessage(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_SETICON,
new IntPtr((int)UnmanagedMethods.Icons.ICON_BIG), nativeIcon.GetHicon()); new IntPtr((int)UnmanagedMethods.Icons.ICON_BIG), hIcon);
} }
private static int ToInt32(IntPtr ptr) private static int ToInt32(IntPtr ptr)

Loading…
Cancel
Save