@@ -32,18 +32,26 @@ SettingsChannel::SettingsChannel(BinaryMessenger* messenger)
3232 self->SendSettingsEvent ();
3333 },
3434 this );
35+ system_settings_set_changed_cb (
36+ SYSTEM_SETTINGS_KEY_FONT_SIZE,
37+ [](system_settings_key_e key, void * user_data) -> void {
38+ auto * self = reinterpret_cast <SettingsChannel*>(user_data);
39+ self->SendSettingsEvent ();
40+ },
41+ this );
3542 SendSettingsEvent ();
3643}
3744
3845SettingsChannel::~SettingsChannel () {
3946 system_settings_unset_changed_cb (
4047 SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR);
48+ system_settings_unset_changed_cb (SYSTEM_SETTINGS_KEY_FONT_SIZE);
4149}
4250
4351void SettingsChannel::SendSettingsEvent () {
4452 rapidjson::Document event (rapidjson::kObjectType );
4553 auto & allocator = event.GetAllocator ();
46- event.AddMember (kTextScaleFactorKey , 1.0 , allocator);
54+ event.AddMember (kTextScaleFactorKey , GetTextScaleFactor () , allocator);
4755 event.AddMember (kAlwaysUse24HourFormatKey , Prefer24HourTime (), allocator);
4856 event.AddMember (kPlatformBrightnessKey , " light" , allocator);
4957 channel_->Send (event);
@@ -59,4 +67,30 @@ bool SettingsChannel::Prefer24HourTime() {
5967 return false ;
6068}
6169
70+ float SettingsChannel::GetTextScaleFactor () {
71+ const float small = 0.8 ;
72+ const float normal = 1.0 ;
73+ const float large = 1.5 ;
74+ const float huge = 1.9 ;
75+ const float giant = 2.5 ;
76+
77+ int value = SYSTEM_SETTINGS_FONT_SIZE_NORMAL;
78+ if (system_settings_get_value_int (SYSTEM_SETTINGS_KEY_FONT_SIZE, &value) ==
79+ SYSTEM_SETTINGS_ERROR_NONE) {
80+ switch (value) {
81+ case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
82+ return small;
83+ case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
84+ return large;
85+ case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
86+ return huge;
87+ case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
88+ return giant;
89+ default :
90+ return normal;
91+ }
92+ }
93+ return normal;
94+ }
95+
6296} // namespace flutter
0 commit comments