Skip to content

Commit ec46de7

Browse files
committed
refactor: Refactored System.Drawing and SkiaSharp code.
1 parent 8b96f31 commit ec46de7

File tree

10 files changed

+57
-27
lines changed

10 files changed

+57
-27
lines changed

src/libs/H.NotifyIcon.Shared/H.NotifyIcon.Shared.projitems

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
<Compile Include="$(MSBuildThisFileDirectory)TaskbarIcon.AttachedProperties.cs" />
2323
<Compile Include="$(MSBuildThisFileDirectory)TaskbarIcon.MouseEvents.cs" />
2424
<Compile Include="$(MSBuildThisFileDirectory)Utilities\DpiUtilities.cs" />
25-
<Compile Include="$(MSBuildThisFileDirectory)Utilities\FromSystemDrawingExtensions.cs" />
26-
<Compile Include="$(MSBuildThisFileDirectory)Utilities\ImageExtensions.SystemDrawing.cs" />
27-
<Compile Include="$(MSBuildThisFileDirectory)Utilities\ToSkiaSharpExtensions.cs" />
28-
<Compile Include="$(MSBuildThisFileDirectory)Utilities\ToSystemDrawingExtensions.cs" />
2925
<Compile Include="$(MSBuildThisFileDirectory)Utilities\PngToIcoConverter.cs" />
26+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\SkiaSharp\StreamExtensions.SkiaSharp.cs" />
27+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\SkiaSharp\ToSkiaSharpExtensions.cs" />
28+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\System.Drawing\FromSystemDrawingExtensions.cs" />
29+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\System.Drawing\StreamExtensions.SystemDrawing.cs" />
30+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\System.Drawing\ToSystemDrawingExtensions.cs" />
3031
<Compile Include="$(MSBuildThisFileDirectory)TaskbarIcon.cs" />
3132
<Compile Include="$(MSBuildThisFileDirectory)TaskbarIcon.Properties.cs" />
3233
<Compile Include="$(MSBuildThisFileDirectory)Utilities\ImageExtensions.cs" />

src/libs/H.NotifyIcon.Shared/Utilities/ImageExtensions.SystemDrawing.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/libs/H.NotifyIcon.Shared/Utilities/ImageExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace H.NotifyIcon;
44

5-
internal static partial class ImageExtensions
5+
internal static class ImageExtensions
66
{
77
#if HAS_WPF
88
internal static Stream ToStream(this Uri uri)

src/libs/H.NotifyIcon.Shared/Utilities/PngToIcoConverter.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
#if HAS_SYSTEM_DRAWING
2-
namespace H.NotifyIcon;
1+
namespace H.NotifyIcon;
32

43
internal static class PngToIcoConverter
54
{
65
public static byte[] ConvertPngToIco(this byte[] data)
76
{
87
using var inStream = new MemoryStream(data);
9-
using var source = System.Drawing.Image.FromStream(inStream);
8+
var metadata = inStream.GetMetadata();
109
using var outStream = new MemoryStream();
1110

1211
// Header
@@ -25,9 +24,9 @@ public static byte[] ConvertPngToIco(this byte[] data)
2524
// Image entry
2625
{
2726
// Width
28-
outStream.WriteByte((byte)source.Width);
27+
outStream.WriteByte((byte)metadata.Width);
2928
// Height
30-
outStream.WriteByte((byte)source.Height);
29+
outStream.WriteByte((byte)metadata.Height);
3130
// Number of colors (0 = No palette)
3231
outStream.WriteByte(0);
3332
// Reserved
@@ -36,7 +35,7 @@ public static byte[] ConvertPngToIco(this byte[] data)
3635
outStream.WriteByte(1);
3736
outStream.WriteByte(0);
3837
// Bits per pixel
39-
var bppAsLittle = IntToLittle2(System.Drawing.Image.GetPixelFormatSize(source.PixelFormat));
38+
var bppAsLittle = IntToLittle2(metadata.BitsPerPixel);
4039
outStream.Write(bppAsLittle, 0, 2);
4140
// Size of data in bytes
4241
var byteCountAsLittle = IntToLittle4(data.Length);
@@ -69,4 +68,3 @@ private static byte[] IntToLittle4(int input)
6968
return b;
7069
}
7170
}
72-
#endif
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#if HAS_SKIA_SHARP
2+
using H.NotifyIcon.Interop;
3+
using SkiaSharp;
4+
5+
namespace H.NotifyIcon;
6+
7+
internal static class StreamExtensions
8+
{
9+
internal static Icon ToSmallIcon(this Stream stream)
10+
{
11+
var iconSize = IconUtilities.GetRequiredCustomIconSize(largeIcon: false).ScaleWithDpi();
12+
13+
return Icon.Decode(stream, new SKImageInfo(width: iconSize.Width, height: iconSize.Height));
14+
}
15+
16+
internal static (int Width, int Height, int BitsPerPixel) GetMetadata(this Stream stream)
17+
{
18+
using var image = SKBitmap.Decode(stream);
19+
20+
return (image.Width, image.Height, image.BytesPerPixel * 8);
21+
}
22+
}
23+
#endif

src/libs/H.NotifyIcon.Shared/Utilities/ToSkiaSharpExtensions.cs renamed to src/libs/H.NotifyIcon.Shared/Utilities/SkiaSharp/ToSkiaSharpExtensions.cs

File renamed without changes.

src/libs/H.NotifyIcon.Shared/Utilities/FromSystemDrawingExtensions.cs renamed to src/libs/H.NotifyIcon.Shared/Utilities/System.Drawing/FromSystemDrawingExtensions.cs

File renamed without changes.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#if HAS_SYSTEM_DRAWING
2+
using H.NotifyIcon.Interop;
3+
4+
namespace H.NotifyIcon;
5+
6+
internal static class StreamExtensions
7+
{
8+
internal static Icon ToSmallIcon(this Stream stream)
9+
{
10+
var iconSize = IconUtilities.GetRequiredCustomIconSize(largeIcon: false).ScaleWithDpi();
11+
12+
return new Icon(stream, iconSize);
13+
}
14+
15+
internal static (int Width, int Height, int BitsPerPixel) GetMetadata(this Stream stream)
16+
{
17+
using var image = System.Drawing.Image.FromStream(stream);
18+
19+
return (image.Width, image.Height, System.Drawing.Image.GetPixelFormatSize(image.PixelFormat));
20+
}
21+
}
22+
#endif

src/libs/H.NotifyIcon.Shared/Utilities/ToSystemDrawingExtensions.cs renamed to src/libs/H.NotifyIcon.Shared/Utilities/System.Drawing/ToSystemDrawingExtensions.cs

File renamed without changes.

src/libs/H.NotifyIcon.Wpf/H.NotifyIcon.Wpf.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ popups, context menus, and balloon messages. It can be used directly in code or
5353
<PrivateAssets>all</PrivateAssets>
5454
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
5555
</PackageReference>
56+
<PackageReference Include="System.ValueTuple" Version="4.5.0" Condition="'$(TargetFramework)' == 'net4.6'" />
5657
</ItemGroup>
5758

5859
<ItemGroup>

0 commit comments

Comments
 (0)