Fix titles when container titles contain UTF-8 characters
The title and marks textures would have their height set from the config's computed max font height, but the textures were not regenerated when the config's max font height changed which made a gap appear. Rather than making it regenerate the title textures every time the config font height was changed, I've changed it to just make the textures the height of the title itself and fill any gap when rendering. Also, the title_width and marks_width variables have been renamed to make it more obvious that they are in output-buffer-local coordinates. Fixes #1936.
This commit is contained in:
parent
fc4ed6f037
commit
0046eed969
|
@ -521,7 +521,7 @@ static void render_titlebar(struct sway_output *output,
|
|||
size_t inner_width = width - TITLEBAR_H_PADDING * 2;
|
||||
|
||||
// Marks
|
||||
size_t marks_width = 0;
|
||||
size_t marks_ob_width = 0; // output-buffer-local
|
||||
if (config->show_marks && marks_texture) {
|
||||
struct wlr_box texture_box;
|
||||
wlr_texture_get_size(marks_texture,
|
||||
|
@ -540,11 +540,23 @@ static void render_titlebar(struct sway_output *output,
|
|||
}
|
||||
render_texture(output->wlr_output, output_damage, marks_texture,
|
||||
&texture_box, matrix, con->alpha);
|
||||
marks_width = texture_box.width;
|
||||
marks_ob_width = texture_box.width;
|
||||
|
||||
// Gap between the marks and bottom padding, for when the marks texture
|
||||
// height is smaller than the config's font height
|
||||
memcpy(&color, colors->background, sizeof(float) * 4);
|
||||
premultiply_alpha(color, con->alpha);
|
||||
box.x = texture_box.x;
|
||||
box.y = texture_box.y + texture_box.height;
|
||||
box.width = texture_box.width;
|
||||
box.height = config->font_height * output_scale - texture_box.height;
|
||||
if (box.height > 0) {
|
||||
render_rect(output->wlr_output, output_damage, &box, color);
|
||||
}
|
||||
}
|
||||
|
||||
// Title text
|
||||
size_t title_width = 0;
|
||||
size_t title_ob_width = 0; // output-buffer-local
|
||||
if (title_texture) {
|
||||
struct wlr_box texture_box;
|
||||
wlr_texture_get_size(title_texture,
|
||||
|
@ -557,12 +569,24 @@ static void render_titlebar(struct sway_output *output,
|
|||
WL_OUTPUT_TRANSFORM_NORMAL,
|
||||
0.0, output->wlr_output->transform_matrix);
|
||||
|
||||
if (inner_width * output_scale - marks_width < texture_box.width) {
|
||||
texture_box.width = inner_width * output_scale - marks_width;
|
||||
if (inner_width * output_scale - marks_ob_width < texture_box.width) {
|
||||
texture_box.width = inner_width * output_scale - marks_ob_width;
|
||||
}
|
||||
render_texture(output->wlr_output, output_damage, title_texture,
|
||||
&texture_box, matrix, con->alpha);
|
||||
title_width = texture_box.width;
|
||||
title_ob_width = texture_box.width;
|
||||
|
||||
// Gap between the title and bottom padding, for when the title texture
|
||||
// height is smaller than the config's font height
|
||||
memcpy(&color, colors->background, sizeof(float) * 4);
|
||||
premultiply_alpha(color, con->alpha);
|
||||
box.x = texture_box.x;
|
||||
box.y = texture_box.y + texture_box.height;
|
||||
box.width = texture_box.width;
|
||||
box.height = config->font_height * output_scale - texture_box.height;
|
||||
if (box.height > 0) {
|
||||
render_rect(output->wlr_output, output_damage, &box, color);
|
||||
}
|
||||
}
|
||||
|
||||
// Padding above title
|
||||
|
@ -580,9 +604,9 @@ static void render_titlebar(struct sway_output *output,
|
|||
render_rect(output->wlr_output, output_damage, &box, color);
|
||||
|
||||
// Filler between title and marks
|
||||
box.width = inner_width * output_scale - title_width - marks_width;
|
||||
box.width = inner_width * output_scale - title_ob_width - marks_ob_width;
|
||||
if (box.width > 0) {
|
||||
box.x = (x + TITLEBAR_H_PADDING) * output_scale + title_width;
|
||||
box.x = (x + TITLEBAR_H_PADDING) * output_scale + title_ob_width;
|
||||
box.y = (y + TITLEBAR_V_PADDING) * output_scale;
|
||||
box.height = config->font_height * output_scale;
|
||||
render_rect(output->wlr_output, output_damage, &box, color);
|
||||
|
|
|
@ -783,7 +783,7 @@ static void update_title_texture(struct sway_container *con,
|
|||
|
||||
double scale = output->sway_output->wlr_output->scale;
|
||||
int width = 0;
|
||||
int height = config->font_height * scale;
|
||||
int height = con->title_height * scale;
|
||||
|
||||
cairo_t *c = cairo_create(NULL);
|
||||
get_text_size(c, config->font, &width, NULL, scale, config->pango_markup,
|
||||
|
|
|
@ -923,7 +923,7 @@ static void update_marks_texture(struct sway_view *view,
|
|||
|
||||
double scale = output->sway_output->wlr_output->scale;
|
||||
int width = 0;
|
||||
int height = config->font_height * scale;
|
||||
int height = view->swayc->title_height * scale;
|
||||
|
||||
cairo_t *c = cairo_create(NULL);
|
||||
get_text_size(c, config->font, &width, NULL, scale, false, "%s", buffer);
|
||||
|
|
Loading…
Reference in a new issue