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.
master
Ryan Dwyer 7 years ago
parent fbcbbb976c
commit e83e5487be

@ -308,12 +308,10 @@ static void render_container_simple_border_normal(struct sway_output *output,
// Title text // Title text
if (title_texture) { if (title_texture) {
double x = (con->x + con->sway_view->border_thickness) wlr_renderer_scissor(renderer, &box);
* output->wlr_output->scale;
double y = (con->y + con->sway_view->border_thickness)
* output->wlr_output->scale;
wlr_render_texture(renderer, title_texture, 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);
} }
} }

@ -203,7 +203,6 @@ void arrange_children_of(struct sway_container *parent) {
} else { } else {
arrange_children_of(child); arrange_children_of(child);
} }
container_update_title_textures(child);
} }
container_damage_whole(parent); container_damage_whole(parent);
update_debug_tree(); update_debug_tree();

@ -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); get_text_size(c, config->font, &width, NULL, scale, false, "%s", con->name);
cairo_destroy(c); 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_surface_t *surface = cairo_image_surface_create(
CAIRO_FORMAT_ARGB32, width, height); CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cairo = cairo_create(surface); cairo_t *cairo = cairo_create(surface);

Loading…
Cancel
Save