Skip to content

Commit 80b183e

Browse files
authored
[Windows] Add textScaleFactor support (flutter#33316)
1 parent 9388aa1 commit 80b183e

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

shell/platform/windows/settings_plugin_win32.cc

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ namespace {
1212
constexpr wchar_t kGetPreferredBrightnessRegKey[] =
1313
L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
1414
constexpr wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme";
15+
16+
constexpr wchar_t kGetTextScaleFactorRegKey[] =
17+
L"Software\\Microsoft\\Accessibility";
18+
constexpr wchar_t kGetTextScaleFactorRegValue[] = L"TextScaleFactor";
1519
} // namespace
1620

1721
// static
@@ -26,29 +30,47 @@ SettingsPluginWin32::SettingsPluginWin32(BinaryMessenger* messenger,
2630
: SettingsPlugin(messenger, task_runner) {
2731
RegOpenKeyEx(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,
2832
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_);
2935
}
3036

3137
SettingsPluginWin32::~SettingsPluginWin32() {
3238
StopWatching();
3339
RegCloseKey(preferred_brightness_reg_hkey_);
40+
RegCloseKey(text_scale_factor_reg_hkey_);
3441
}
3542

3643
void SettingsPluginWin32::StartWatching() {
37-
if (preferred_brightness_reg_hkey_ != NULL) {
44+
if (preferred_brightness_reg_hkey_ != nullptr) {
3845
WatchPreferredBrightnessChanged();
3946
}
47+
if (text_scale_factor_reg_hkey_ != nullptr) {
48+
WatchTextScaleFactorChanged();
49+
}
4050
}
4151

4252
void SettingsPluginWin32::StopWatching() {
4353
preferred_brightness_changed_watcher_ = nullptr;
54+
text_scale_factor_changed_watcher_ = nullptr;
4455
}
4556

4657
bool SettingsPluginWin32::GetAlwaysUse24HourFormat() {
4758
return Prefer24HourTime(GetUserTimeFormat());
4859
}
4960

5061
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+
}
5274
}
5375

5476
SettingsPlugin::PlatformBrightness
@@ -83,4 +105,18 @@ void SettingsPluginWin32::WatchPreferredBrightnessChanged() {
83105
preferred_brightness_changed_watcher_->GetHandle(), TRUE);
84106
}
85107

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+
86122
} // namespace flutter

shell/platform/windows/settings_plugin_win32.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ class SettingsPluginWin32 : public SettingsPlugin {
3939

4040
private:
4141
void WatchPreferredBrightnessChanged();
42+
void WatchTextScaleFactorChanged();
4243

43-
HKEY preferred_brightness_reg_hkey_ = NULL;
44+
HKEY preferred_brightness_reg_hkey_ = nullptr;
45+
HKEY text_scale_factor_reg_hkey_ = nullptr;
4446

45-
std::unique_ptr<EventWatcherWin32> preferred_brightness_changed_watcher_{
46-
nullptr};
47+
std::unique_ptr<EventWatcherWin32> preferred_brightness_changed_watcher_;
48+
std::unique_ptr<EventWatcherWin32> text_scale_factor_changed_watcher_;
4749

4850
SettingsPluginWin32(const SettingsPluginWin32&) = delete;
4951
SettingsPluginWin32& operator=(const SettingsPluginWin32&) = delete;

0 commit comments

Comments
 (0)