aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/container.c
diff options
context:
space:
mode:
authorLibravatar John Chen <johnchen902@gmail.com>2018-12-30 21:29:37 +0800
committerLibravatar Brian Ashworth <RedSoxFan@users.noreply.github.com>2018-12-31 01:37:33 -0500
commit54d0f3a40e3b65375046932b5cc21aba10b62f0f (patch)
tree0b295937f4254ca4c7d9fd3d58e05775e72c4e85 /sway/tree/container.c
parentswaybar: fix double free (diff)
downloadsway-54d0f3a40e3b65375046932b5cc21aba10b62f0f.tar.gz
sway-54d0f3a40e3b65375046932b5cc21aba10b62f0f.tar.zst
sway-54d0f3a40e3b65375046932b5cc21aba10b62f0f.zip
Set font options when computing text width.
Fix #2869
Diffstat (limited to 'sway/tree/container.c')
-rw-r--r--sway/tree/container.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 0a96088e..99262356 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -453,19 +453,26 @@ static void update_title_texture(struct sway_container *con,
453 int width = 0; 453 int width = 0;
454 int height = con->title_height * scale; 454 int height = con->title_height * scale;
455 455
456 cairo_t *c = cairo_create(NULL); 456 // We must use a non-nil cairo_t for cairo_set_font_options to work.
457 // Therefore, we cannot use cairo_create(NULL).
458 cairo_surface_t *dummy_surface = cairo_image_surface_create(
459 CAIRO_FORMAT_ARGB32, 0, 0);
460 cairo_t *c = cairo_create(dummy_surface);
461 cairo_set_antialias(c, CAIRO_ANTIALIAS_BEST);
462 cairo_font_options_t *fo = cairo_font_options_create();
463 cairo_font_options_set_hint_style(fo, CAIRO_HINT_STYLE_FULL);
464 cairo_font_options_set_antialias(fo, CAIRO_ANTIALIAS_SUBPIXEL);
465 cairo_font_options_set_subpixel_order(fo, to_cairo_subpixel_order(output->wlr_output->subpixel));
466 cairo_set_font_options(c, fo);
457 get_text_size(c, config->font, &width, NULL, NULL, scale, 467 get_text_size(c, config->font, &width, NULL, NULL, scale,
458 config->pango_markup, "%s", con->formatted_title); 468 config->pango_markup, "%s", con->formatted_title);
469 cairo_surface_destroy(dummy_surface);
459 cairo_destroy(c); 470 cairo_destroy(c);
460 471
461 cairo_surface_t *surface = cairo_image_surface_create( 472 cairo_surface_t *surface = cairo_image_surface_create(
462 CAIRO_FORMAT_ARGB32, width, height); 473 CAIRO_FORMAT_ARGB32, width, height);
463 cairo_t *cairo = cairo_create(surface); 474 cairo_t *cairo = cairo_create(surface);
464 cairo_set_antialias(cairo, CAIRO_ANTIALIAS_BEST); 475 cairo_set_antialias(cairo, CAIRO_ANTIALIAS_BEST);
465 cairo_font_options_t *fo = cairo_font_options_create();
466 cairo_font_options_set_hint_style(fo, CAIRO_HINT_STYLE_FULL);
467 cairo_font_options_set_antialias(fo, CAIRO_ANTIALIAS_SUBPIXEL);
468 cairo_font_options_set_subpixel_order(fo, to_cairo_subpixel_order(output->wlr_output->subpixel));
469 cairo_set_font_options(cairo, fo); 476 cairo_set_font_options(cairo, fo);
470 cairo_font_options_destroy(fo); 477 cairo_font_options_destroy(fo);
471 cairo_set_source_rgba(cairo, class->background[0], class->background[1], 478 cairo_set_source_rgba(cairo, class->background[0], class->background[1],