[gnome-font-viewer] font-widget: always draw the font name
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-font-viewer] font-widget: always draw the font name
- Date: Fri, 5 Jul 2019 18:55:19 +0000 (UTC)
commit 7da6cf11bc3a00412a9f9e2073509fd640133e49
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Fri Jul 5 11:53:05 2019 -0700
font-widget: always draw the font name
When the selected font can't draw it, use the default font instead.
https://bugzilla.gnome.org/show_bug.cgi?id=769247
src/sushi-font-widget.c | 55 +++++++++++++++++++++++--------------------------
1 file changed, 26 insertions(+), 29 deletions(-)
---
diff --git a/src/sushi-font-widget.c b/src/sushi-font-widget.c
index 3c1189c..43b5a0c 100644
--- a/src/sushi-font-widget.c
+++ b/src/sushi-font-widget.c
@@ -385,18 +385,8 @@ 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 = NULL;
-
- if (self->face->family_name != NULL) {
- gchar *font_name =
- g_strconcat (self->face->family_name, " ",
- self->face->style_name, NULL);
-
- if (check_font_contain_text (self->face, font_name))
- self->font_name = font_name;
- else
- g_free (font_name);
- }
+ self->font_name = g_strconcat (self->face->family_name, " ",
+ self->face->style_name, NULL);
}
static gint *
@@ -502,19 +492,22 @@ sushi_font_widget_size_request (GtkWidget *drawing_area,
pixmap_height = padding.top + padding.bottom;
font = cairo_ft_font_face_create_for_ft_face (face, 0);
- cairo_set_font_face (cr, font);
- cairo_font_face_destroy (font);
- if (self->font_name != NULL) {
- cairo_set_font_size (cr, title_size);
- cairo_font_extents (cr, &font_extents);
- text_extents (cr, self->font_name, &extents);
- pixmap_height += font_extents.ascent + font_extents.descent +
- extents.y_advance + LINE_SPACING;
- pixmap_width = MAX (pixmap_width, extents.width + padding.left + padding.right);
- }
+ if (check_font_contain_text (face, self->font_name))
+ cairo_set_font_face (cr, font);
+ else
+ cairo_set_font_face (cr, NULL);
+
+ cairo_set_font_size (cr, title_size);
+ cairo_font_extents (cr, &font_extents);
+ text_extents (cr, self->font_name, &extents);
+ pixmap_height += font_extents.ascent + font_extents.descent +
+ extents.y_advance + LINE_SPACING;
+ pixmap_width = MAX (pixmap_width, extents.width + padding.left + padding.right);
pixmap_height += SECTION_SPACING / 2;
+
+ cairo_set_font_face (cr, font);
cairo_set_font_size (cr, alpha_size);
cairo_font_extents (cr, &font_extents);
@@ -567,6 +560,7 @@ sushi_font_widget_size_request (GtkWidget *drawing_area,
*height = pixmap_height;
cairo_destroy (cr);
+ cairo_font_face_destroy (font);
cairo_surface_destroy (surface);
g_free (sizes);
}
@@ -603,7 +597,7 @@ sushi_font_widget_draw (GtkWidget *drawing_area,
{
SushiFontWidget *self = SUSHI_FONT_WIDGET (drawing_area);
gint *sizes = NULL, n_sizes, alpha_size, title_size, pos_y = 0, i;
- cairo_font_face_t *font;
+ cairo_font_face_t *font = NULL;
FT_Face face = self->face;
GtkStyleContext *context;
GdkRGBA color;
@@ -631,20 +625,21 @@ sushi_font_widget_draw (GtkWidget *drawing_area,
sizes = build_sizes_table (face, &n_sizes, &alpha_size, &title_size);
font = cairo_ft_font_face_create_for_ft_face (face, 0);
- cairo_set_font_face (cr, font);
- cairo_font_face_destroy (font);
/* draw text */
+ if (check_font_contain_text (face, self->font_name))
+ cairo_set_font_face (cr, font);
+ else
+ cairo_set_font_face (cr, NULL);
- if (self->font_name != NULL) {
- cairo_set_font_size (cr, title_size);
- draw_string (self, cr, padding, self->font_name, &pos_y);
- }
+ cairo_set_font_size (cr, title_size);
+ draw_string (self, cr, padding, self->font_name, &pos_y);
if (pos_y > allocated_height)
goto end;
pos_y += SECTION_SPACING / 2;
+ cairo_set_font_face (cr, font);
cairo_set_font_size (cr, alpha_size);
if (self->lowercase_text != NULL)
@@ -673,6 +668,8 @@ sushi_font_widget_draw (GtkWidget *drawing_area,
}
end:
+ if (font != NULL)
+ cairo_font_face_destroy (font);
g_free (sizes);
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]