Skip to content

Commit 33935a8

Browse files
author
Andrew Mansell
committed
WIP bare-bones fix for #4555
1 parent 3a6aee5 commit 33935a8

File tree

5 files changed

+47
-1
lines changed

5 files changed

+47
-1
lines changed

Rubberduck.Core/Settings/GeneralSettings.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public interface IGeneralSettings
1818
int AutoSavePeriod { get; set; }
1919
bool UserEditedLogLevel { get; set; }
2020
int MinimumLogLevel { get; set; }
21+
bool SetDpiUnaware { get; set; }
2122
List<ExperimentalFeatures> EnableExperimentalFeatures { get; set; }
2223
}
2324

@@ -56,6 +57,8 @@ public int MinimumLogLevel
5657
}
5758
}
5859

60+
public bool SetDpiUnaware { get; set; }
61+
5962
public List<ExperimentalFeatures> EnableExperimentalFeatures { get; set; } = new List<ExperimentalFeatures>();
6063

6164
public GeneralSettings()
@@ -79,7 +82,8 @@ public bool Equals(GeneralSettings other)
7982
UserEditedLogLevel == other.UserEditedLogLevel &&
8083
MinimumLogLevel == other.MinimumLogLevel &&
8184
EnableExperimentalFeatures.All(a => other.EnableExperimentalFeatures.Contains(a)) &&
82-
EnableExperimentalFeatures.Count == other.EnableExperimentalFeatures.Count;
85+
EnableExperimentalFeatures.Count == other.EnableExperimentalFeatures.Count &&
86+
SetDpiUnaware == other.SetDpiUnaware;
8387
}
8488
}
8589
}

Rubberduck.Core/UI/Settings/GeneralSettings.xaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@
131131
IsChecked="{Binding CheckVersionAtStartup}" />
132132
<CheckBox Margin="5,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_CompileBeforeParse}"
133133
IsChecked="{Binding CompileBeforeParse}" />
134+
<CheckBox Margin="5,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_SetDpiUnaware}"
135+
IsChecked="{Binding SetDpiUnaware}" />
134136
<StackPanel Orientation="Horizontal"/>
135137

136138
<Label Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_MinimumLogLevelLabel}" FontWeight="SemiBold" />

Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,20 @@ public bool CompileBeforeParse
158158
}
159159
}
160160

161+
private bool _setDpiUnaware;
162+
public bool SetDpiUnaware
163+
{
164+
get => _setDpiUnaware;
165+
set
166+
{
167+
if (_setDpiUnaware != value)
168+
{
169+
_setDpiUnaware = value;
170+
OnPropertyChanged();
171+
}
172+
}
173+
}
174+
161175
private bool SynchronizeVBESettings()
162176
{
163177
if (!_messageBox.ConfirmYesNo(RubberduckUI.GeneralSettings_CompileBeforeParse_WarnCompileOnDemandEnabled,
@@ -243,6 +257,7 @@ private Rubberduck.Settings.GeneralSettings GetCurrentGeneralSettings()
243257
CanShowSplash = ShowSplashAtStartup,
244258
CanCheckVersion = CheckVersionAtStartup,
245259
CompileBeforeParse = CompileBeforeParse,
260+
SetDpiUnaware = SetDpiUnaware,
246261
IsSmartIndenterPrompted = _indenterPrompted,
247262
IsAutoSaveEnabled = AutoSaveEnabled,
248263
AutoSavePeriod = AutoSavePeriod,
@@ -259,6 +274,7 @@ private void TransferSettingsToView(IGeneralSettings general, IHotkeySettings ho
259274
ShowSplashAtStartup = general.CanShowSplash;
260275
CheckVersionAtStartup = general.CanCheckVersion;
261276
CompileBeforeParse = general.CompileBeforeParse;
277+
SetDpiUnaware = general.SetDpiUnaware;
262278
_indenterPrompted = general.IsSmartIndenterPrompted;
263279
AutoSaveEnabled = general.IsAutoSaveEnabled;
264280
AutoSavePeriod = general.AutoSavePeriod;

Rubberduck.Main/Extension.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,17 @@ private void InitializeAddIn()
160160
catch (CultureNotFoundException)
161161
{
162162
}
163+
try
164+
{
165+
if (_initialSettings.SetDpiUnaware)
166+
{
167+
SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware);
168+
}
169+
}
170+
catch (Exception)
171+
{
172+
Debug.Assert(false, "Could not set DPI awareness.");
173+
}
163174
}
164175
else
165176
{
@@ -300,5 +311,15 @@ private void ShutdownAddIn()
300311
}
301312
}
302313
}
314+
315+
[DllImport("SHCore.dll", SetLastError = true)]
316+
private static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness);
317+
318+
private enum PROCESS_DPI_AWARENESS
319+
{
320+
Process_DPI_Unaware = 0,
321+
Process_System_DPI_Aware = 1,
322+
Process_Per_Monitor_DPI_Aware = 2
323+
}
303324
}
304325
}

Rubberduck.Resources/RubberduckUI.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,4 +1295,7 @@ NOTE: Restart is required for the setting to take effect.</value>
12951295
<data name="TodoMarkerTodo" xml:space="preserve">
12961296
<value>TODO</value>
12971297
</data>
1298+
<data name="GeneralSettings_SetDpiUnaware" xml:space="preserve">
1299+
<value>Set DPI Unaware</value>
1300+
</data>
12981301
</root>

0 commit comments

Comments
 (0)