diff -uprN mate-control-center/font-viewer/sushi-font-loader.c mate-control-center-test/font-viewer/sushi-font-loader.c --- mate-control-center/font-viewer/sushi-font-loader.c 2015-08-24 13:08:20.221313939 +0200 +++ mate-control-center-test/font-viewer/sushi-font-loader.c 2015-08-24 12:53:28.984809214 +0200 @@ -156,16 +156,20 @@ sushi_new_ft_face_from_uri (FT_Library l GError **error) { FontLoadJob *job = NULL; + FT_Face face; job = font_load_job_new (library, uri, NULL, NULL); font_load_job_do_load (job, error); if ((error != NULL) && (*error != NULL)) { - g_object_unref (job); + font_load_job_free (job); return NULL; } - return create_face_from_contents (job, contents, error); + face = create_face_from_contents (job, contents, error); + font_load_job_free (job); + + return face; } /** diff -uprN mate-control-center/font-viewer/sushi-font-widget.c mate-control-center-test/font-viewer/sushi-font-widget.c --- mate-control-center/font-viewer/sushi-font-widget.c 2015-08-23 20:26:33.178608628 +0200 +++ mate-control-center-test/font-viewer/sushi-font-widget.c 2015-08-24 13:02:12.482419266 +0200 @@ -65,8 +65,6 @@ G_DEFINE_TYPE (SushiFontWidget, sushi_fo #define SURFACE_SIZE 4 #define SECTION_SPACING 16 -#define TITLE_SIZE 6 - static const gchar lowercase_text_stock[] = "abcdefghijklmnopqrstuvwxyz"; static const gchar uppercase_text_stock[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static const gchar punctuation_text_stock[] = "0123456789.:,;(*!?')"; @@ -224,7 +222,8 @@ build_strings_for_face (SushiFontWidget static gint * build_sizes_table (FT_Face face, gint *n_sizes, - gint *alpha_size) + gint *alpha_size, + gint *title_size) { gint *sizes = NULL; gint i; @@ -247,8 +246,13 @@ build_sizes_table (FT_Face face, sizes[11] = 168; sizes[12] = 192; sizes[13] = 216; + *alpha_size = 24; + *title_size = 48; } else { + gint alpha_diff = G_MAXINT; + gint title_diff = G_MAXINT; + /* use fixed sizes */ *n_sizes = face->num_fixed_sizes; sizes = g_new (gint, *n_sizes); @@ -257,9 +261,14 @@ build_sizes_table (FT_Face face, for (i = 0; i < face->num_fixed_sizes; i++) { sizes[i] = face->available_sizes[i].height; - /* work out which font size to render */ - if (face->available_sizes[i].height <= 24) - *alpha_size = face->available_sizes[i].height; + if ((gint) (abs (sizes[i] - 24)) < alpha_diff) { + alpha_diff = (gint) abs (sizes[i] - 24); + *alpha_size = sizes[i]; + } + if ((gint) (abs (sizes[i] - 24)) < title_diff) { + title_diff = (gint) abs (sizes[i] - 24); + *title_size = sizes[i]; + } } } @@ -278,7 +287,7 @@ sushi_font_widget_size_request (GtkWidge cairo_text_extents_t extents; cairo_font_extents_t font_extents; cairo_font_face_t *font; - gint *sizes = NULL, n_sizes, alpha_size; + gint *sizes = NULL, n_sizes, alpha_size, title_size; cairo_t *cr; cairo_surface_t *surface; FT_Face face = priv->face; @@ -297,6 +306,9 @@ sushi_font_widget_size_request (GtkWidge return; } + if (min_height != NULL) + *min_height = -1; + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, SURFACE_SIZE, SURFACE_SIZE); cr = cairo_create (surface); @@ -304,7 +316,7 @@ sushi_font_widget_size_request (GtkWidge state = gtk_style_context_get_state (context); gtk_style_context_get_padding (context, state, &padding); - sizes = build_sizes_table (face, &n_sizes, &alpha_size); + sizes = build_sizes_table (face, &n_sizes, &alpha_size, &title_size); /* calculate size of pixmap to use */ pixmap_width = padding.left + padding.right; @@ -315,7 +327,7 @@ sushi_font_widget_size_request (GtkWidge cairo_font_face_destroy (font); if (self->priv->font_supports_title) { - cairo_set_font_size (cr, sizes[TITLE_SIZE]); + cairo_set_font_size (cr, title_size); cairo_font_extents (cr, &font_extents); cairo_text_extents (cr, self->priv->font_name, &extents); pixmap_height += font_extents.ascent + font_extents.descent + @@ -364,6 +376,9 @@ sushi_font_widget_size_request (GtkWidge pixmap_height += padding.bottom + SECTION_SPACING; + if (min_height != NULL && *min_height == -1) + *min_height = pixmap_height; + if (width != NULL) *width = pixmap_width; @@ -406,7 +421,7 @@ sushi_font_widget_draw (GtkWidget *drawi { SushiFontWidget *self = SUSHI_FONT_WIDGET (drawing_area); SushiFontWidgetPrivate *priv = self->priv; - gint *sizes = NULL, n_sizes, alpha_size, pos_y = 0, i; + gint *sizes = NULL, n_sizes, alpha_size, title_size, pos_y = 0, i; cairo_font_face_t *font; FT_Face face = priv->face; GtkStyleContext *context; @@ -425,7 +440,7 @@ sushi_font_widget_draw (GtkWidget *drawi gdk_cairo_set_source_rgba (cr, &color); - sizes = build_sizes_table (face, &n_sizes, &alpha_size); + 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); @@ -436,7 +451,7 @@ sushi_font_widget_draw (GtkWidget *drawi /* draw text */ if (self->priv->font_supports_title) { - cairo_set_font_size (cr, sizes[TITLE_SIZE]); + cairo_set_font_size (cr, title_size); draw_string (cr, padding, self->priv->font_name, &pos_y); } Binärdateien mate-control-center/.git/index und mate-control-center-test/.git/index sind verschieden.