Skip to content

Commit ad77de0

Browse files
committed
Added DpiUtil tests.
1 parent acfb233 commit ad77de0

File tree

4 files changed

+65
-41
lines changed

4 files changed

+65
-41
lines changed

ReClass.NET/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ static void Main(string[] args)
4444
try
4545
{
4646
DpiUtil.ConfigureProcess();
47+
DpiUtil.TrySetDpiFromCurrentDesktop();
4748
}
4849
catch
4950
{

ReClass.NET/UI/DpiUtil.cs

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,77 +9,55 @@ namespace ReClassNET.UI
99
{
1010
public static class DpiUtil
1111
{
12-
private const int StdDpi = 96;
12+
public const int DefalutDpi = 96;
1313

14-
private static bool initialized;
15-
16-
private static int dpiX = StdDpi;
17-
private static int dpiY = StdDpi;
14+
private static int dpiX = DefalutDpi;
15+
private static int dpiY = DefalutDpi;
1816

1917
private static double scaleX = 1.0;
2018
private static double scaleY = 1.0;
2119

22-
public static bool ScalingRequired
20+
public static void ConfigureProcess()
2321
{
24-
get
25-
{
26-
if (Program.DesignMode)
27-
{
28-
return false;
29-
}
30-
31-
EnsureInitialized();
32-
33-
return dpiX != StdDpi || dpiY != StdDpi;
34-
}
22+
NativeMethods.SetProcessDpiAwareness();
3523
}
3624

37-
private static void EnsureInitialized()
25+
public static void SetDpi(int x, int y)
3826
{
39-
if (initialized)
27+
dpiX = x;
28+
dpiY = y;
29+
30+
if (dpiX <= 0 || dpiY <= 0)
4031
{
41-
return;
32+
dpiX = DefalutDpi;
33+
dpiY = DefalutDpi;
4234
}
4335

36+
scaleX = dpiX / (double)DefalutDpi;
37+
scaleY = dpiY / (double)DefalutDpi;
38+
}
39+
40+
public static void TrySetDpiFromCurrentDesktop()
41+
{
4442
try
4543
{
4644
using var g = Graphics.FromHwnd(IntPtr.Zero);
47-
dpiX = (int)g.DpiX;
48-
dpiY = (int)g.DpiY;
4945

50-
if (dpiX <= 0 || dpiY <= 0)
51-
{
52-
dpiX = StdDpi;
53-
dpiY = StdDpi;
54-
}
46+
SetDpi((int)g.DpiX, (int)g.DpiY);
5547
}
5648
catch
5749
{
5850
// ignored
5951
}
60-
61-
scaleX = dpiX / (double)StdDpi;
62-
scaleY = dpiY / (double)StdDpi;
63-
64-
initialized = true;
65-
}
66-
67-
public static void ConfigureProcess()
68-
{
69-
NativeMethods.SetProcessDpiAwareness();
7052
}
7153

7254
public static int ScaleIntX(int i)
7355
{
74-
EnsureInitialized();
75-
7656
return (int)Math.Round(i * scaleX);
7757
}
7858

7959
public static int ScaleIntY(int i)
8060
{
81-
EnsureInitialized();
82-
8361
return (int)Math.Round(i * scaleY);
8462
}
8563

ReClass.NET_Tests/ReClass.NET_Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
<Compile Include="MemoryScanner\Comparer\IntegerMemoryComparerTest.cs" />
8888
<Compile Include="Memory\MemoryBufferTest.cs" />
8989
<Compile Include="Properties\AssemblyInfo.cs" />
90+
<Compile Include="UI\DpiUtilTest.cs" />
9091
<Compile Include="Util\BitStringTest.cs" />
9192
<Compile Include="Util\CircularBufferTest.cs" />
9293
<Compile Include="Util\CommandLineArgsTest.cs" />
@@ -121,5 +122,6 @@
121122
<PrivateAssets>all</PrivateAssets>
122123
</PackageReference>
123124
</ItemGroup>
125+
<ItemGroup />
124126
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
125127
</Project>

ReClass.NET_Tests/UI/DpiUtilTest.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System.Drawing;
2+
using NFluent;
3+
using ReClassNET.UI;
4+
using Xunit;
5+
6+
namespace ReClass.NET_Tests.UI
7+
{
8+
public class DpiUtilTest
9+
{
10+
[Fact]
11+
public void ScaleImageReturnsNullOnNull()
12+
{
13+
Check.That(DpiUtil.ScaleImage(null)).IsNull();
14+
}
15+
16+
[Fact]
17+
public void ScaleImageReturnsOriginalInstanceOnSameSize()
18+
{
19+
DpiUtil.SetDpi(DpiUtil.DefalutDpi, DpiUtil.DefalutDpi);
20+
21+
using var sourceImage = new Bitmap(10, 10);
22+
var scaledImage = DpiUtil.ScaleImage(sourceImage);
23+
24+
Check.That(sourceImage).IsSameReferenceAs(scaledImage);
25+
}
26+
27+
[Fact]
28+
public void ScaleImageReturnsScaledImage()
29+
{
30+
const int SourceSize = 10;
31+
const int ScaleFactor = 2;
32+
33+
DpiUtil.SetDpi(DpiUtil.DefalutDpi * ScaleFactor, DpiUtil.DefalutDpi * ScaleFactor);
34+
35+
using var sourceImage = new Bitmap(SourceSize, SourceSize);
36+
using var scaledImage = DpiUtil.ScaleImage(sourceImage);
37+
38+
Check.That(sourceImage).Not.IsSameReferenceAs(scaledImage);
39+
Check.That(scaledImage.Width).IsEqualTo(sourceImage.Width * ScaleFactor);
40+
Check.That(scaledImage.Height).IsEqualTo(sourceImage.Height * ScaleFactor);
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)