Support setting notification tray icon as a png

This commit is contained in:
Daniel Clark
2021-02-14 22:03:12 +00:00
parent 50033d9aa3
commit b920a4622a
7 changed files with 16 additions and 5 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -133,8 +133,8 @@
</AppxManifest>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\Icon-Light.ico" />
<Content Include="Assets\Icon.ico" />
<Content Include="Assets\notification-icon-light.png" />
<Content Include="Assets\notification-icon.png" />
<Content Include="Properties\Default.rd.xml" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
+3 -1
View File
@@ -3,7 +3,9 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:TheXamlGuy.NotificationFlyout.Uwp.UI.Controls"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls">
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
IconSource="/Assets/notification-icon.png"
LightIconSource="/Assets/notification-icon-light.png">
<controls:NotificationFlyout.FlyoutPresenterStyle>
<Style TargetType="controls:NotificationFlyoutPresenter">
<Setter Property="CornerRadius" Value="8" />
@@ -18,16 +18,25 @@ namespace TheXamlGuy.NotificationFlyout.Shared.UI.Extensions
var uri = $"{AppDomain.CurrentDomain.BaseDirectory}{bitmapImage.UriSource}".Replace("ms-appx:///", "").Replace("/", "\\");
using var stream = File.OpenRead(uri);
return new Icon(stream, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
return ExtractIcon(dpi, stream);
}
else
{
var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(bitmapImage.UriSource);
using var stream = await storageFile.OpenStreamForReadAsync();
return new Icon(stream, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
return ExtractIcon(dpi, stream);
}
}
private static Icon ExtractIcon(uint dpi, Stream stream)
{
var bitmap = (Bitmap)Image.FromStream(stream);
var icon = Icon.FromHandle(bitmap.GetHicon());
return new Icon(icon, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
}
private enum SystemMetricFlag : int
{
SM_CXICON = 11,