Adapt workspace switcher Cairo logic to use modified border cache

This commit is contained in:
Jack Zeal 2026-03-31 22:23:54 -07:00
parent 2f2cf73bfa
commit 8188f0a80e

View file

@ -116,64 +116,47 @@ _osd_update(void)
uint32_t colour32 = (uint32_t)(a*255) << 24 | (uint32_t)(r*255) << 16 | (uint32_t)(g*255) << 8 | (uint32_t)(b*255); uint32_t colour32 = (uint32_t)(a*255) << 24 | (uint32_t)(r*255) << 16 | (uint32_t)(g*255) << 8 | (uint32_t)(b*255);
struct borderset * renderedborders = getBorders(colour32, bw, BORDER_SINGLE, 0); struct borderset * renderedborders = getBorders(colour32, bw, BORDER_SINGLE, 0);
cairo_set_source_surface(cairo, renderedborders->top->surface, 0, 0);
cairo_surface_t* top = cairo_image_surface_create_for_data((unsigned char *)renderedborders->top, CAIRO_FORMAT_ARGB32, 1, 1, 4);
cairo_set_source_surface(cairo, top, 0, 0);
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT); cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
cairo_rectangle(cairo, bw, 0, width-bw*2, bw); cairo_rectangle(cairo, bw, 0, width-bw*2, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(top);
cairo_set_source_surface(cairo, renderedborders->bottom->surface, 0, 0);
cairo_surface_t* bottom = cairo_image_surface_create_for_data((unsigned char *)renderedborders->bottom, CAIRO_FORMAT_ARGB32, 1, 1, 4);
cairo_set_source_surface(cairo, bottom, 0, 0);
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT); cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
cairo_rectangle(cairo, bw, height-bw, width-bw*2, bw); cairo_rectangle(cairo, bw, height-bw, width-bw*2, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(bottom);
cairo_surface_t* left = cairo_image_surface_create_for_data((unsigned char *)renderedborders->left, CAIRO_FORMAT_ARGB32, 1, 1, 4); cairo_set_source_surface(cairo, renderedborders->left->surface, 0, 0);
cairo_set_source_surface(cairo, left, 0, 0);
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT); cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
cairo_rectangle(cairo, 0, bw, bw, height-bw*2); cairo_rectangle(cairo, 0, bw, bw, height-bw*2);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(left);
cairo_surface_t* right = cairo_image_surface_create_for_data((unsigned char *)renderedborders->right, CAIRO_FORMAT_ARGB32, 1, 1, 4); cairo_set_source_surface(cairo, renderedborders->right->surface, 0, 0);
cairo_set_source_surface(cairo, right, 0, 0);
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT); cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
cairo_rectangle(cairo, width-bw, bw, bw, height-bw*2); cairo_rectangle(cairo, width-bw, bw, bw, height-bw*2);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(right);
cairo_surface_t* tl = cairo_image_surface_create_for_data((unsigned char *)renderedborders->tl, CAIRO_FORMAT_ARGB32, bw, bw, 4*bw); cairo_set_source_surface(cairo, renderedborders->tl->surface, 0, 0);
cairo_set_source_surface(cairo, tl, 0, 0);
cairo_rectangle(cairo, 0, 0, bw, bw); cairo_rectangle(cairo, 0, 0, bw, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(tl);
cairo_set_source_surface(cairo, renderedborders->tr->surface, width-bw, 0);
cairo_surface_t* tr = cairo_image_surface_create_for_data((unsigned char *)renderedborders->tr, CAIRO_FORMAT_ARGB32, bw, bw, 4*bw);
cairo_set_source_surface(cairo, tr, width-bw, 0);
cairo_rectangle(cairo, width - bw, 0, bw, bw); cairo_rectangle(cairo, width - bw, 0, bw, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(tr);
cairo_set_source_surface(cairo, renderedborders->bl->surface, 0, height - bw);
cairo_surface_t* bl = cairo_image_surface_create_for_data((unsigned char *)renderedborders->bl, CAIRO_FORMAT_ARGB32, bw, bw, 4*bw);
cairo_set_source_surface(cairo, bl, 0, height - bw);
cairo_rectangle(cairo, 0, height - bw, bw, bw); cairo_rectangle(cairo, 0, height - bw, bw, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(bl);
cairo_set_source_surface(cairo, renderedborders->br->surface, width - bw, height -bw);
cairo_surface_t* br = cairo_image_surface_create_for_data((unsigned char *)renderedborders->br, CAIRO_FORMAT_ARGB32, bw, bw, 4*bw);
cairo_set_source_surface(cairo, br, width - bw, height -bw);
cairo_rectangle(cairo, width - bw, height - bw, bw, bw); cairo_rectangle(cairo, width - bw, height - bw, bw, bw);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_finish(br);
set_cairo_color(cairo, theme->osd_border_color); set_cairo_color(cairo, theme->osd_border_color);
} else { } else {