Browse Source

Merge pull request #701 from jkoritzinsky/win32-mipmap-icon-support

Use mipmaps for Icons when icon is an .ico file.
pull/722/head
Jeremy Koritzinsky 10 years ago
committed by GitHub
parent
commit
3c39d7f9e1
  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 System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -9,11 +10,19 @@ namespace Avalonia.Win32
{
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)
{
var icon = new System.Drawing.Bitmap(fileName);
return new IconImpl(icon);
using (var stream = File.OpenRead(fileName))
{
return CreateImpl(stream);
}
}
public IWindowIconImpl LoadIcon(Stream stream)
{
var icon = new System.Drawing.Bitmap(stream);
return new IconImpl(icon);
return CreateImpl(stream);
}
public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
@ -207,5 +208,17 @@ namespace Avalonia.Win32
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)
{
var impl = (IconImpl)icon;
var nativeIcon = impl.IconBitmap;
var hIcon = impl.HIcon;
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)

Loading…
Cancel
Save