tMove border rendering to its own function - spkp - Stacking wayland compositor
(HTM) git clone git://git.z3bra.org/spkp.git
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit b441298945c16788b62304a66c43a3ceb3204eb0
(DIR) parent 7cd85fd0d45f27540871c22f58c080c8b17b57dc
(HTM) Author: Willy Goiffon <dev@z3bra.org>
Date: Fri, 13 Nov 2020 10:13:23 +0100
Move border rendering to its own function
Diffstat:
M compositor.c | 52 +++++++++++++++++++++++++------
1 file changed, 42 insertions(+), 10 deletions(-)
---
(DIR) diff --git a/compositor.c b/compositor.c
t@@ -183,6 +183,7 @@ static void cb_paint_cursor(struct wl_listener *, void *);
static void add_keyboard(struct state *, struct wlr_input_device *);
static void add_pointer(struct state *, struct wlr_input_device *);
static void render(struct wlr_surface *, int, int, void *);
+static void render_border(struct wlr_box *, struct rdata *, int);
static void focus(struct window *);
static int keybinding(struct state *, uint32_t, uint32_t, enum wlr_key_state);
static struct window *underneath(struct state *, double, double);
t@@ -801,13 +802,13 @@ add_pointer(struct state *server, struct wlr_input_device *device)
void
render(struct wlr_surface *surface, int x, int y, void *data)
{
- float *color, matrix[9];
+ float matrix[9];
struct rdata *rdata;
struct window *window;
struct wlr_output *output;
struct wlr_surface *focus;
struct wlr_texture *texture;
- struct wlr_box box, border;
+ struct wlr_box box;
enum wl_output_transform transform;
rdata = data;
t@@ -826,20 +827,51 @@ render(struct wlr_surface *surface, int x, int y, void *data)
box.height = surface->current.height;
focus = window->server->seat->keyboard_state.focused_surface;
- if (surface == window->toplevel->surface) {
- border.x = box.x - bordersize;
- border.y = box.y - bordersize;
- border.width = box.width + bordersize * 2;
- border.height = box.height + bordersize * 2;
- color = surface == focus ? activecolor : bordercolor;
- wlr_render_rect(rdata->renderer, &border, color, output->transform_matrix);
- }
+ if (surface == window->toplevel->surface)
+ render_border(&box, rdata, (surface == focus));
wlr_matrix_project_box(matrix, &box, transform, 0, output->transform_matrix);
wlr_render_texture_with_matrix(rdata->renderer, texture, matrix, 1);
wlr_surface_send_frame_done(surface, &rdata->when);
}
+void
+render_border(struct wlr_box *content, struct rdata *rdata, int active)
+{
+ float *color;
+ struct wlr_box box;
+
+ color = active ? activecolor : bordercolor;
+
+ /* top */
+ box.x = content->x - bordersize;
+ box.y = content->y - bordersize;
+ box.width = bordersize * 2 + content->width;
+ box.height = bordersize;
+ wlr_render_rect(rdata->renderer, &box, color, rdata->output->transform_matrix);
+
+ /* bottom */
+ box.x = content->x - bordersize;
+ box.y = content->y + content->height;
+ box.width = bordersize * 2 + content->width;
+ box.height = bordersize;
+ wlr_render_rect(rdata->renderer, &box, color, rdata->output->transform_matrix);
+
+ /* left */
+ box.x = content->x - bordersize;
+ box.y = content->y;
+ box.width = bordersize;
+ box.height = content->height;
+ wlr_render_rect(rdata->renderer, &box, color, rdata->output->transform_matrix);
+
+ /* right */
+ box.x = content->x + content->width;
+ box.y = content->y;
+ box.width = bordersize;
+ box.height = content->height;
+ wlr_render_rect(rdata->renderer, &box, color, rdata->output->transform_matrix);
+}
+
/*
* Set keyboard focus on the given top-level window.
*/