diff options
author | emersion <contact@emersion.fr> | 2018-07-07 09:48:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-07 09:48:48 +0100 |
commit | 305fac293abf490d8c08eff372527b6892015703 (patch) | |
tree | 2675baaf165acdfc7f8090f9a8750eb971535659 | |
parent | Merge pull request #2196 from emersion/xwayland-floating-resize (diff) | |
parent | Fix titles when container titles contain UTF-8 characters (diff) | |
download | sway-305fac293abf490d8c08eff372527b6892015703.tar.gz sway-305fac293abf490d8c08eff372527b6892015703.tar.zst sway-305fac293abf490d8c08eff372527b6892015703.zip |
Merge pull request #2222 from RyanDwyer/fix-utf8-titles
Fix titles when container titles contain UTF-8 characters
-rw-r--r-- | sway/desktop/output.c | 40 | ||||
-rw-r--r-- | sway/tree/container.c | 2 | ||||
-rw-r--r-- | sway/tree/view.c | 2 |
3 files changed, 34 insertions, 10 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index e5a42db0..336163ea 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -521,7 +521,7 @@ static void render_titlebar(struct sway_output *output, | |||
521 | size_t inner_width = width - TITLEBAR_H_PADDING * 2; | 521 | size_t inner_width = width - TITLEBAR_H_PADDING * 2; |
522 | 522 | ||
523 | // Marks | 523 | // Marks |
524 | size_t marks_width = 0; | 524 | size_t marks_ob_width = 0; // output-buffer-local |
525 | if (config->show_marks && marks_texture) { | 525 | if (config->show_marks && marks_texture) { |
526 | struct wlr_box texture_box; | 526 | struct wlr_box texture_box; |
527 | wlr_texture_get_size(marks_texture, | 527 | wlr_texture_get_size(marks_texture, |
@@ -540,11 +540,23 @@ static void render_titlebar(struct sway_output *output, | |||
540 | } | 540 | } |
541 | render_texture(output->wlr_output, output_damage, marks_texture, | 541 | render_texture(output->wlr_output, output_damage, marks_texture, |
542 | &texture_box, matrix, con->alpha); | 542 | &texture_box, matrix, con->alpha); |
543 | marks_width = texture_box.width; | 543 | marks_ob_width = texture_box.width; |
544 | |||
545 | // Gap between the marks and bottom padding, for when the marks texture | ||
546 | // height is smaller than the config's font height | ||
547 | memcpy(&color, colors->background, sizeof(float) * 4); | ||
548 | premultiply_alpha(color, con->alpha); | ||
549 | box.x = texture_box.x; | ||
550 | box.y = texture_box.y + texture_box.height; | ||
551 | box.width = texture_box.width; | ||
552 | box.height = config->font_height * output_scale - texture_box.height; | ||
553 | if (box.height > 0) { | ||
554 | render_rect(output->wlr_output, output_damage, &box, color); | ||
555 | } | ||
544 | } | 556 | } |
545 | 557 | ||
546 | // Title text | 558 | // Title text |
547 | size_t title_width = 0; | 559 | size_t title_ob_width = 0; // output-buffer-local |
548 | if (title_texture) { | 560 | if (title_texture) { |
549 | struct wlr_box texture_box; | 561 | struct wlr_box texture_box; |
550 | wlr_texture_get_size(title_texture, | 562 | wlr_texture_get_size(title_texture, |
@@ -557,12 +569,24 @@ static void render_titlebar(struct sway_output *output, | |||
557 | WL_OUTPUT_TRANSFORM_NORMAL, | 569 | WL_OUTPUT_TRANSFORM_NORMAL, |
558 | 0.0, output->wlr_output->transform_matrix); | 570 | 0.0, output->wlr_output->transform_matrix); |
559 | 571 | ||
560 | if (inner_width * output_scale - marks_width < texture_box.width) { | 572 | if (inner_width * output_scale - marks_ob_width < texture_box.width) { |
561 | texture_box.width = inner_width * output_scale - marks_width; | 573 | texture_box.width = inner_width * output_scale - marks_ob_width; |
562 | } | 574 | } |
563 | render_texture(output->wlr_output, output_damage, title_texture, | 575 | render_texture(output->wlr_output, output_damage, title_texture, |
564 | &texture_box, matrix, con->alpha); | 576 | &texture_box, matrix, con->alpha); |
565 | title_width = texture_box.width; | 577 | title_ob_width = texture_box.width; |
578 | |||
579 | // Gap between the title and bottom padding, for when the title texture | ||
580 | // height is smaller than the config's font height | ||
581 | memcpy(&color, colors->background, sizeof(float) * 4); | ||
582 | premultiply_alpha(color, con->alpha); | ||
583 | box.x = texture_box.x; | ||
584 | box.y = texture_box.y + texture_box.height; | ||
585 | box.width = texture_box.width; | ||
586 | box.height = config->font_height * output_scale - texture_box.height; | ||
587 | if (box.height > 0) { | ||
588 | render_rect(output->wlr_output, output_damage, &box, color); | ||
589 | } | ||
566 | } | 590 | } |
567 | 591 | ||
568 | // Padding above title | 592 | // Padding above title |
@@ -580,9 +604,9 @@ static void render_titlebar(struct sway_output *output, | |||
580 | render_rect(output->wlr_output, output_damage, &box, color); | 604 | render_rect(output->wlr_output, output_damage, &box, color); |
581 | 605 | ||
582 | // Filler between title and marks | 606 | // Filler between title and marks |
583 | box.width = inner_width * output_scale - title_width - marks_width; | 607 | box.width = inner_width * output_scale - title_ob_width - marks_ob_width; |
584 | if (box.width > 0) { | 608 | if (box.width > 0) { |
585 | box.x = (x + TITLEBAR_H_PADDING) * output_scale + title_width; | 609 | box.x = (x + TITLEBAR_H_PADDING) * output_scale + title_ob_width; |
586 | box.y = (y + TITLEBAR_V_PADDING) * output_scale; | 610 | box.y = (y + TITLEBAR_V_PADDING) * output_scale; |
587 | box.height = config->font_height * output_scale; | 611 | box.height = config->font_height * output_scale; |
588 | render_rect(output->wlr_output, output_damage, &box, color); | 612 | render_rect(output->wlr_output, output_damage, &box, color); |
diff --git a/sway/tree/container.c b/sway/tree/container.c index 9093feba..5fdcb6e3 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c | |||
@@ -783,7 +783,7 @@ static void update_title_texture(struct sway_container *con, | |||
783 | 783 | ||
784 | double scale = output->sway_output->wlr_output->scale; | 784 | double scale = output->sway_output->wlr_output->scale; |
785 | int width = 0; | 785 | int width = 0; |
786 | int height = config->font_height * scale; | 786 | int height = con->title_height * scale; |
787 | 787 | ||
788 | cairo_t *c = cairo_create(NULL); | 788 | cairo_t *c = cairo_create(NULL); |
789 | get_text_size(c, config->font, &width, NULL, scale, config->pango_markup, | 789 | get_text_size(c, config->font, &width, NULL, scale, config->pango_markup, |
diff --git a/sway/tree/view.c b/sway/tree/view.c index e46cb327..3ef79fa8 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -923,7 +923,7 @@ static void update_marks_texture(struct sway_view *view, | |||
923 | 923 | ||
924 | double scale = output->sway_output->wlr_output->scale; | 924 | double scale = output->sway_output->wlr_output->scale; |
925 | int width = 0; | 925 | int width = 0; |
926 | int height = config->font_height * scale; | 926 | int height = view->swayc->title_height * scale; |
927 | 927 | ||
928 | cairo_t *c = cairo_create(NULL); | 928 | cairo_t *c = cairo_create(NULL); |
929 | get_text_size(c, config->font, &width, NULL, scale, false, "%s", buffer); | 929 | get_text_size(c, config->font, &width, NULL, scale, false, "%s", buffer); |