GTK: Font rendering: Use same pango layout for painting as for measuring.

With this change we are consistent about how the pango layout
we use is created.

Now it always comes from a pango_layout_new() call on a pango context
that comes from gdk_pango_context_get().

Previously the pango layout used for painting came from a call
to pango_cairo_create_layout(), which required a global called
"current_cr" (a cairo drawing context), which is only valid
during redraw (painting).  Since it was only valid during
painting, this source could not be used for pango layout
creation for the measuring code.
This commit is contained in:
Michael Drake 2017-04-11 16:03:23 +01:00
parent 5d5081eb57
commit 90100bbd45

View File

@ -226,27 +226,24 @@ nserror nsfont_paint(int x, int y, const char *string, size_t length,
const plot_font_style_t *fstyle)
{
PangoFontDescription *desc;
PangoLayout *layout;
PangoLayoutLine *line;
if (length == 0)
return NSERROR_OK;
layout = pango_cairo_create_layout(current_cr);
nsfont_pango_check();
desc = nsfont_style_to_description(fstyle);
pango_layout_set_font_description(layout, desc);
pango_layout_set_font_description(nsfont_pango_layout, desc);
pango_font_description_free(desc);
pango_layout_set_text(layout, string, length);
pango_layout_set_text(nsfont_pango_layout, string, length);
line = pango_layout_get_line_readonly(layout, 0);
line = pango_layout_get_line_readonly(nsfont_pango_layout, 0);
cairo_move_to(current_cr, x, y);
nsgtk_set_colour(fstyle->foreground);
pango_cairo_show_layout_line(current_cr, line);
g_object_unref(layout);
return NSERROR_OK;
}