From a8e084433d57609398fd1b72b72d3d7e71925d44 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 28 Jan 2016 19:41:03 -0500 Subject: [PATCH] Window borders proof of concept --- sway/render.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sway/render.c b/sway/render.c index 66d2e5f0..a5ba2f4c 100644 --- a/sway/render.c +++ b/sway/render.c @@ -1,7 +1,16 @@ #include "render.h" -#include +#include +#include #include +void cairo_set_source_u32(cairo_t *cairo, uint32_t color) { + cairo_set_source_rgba(cairo, + (color >> (3*8) & 0xFF) / 255.0, + (color >> (2*8) & 0xFF) / 255.0, + (color >> (1*8) & 0xFF) / 255.0, + (color >> (0*8) & 0xFF) / 255.0); +} + cairo_t *create_cairo_context(int width, int height, int channels, cairo_surface_t **surf, unsigned char **buf) { cairo_t *cr; @@ -24,12 +33,18 @@ cairo_t *create_cairo_context(int width, int height, int channels, } void render_view_borders(wlc_handle view) { + const int bw = 2; unsigned char *surf_data; cairo_surface_t *surf; - int texture_id; - const struct wlc_geometry *geo = wlc_view_get_geometry(view); - cairo_t *cr = create_cairo_context(geo->size.w, geo->size.h, 4, &surf, &surf_data); - // TODO + struct wlc_geometry geo = *wlc_view_get_geometry(view); + cairo_t *cr = create_cairo_context(geo.size.w + bw * 2, geo.size.h + bw * 2, 4, &surf, &surf_data); + cairo_set_source_u32(cr, 0x0000FFFF); + cairo_paint(cr); + geo.origin.x -= bw; + geo.origin.y -= bw; + geo.size.w += bw * 2; + geo.size.h += bw * 2; + wlc_pixels_write(WLC_RGBA8888, &geo, surf_data); cairo_destroy(cr); free(surf_data); }