settings: Manage our own font DPI
Previously gnome-shell listened on the Xft Xsettings via GTK+s GtkSettings to get the font DPI setting. The Xsetting might not be what we want, and we should not rely on Xsettings when we don't need to, so lets manage it ourself. https://bugzilla.gnome.org/show_bug.cgi?id=765011
This commit is contained in:
parent
a6ec2b1d42
commit
88cae8bd3d
@ -10,7 +10,6 @@ static const struct {
|
||||
{ "Net/DndDragThreshold", "dnd-drag-threshold" },
|
||||
{ "Gtk/FontName", "font-name" },
|
||||
{ "Xft/Antialias", "font-antialias" },
|
||||
{ "Xft/DPI", "font-dpi" },
|
||||
{ "Xft/Hinting", "font-hinting" },
|
||||
{ "Xft/HintStyle", "font-hint-style" },
|
||||
{ "Xft/RGBA", "font-subpixel-order" },
|
||||
|
@ -34,6 +34,7 @@ enum
|
||||
{
|
||||
UI_SCALING_FACTOR_CHANGED,
|
||||
GLOBAL_SCALING_FACTOR_CHANGED,
|
||||
FONT_DPI_CHANGED,
|
||||
EXPERIMENTAL_FEATURES_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
@ -53,6 +54,8 @@ struct _MetaSettings
|
||||
int ui_scaling_factor;
|
||||
int global_scaling_factor;
|
||||
|
||||
int font_dpi;
|
||||
|
||||
MetaExperimentalFeature experimental_features;
|
||||
gboolean experimental_features_overridden;
|
||||
};
|
||||
@ -198,6 +201,54 @@ meta_settings_get_global_scaling_factor (MetaSettings *settings,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
update_font_dpi (MetaSettings *settings)
|
||||
{
|
||||
double text_scaling_factor;
|
||||
/* Number of logical pixels on an inch when unscaled */
|
||||
const double dots_per_inch = 96;
|
||||
/* Being based on Xft, API users expect the DPI to be 1/1024th of an inch. */
|
||||
const double xft_factor = 1024;
|
||||
int font_dpi;
|
||||
|
||||
text_scaling_factor = g_settings_get_double (settings->interface_settings,
|
||||
"text-scaling-factor");
|
||||
font_dpi = (int) (text_scaling_factor *
|
||||
dots_per_inch *
|
||||
xft_factor *
|
||||
settings->ui_scaling_factor);
|
||||
|
||||
if (font_dpi != settings->font_dpi)
|
||||
{
|
||||
settings->font_dpi = font_dpi;
|
||||
|
||||
g_object_set (clutter_settings_get_default (),
|
||||
"font-dpi", font_dpi,
|
||||
NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_settings_update_font_dpi (MetaSettings *settings)
|
||||
{
|
||||
if (update_font_dpi (settings))
|
||||
g_signal_emit (settings, signals[FONT_DPI_CHANGED], 0);
|
||||
}
|
||||
|
||||
int
|
||||
meta_settings_get_font_dpi (MetaSettings *settings)
|
||||
{
|
||||
g_assert (settings->font_dpi != 0);
|
||||
|
||||
return settings->font_dpi;
|
||||
}
|
||||
|
||||
static void
|
||||
interface_settings_changed (GSettings *interface_settings,
|
||||
const char *key,
|
||||
@ -208,6 +259,10 @@ interface_settings_changed (GSettings *interface_settings,
|
||||
if (update_global_scaling_factor (settings))
|
||||
g_signal_emit (settings, signals[GLOBAL_SCALING_FACTOR_CHANGED], 0);
|
||||
}
|
||||
else if (g_str_equal (key, "text-scaling-factor"))
|
||||
{
|
||||
meta_settings_update_font_dpi (settings);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
@ -340,6 +395,8 @@ meta_settings_init (MetaSettings *settings)
|
||||
/* Chain up inter-dependent settings. */
|
||||
g_signal_connect (settings, "global-scaling-factor-changed",
|
||||
G_CALLBACK (meta_settings_update_ui_scaling_factor), NULL);
|
||||
g_signal_connect (settings, "ui-scaling-factor-changed",
|
||||
G_CALLBACK (meta_settings_update_font_dpi), NULL);
|
||||
|
||||
update_global_scaling_factor (settings);
|
||||
update_experimental_features (settings);
|
||||
@ -349,6 +406,7 @@ void
|
||||
meta_settings_post_init (MetaSettings *settings)
|
||||
{
|
||||
update_ui_scaling_factor (settings);
|
||||
update_font_dpi (settings);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -374,6 +432,14 @@ meta_settings_class_init (MetaSettingsClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[FONT_DPI_CHANGED] =
|
||||
g_signal_new ("font-dpi-changed",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[EXPERIMENTAL_FEATURES_CHANGED] =
|
||||
g_signal_new ("experimental-features-changed",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
|
@ -26,4 +26,6 @@
|
||||
|
||||
int meta_settings_get_ui_scaling_factor (MetaSettings *settings);
|
||||
|
||||
int meta_settings_get_font_dpi (MetaSettings *settings);
|
||||
|
||||
#endif /* META_SETTINGS_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user