From e83e5487be4142af290e772199c2870d6140be46 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 5 May 2018 20:32:31 +1000 Subject: [PATCH] Use scissor to render title texture This allows the title's texture to always be the full width of the text, and clipped at render time according to the desired width (eg. tabs...). As an added bonus, the texture no longer needs to be updated when containers are arranged. --- sway/desktop/output.c | 8 +++----- sway/tree/arrange.c | 1 - sway/tree/container.c | 6 ------ 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 03af4239a..d17a6e143 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -308,12 +308,10 @@ static void render_container_simple_border_normal(struct sway_output *output, // Title text if (title_texture) { - double x = (con->x + con->sway_view->border_thickness) - * output->wlr_output->scale; - double y = (con->y + con->sway_view->border_thickness) - * output->wlr_output->scale; + wlr_renderer_scissor(renderer, &box); wlr_render_texture(renderer, title_texture, - output->wlr_output->transform_matrix, x, y, 1); + output->wlr_output->transform_matrix, box.x, box.y, 1); + wlr_renderer_scissor(renderer, NULL); } } diff --git a/sway/tree/arrange.c b/sway/tree/arrange.c index 1299beb6f..83bb20fbe 100644 --- a/sway/tree/arrange.c +++ b/sway/tree/arrange.c @@ -203,7 +203,6 @@ void arrange_children_of(struct sway_container *parent) { } else { arrange_children_of(child); } - container_update_title_textures(child); } container_damage_whole(parent); update_debug_tree(); diff --git a/sway/tree/container.c b/sway/tree/container.c index 3746ad816..9fb47020e 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -584,12 +584,6 @@ static void update_title_texture(struct sway_container *con, get_text_size(c, config->font, &width, NULL, scale, false, "%s", con->name); cairo_destroy(c); - int borders = (con->type == C_VIEW ? con->sway_view->border_thickness : - config->border_thickness) * 2 * scale; - if (width > con->width * scale - borders) { - width = con->width * scale - borders; - } - cairo_surface_t *surface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height); cairo_t *cairo = cairo_create(surface);