@@ -12,6 +12,10 @@ namespace {
12
12
constexpr wchar_t kGetPreferredBrightnessRegKey [] =
13
13
L" Software\\ Microsoft\\ Windows\\ CurrentVersion\\ Themes\\ Personalize" ;
14
14
constexpr wchar_t kGetPreferredBrightnessRegValue [] = L" AppsUseLightTheme" ;
15
+
16
+ constexpr wchar_t kGetTextScaleFactorRegKey [] =
17
+ L" Software\\ Microsoft\\ Accessibility" ;
18
+ constexpr wchar_t kGetTextScaleFactorRegValue [] = L" TextScaleFactor" ;
15
19
} // namespace
16
20
17
21
// static
@@ -26,29 +30,47 @@ SettingsPluginWin32::SettingsPluginWin32(BinaryMessenger* messenger,
26
30
: SettingsPlugin(messenger, task_runner) {
27
31
RegOpenKeyEx (HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey ,
28
32
RRF_RT_REG_DWORD, KEY_NOTIFY, &preferred_brightness_reg_hkey_);
33
+ RegOpenKeyEx (HKEY_CURRENT_USER, kGetTextScaleFactorRegKey , RRF_RT_REG_DWORD,
34
+ KEY_NOTIFY, &text_scale_factor_reg_hkey_);
29
35
}
30
36
31
37
SettingsPluginWin32::~SettingsPluginWin32 () {
32
38
StopWatching ();
33
39
RegCloseKey (preferred_brightness_reg_hkey_);
40
+ RegCloseKey (text_scale_factor_reg_hkey_);
34
41
}
35
42
36
43
void SettingsPluginWin32::StartWatching () {
37
- if (preferred_brightness_reg_hkey_ != NULL ) {
44
+ if (preferred_brightness_reg_hkey_ != nullptr ) {
38
45
WatchPreferredBrightnessChanged ();
39
46
}
47
+ if (text_scale_factor_reg_hkey_ != nullptr ) {
48
+ WatchTextScaleFactorChanged ();
49
+ }
40
50
}
41
51
42
52
void SettingsPluginWin32::StopWatching () {
43
53
preferred_brightness_changed_watcher_ = nullptr ;
54
+ text_scale_factor_changed_watcher_ = nullptr ;
44
55
}
45
56
46
57
bool SettingsPluginWin32::GetAlwaysUse24HourFormat () {
47
58
return Prefer24HourTime (GetUserTimeFormat ());
48
59
}
49
60
50
61
float SettingsPluginWin32::GetTextScaleFactor () {
51
- return 1.0 ;
62
+ DWORD text_scale_factor;
63
+ DWORD text_scale_factor_size = sizeof (text_scale_factor);
64
+ LONG result = RegGetValue (
65
+ HKEY_CURRENT_USER, kGetTextScaleFactorRegKey , kGetTextScaleFactorRegValue ,
66
+ RRF_RT_REG_DWORD, nullptr , &text_scale_factor, &text_scale_factor_size);
67
+
68
+ if (result == 0 ) {
69
+ return text_scale_factor / 100.0 ;
70
+ } else {
71
+ // The current OS does not have text scale factor.
72
+ return 1.0 ;
73
+ }
52
74
}
53
75
54
76
SettingsPlugin::PlatformBrightness
@@ -83,4 +105,18 @@ void SettingsPluginWin32::WatchPreferredBrightnessChanged() {
83
105
preferred_brightness_changed_watcher_->GetHandle (), TRUE );
84
106
}
85
107
108
+ void SettingsPluginWin32::WatchTextScaleFactorChanged () {
109
+ text_scale_factor_changed_watcher_ =
110
+ std::make_unique<EventWatcherWin32>([this ]() {
111
+ task_runner_->PostTask ([this ]() {
112
+ SendSettings ();
113
+ WatchTextScaleFactorChanged ();
114
+ });
115
+ });
116
+
117
+ RegNotifyChangeKeyValue (
118
+ text_scale_factor_reg_hkey_, FALSE , REG_NOTIFY_CHANGE_LAST_SET,
119
+ text_scale_factor_changed_watcher_->GetHandle (), TRUE );
120
+ }
121
+
86
122
} // namespace flutter
0 commit comments