diff options
author | Guido Günther <agx@sigxcpu.org> | 2018-02-23 11:30:55 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2018-02-25 16:53:36 +0100 |
commit | e2ea1ebe48db25f7372bbab21bc66cde5934895b (patch) | |
tree | 0b0289ecb7c9cf7967c1d6476e0e519984e55629 | |
parent | d08792bfffc6b7b28f59d7ee100091805367b7fa (diff) |
rootston: Add alpha channel to views
-rw-r--r-- | include/rootston/view.h | 3 | ||||
-rw-r--r-- | rootston/desktop.c | 4 | ||||
-rw-r--r-- | rootston/output.c | 4 |
3 files changed, 10 insertions, 1 deletions
diff --git a/include/rootston/view.h b/include/rootston/view.h index c92cbcb1..7464edc5 100644 --- a/include/rootston/view.h +++ b/include/rootston/view.h @@ -83,6 +83,7 @@ struct roots_view { double x, y; uint32_t width, height; float rotation; + float alpha; bool decorated; int border_width; @@ -94,6 +95,7 @@ struct roots_view { double x, y; uint32_t width, height; float rotation; + float alpha; } saved; struct { @@ -191,6 +193,7 @@ void view_maximize(struct roots_view *view, bool maximized); void view_set_fullscreen(struct roots_view *view, bool fullscreen, struct wlr_output *output); void view_rotate(struct roots_view *view, float rotation); +void view_cycle_alpha(struct roots_view *view); void view_close(struct roots_view *view); bool view_center(struct roots_view *view); void view_setup(struct roots_view *view); diff --git a/rootston/desktop.c b/rootston/desktop.c index 57e2d54b..9d5cd2fa 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -25,6 +25,10 @@ struct roots_view *view_create() { struct roots_view *view = calloc(1, sizeof(struct roots_view)); + if (!view) { + return NULL; + } + view->alpha = 1.0f; return view; } diff --git a/rootston/output.c b/rootston/output.c index 3fc8ea84..8d968a98 100644 --- a/rootston/output.c +++ b/rootston/output.c @@ -202,6 +202,7 @@ struct render_data { struct roots_output *output; struct timespec *when; pixman_region32_t *damage; + float alpha; }; /** @@ -296,7 +297,7 @@ static void render_surface(struct wlr_surface *surface, double lx, double ly, pixman_box32_t *rects = pixman_region32_rectangles(&damage, &nrects); for (int i = 0; i < nrects; ++i) { scissor_output(output, &rects[i]); - wlr_render_with_matrix(renderer, surface->texture, &matrix, 1.0f); + wlr_render_with_matrix(renderer, surface->texture, &matrix, data->alpha); } damage_finish: @@ -376,6 +377,7 @@ static void render_view(struct roots_view *view, struct render_data *data) { return; } + data->alpha = view->alpha; render_decorations(view, data); view_for_each_surface(view, render_surface, data); } |