Hold on to the scaled fonts we use
authorKristian Høgsberg <krh@bitplanet.net>
Sat, 25 Dec 2010 21:58:31 +0000 (16:58 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 11 Jan 2011 15:38:51 +0000 (10:38 -0500)
clients/terminal.c

index 9e77bee..4eb4fab 100644 (file)
@@ -368,7 +368,7 @@ struct terminal {
        struct color_scheme *color_scheme;
        struct terminal_color color_table[256];
        cairo_font_extents_t extents;
-       cairo_font_face_t *font_normal, *font_bold;
+       cairo_scaled_font_t *font_normal, *font_bold;
 };
 
 /* Create default tab stops, every 8 characters */
@@ -769,8 +769,7 @@ terminal_draw_contents(struct terminal *terminal)
        terminal_set_color(terminal, cr, terminal->color_scheme->border);
        cairo_paint(cr);
 
-       cairo_set_font_face(cr, terminal->font_normal);
-       cairo_set_font_size(cr, 14);
+       cairo_set_scaled_font(cr, terminal->font_normal);
 
        cairo_font_extents(cr, &extents);
        side_margin = (allocation.width - terminal->width * extents.max_x_advance) / 2;
@@ -809,9 +808,10 @@ terminal_draw_contents(struct terminal *terminal)
                        terminal_decode_attr(terminal, row, col, &attr);
 
                        if (attr.bold)
-                               cairo_set_font_face(cr, terminal->font_bold);
+                               font = terminal->font_bold;
                        else
-                               cairo_set_font_face(cr, terminal->font_normal);
+                               font = terminal->font_normal;
+                       cairo_set_scaled_font(cr, font);
                        terminal_set_color(terminal, cr, attr.foreground);
                        text_x = side_margin + col * extents.max_x_advance;
                        text_y = top_margin + extents.ascent + row * extents.height;
@@ -824,7 +824,6 @@ terminal_draw_contents(struct terminal *terminal)
 
                        g = glyphs;
                        num_glyphs = ARRAY_LENGTH(glyphs);
-                       font = cairo_get_scaled_font (cr);
                        cairo_scaled_font_text_to_glyphs (font, text_x, text_y,
                                                          (char *) p_row[col].byte, 4,
                                                          &g, &num_glyphs,
@@ -1874,16 +1873,19 @@ terminal_create(struct display *display, int fullscreen)
 
        surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 0, 0);
        cr = cairo_create(surface);
-       terminal->font_bold = cairo_toy_font_face_create ("mono",
-                             CAIRO_FONT_SLANT_NORMAL,
-                             CAIRO_FONT_WEIGHT_BOLD);
-       cairo_font_face_reference(terminal->font_bold);
-       terminal->font_normal = cairo_toy_font_face_create ("mono",
-                               CAIRO_FONT_SLANT_NORMAL,
-                               CAIRO_FONT_WEIGHT_NORMAL);
-       cairo_font_face_reference(terminal->font_normal);
-       cairo_set_font_face(cr, terminal->font_normal);
        cairo_set_font_size(cr, 14);
+       cairo_select_font_face (cr, "mono",
+                               CAIRO_FONT_SLANT_NORMAL,
+                               CAIRO_FONT_WEIGHT_BOLD);
+       terminal->font_bold = cairo_get_scaled_font (cr);
+       cairo_scaled_font_reference(terminal->font_bold);
+
+       cairo_select_font_face (cr, "mono",
+                               CAIRO_FONT_SLANT_NORMAL,
+                               CAIRO_FONT_WEIGHT_NORMAL);
+       terminal->font_normal = cairo_get_scaled_font (cr);
+       cairo_scaled_font_reference(terminal->font_normal);
+
        cairo_font_extents(cr, &terminal->extents);
        cairo_destroy(cr);
        cairo_surface_destroy(surface);