fontchooser: Only compare font descriptions when families match
This way, we can find fonts way quicker as we only need to create font descriptions for fonts with matching families. Most importantly, we're rather quick in the "the font doesn't exist" case.
This commit is contained in:
@ -874,6 +874,13 @@ gtk_font_chooser_widget_finalize (GObject *object)
|
||||
G_OBJECT_CLASS (gtk_font_chooser_widget_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
my_pango_font_family_equal (const char *familya,
|
||||
const char *familyb)
|
||||
{
|
||||
return g_ascii_strcasecmp (familya, familyb) == 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser,
|
||||
const PangoFontDescription *font_desc,
|
||||
@ -882,12 +889,24 @@ gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser,
|
||||
{
|
||||
GtkFontChooserWidgetPrivate *priv = fontchooser->priv;
|
||||
PangoFontDescription *desc;
|
||||
PangoFontFamily *family;
|
||||
gboolean valid;
|
||||
|
||||
if (pango_font_description_get_family (font_desc) == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (valid = gtk_tree_model_get_iter_first (priv->model, iter);
|
||||
valid;
|
||||
valid = gtk_tree_model_iter_next (priv->model, iter))
|
||||
{
|
||||
gtk_tree_model_get (priv->model, iter,
|
||||
FAMILY_COLUMN, &family,
|
||||
-1);
|
||||
|
||||
if (!my_pango_font_family_equal (pango_font_description_get_family (font_desc),
|
||||
pango_font_family_get_name (family)))
|
||||
continue;
|
||||
|
||||
desc = tree_model_get_font_description (priv->model, iter);
|
||||
|
||||
pango_font_description_merge_static (desc, font_desc, FALSE);
|
||||
|
Reference in New Issue
Block a user