Add fallbacks for GtkSwitch state labels

While the IEC power symbols have been part of Unicode since version 9.0,
released in 2016, not every font supports them.

We can use the old symbols as a fallback, as they seem to have the
better coverage, if not the best appearance.
This commit is contained in:
Emmanuele Bassi
2019-01-15 15:22:09 +00:00
parent c9d09695f8
commit ed39721aa7

View File

@@ -298,11 +298,48 @@ gtk_switch_create_pango_layouts (GtkSwitch *self)
{
GtkSwitchPrivate *priv = self->priv;
/* Glyphs for the ON state, in descending order of preference */
const char *on_glyphs[] = {
"", /* U+23FD POWER ON SYMBOL */
"", /* U+2759 MEDIUM VERTICAL BAR */
};
/* Glyphs for the OFF state, in descending order of preference */
const char *off_glyphs[] = {
"", /* U+2B58 HEAVY CIRCLE */
"", /* U+25CB WHITE CIRCLE */
};
int i;
g_clear_object (&priv->on_layout);
priv->on_layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), "");
for (i = 0; i < G_N_ELEMENTS (on_glyphs); i++)
{
PangoLayout *layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), on_glyphs[i]);
if (pango_layout_get_unknown_glyphs_count (layout) == 0)
{
priv->on_layout = layout;
break;
}
g_object_unref (layout);
}
g_clear_object (&priv->off_layout);
priv->off_layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), "");
for (i = 0; i < G_N_ELEMENTS (off_glyphs); i++)
{
PangoLayout *layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), off_glyphs[i]);
if (pango_layout_get_unknown_glyphs_count (layout) == 0)
{
priv->off_layout = layout;
break;
}
g_object_unref (layout);
}
}
static void