[gtk+] fontchooser: Only compare font descriptions when families match



commit c9ef2d019e425b76467ad3867eaffa8b51a22726
Author: Benjamin Otte <otte redhat com>
Date:   Wed Sep 21 05:44:22 2011 +0200

    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.

 gtk/gtkfontchooserwidget.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c
index e3844a9..346c9a4 100644
--- a/gtk/gtkfontchooserwidget.c
+++ b/gtk/gtkfontchooserwidget.c
@@ -875,6 +875,13 @@ gtk_font_chooser_widget_finalize (GObject *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,
                                    /* out arguments */
@@ -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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]