sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit e83e5487be4142af290e772199c2870d6140be46
parent fbcbbb976c29bb2c4b1bc6aeb6331acd10c70f5f
Author: Ryan Dwyer <ryandwyer1@gmail.com>
Date:   Sat,  5 May 2018 20:32:31 +1000

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.

Diffstat:
Msway/desktop/output.c | 8+++-----
Msway/tree/arrange.c | 1-
Msway/tree/container.c | 6------
3 files changed, 3 insertions(+), 12 deletions(-)

diff --git 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 @@ -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 @@ -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);