[sushi] font-widget: sync from gnome-font-viewer



commit 74e95963bd088b62f4f1de381c1e3ce45bbd5615
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sun Dec 1 15:40:46 2019 -0800

    font-widget: sync from gnome-font-viewer

 src/libsushi/sushi-font-loader.c | 38 ++++++++++++++++++++++++++++++++++++++
 src/libsushi/sushi-font-loader.h |  3 +++
 src/libsushi/sushi-font-widget.c |  3 +--
 3 files changed, 42 insertions(+), 2 deletions(-)
---
diff --git a/src/libsushi/sushi-font-loader.c b/src/libsushi/sushi-font-loader.c
index f7cf1de..df28c1a 100644
--- a/src/libsushi/sushi-font-loader.c
+++ b/src/libsushi/sushi-font-loader.c
@@ -67,6 +67,13 @@ font_load_job_free (FontLoadJob *job)
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (FontLoadJob, font_load_job_free)
 
+static void
+face_data_finalizer (void *object)
+{
+  FT_Face face = object;
+  g_clear_object (&face->generic.data);
+}
+
 static FT_Face
 create_face_from_contents (FontLoadJob *job,
                            gchar **contents,
@@ -88,6 +95,9 @@ create_face_from_contents (FontLoadJob *job,
     return NULL;
   }
 
+  retval->generic.data = g_object_ref (job->file);
+  retval->generic.finalizer = face_data_finalizer;
+
   *contents = g_steal_pointer (&job->face_contents);
   return retval;
 }
@@ -172,3 +182,31 @@ sushi_new_ft_face_from_uri_finish (GAsyncResult *result,
 
   return create_face_from_contents (job, contents, error);
 }
+
+/**
+ * sushi_get_font_name: (skip)
+ *
+ */
+gchar *
+sushi_get_font_name (FT_Face face,
+                     gboolean short_form)
+{
+  const char *style_name = face->style_name;
+  const char *family_name = face->family_name;
+
+  if (family_name == NULL) {
+    /* Try to get the basename of the file this was loaded from */
+    GFile *file = face->generic.data;
+    if (G_IS_FILE (file))
+      return g_file_get_basename (file);
+
+    /* Use an empty string as the last fallback */
+    return g_strdup ("");
+  }
+
+  if (style_name == NULL ||
+      (short_form && g_strcmp0 (style_name, "Regular") == 0))
+    return g_strdup (family_name);
+
+  return g_strconcat (family_name, ", ", style_name, NULL);
+}
diff --git a/src/libsushi/sushi-font-loader.h b/src/libsushi/sushi-font-loader.h
index 82aab03..b078e4a 100644
--- a/src/libsushi/sushi-font-loader.h
+++ b/src/libsushi/sushi-font-loader.h
@@ -46,4 +46,7 @@ FT_Face sushi_new_ft_face_from_uri_finish (GAsyncResult *result,
                                            gchar **contents,
                                            GError **error);
 
+gchar * sushi_get_font_name (FT_Face face,
+                             gboolean short_form);
+
 #endif /* __SUSHI_FONT_LOADER_H__ */
diff --git a/src/libsushi/sushi-font-widget.c b/src/libsushi/sushi-font-widget.c
index 144a3d6..ac1fcd4 100644
--- a/src/libsushi/sushi-font-widget.c
+++ b/src/libsushi/sushi-font-widget.c
@@ -378,8 +378,7 @@ build_strings_for_face (SushiFontWidget *self)
     self->sample_string = random_string_from_available_chars (self->face, 36);
 
   g_free (self->font_name);
-  self->font_name = g_strconcat (self->face->family_name, " ",
-                                 self->face->style_name, NULL);
+  self->font_name = sushi_get_font_name (self->face, FALSE);
 }
 
 static gint *


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