[sushi] font-widget: sync from gnome-font-viewer
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sushi] font-widget: sync from gnome-font-viewer
- Date: Sun, 1 Dec 2019 23:41:17 +0000 (UTC)
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]