aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2018-02-23 11:30:55 +0100
committerGuido Günther <agx@sigxcpu.org>2018-02-25 16:53:36 +0100
commite2ea1ebe48db25f7372bbab21bc66cde5934895b (patch)
tree0b0289ecb7c9cf7967c1d6476e0e519984e55629
parentd08792bfffc6b7b28f59d7ee100091805367b7fa (diff)
rootston: Add alpha channel to views
-rw-r--r--include/rootston/view.h3
-rw-r--r--rootston/desktop.c4
-rw-r--r--rootston/output.c4
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);
}