summaryrefslogtreecommitdiffstats
path: root/sway/desktop/render.c
diff options
context:
space:
mode:
authorLibravatar emersion <contact@emersion.fr>2018-07-27 18:17:47 +0100
committerLibravatar emersion <contact@emersion.fr>2018-07-29 14:33:26 +0100
commitd2172bd331937ab406175a6b4c5a76db6f406fbe (patch)
tree1fe59e7023589c1c8f0ef0f512e2de8aa6df36fa /sway/desktop/render.c
parentMerge pull request #2380 from mariusor/tap-button-map-man-fix (diff)
downloadsway-d2172bd331937ab406175a6b4c5a76db6f406fbe.tar.gz
sway-d2172bd331937ab406175a6b4c5a76db6f406fbe.tar.zst
sway-d2172bd331937ab406175a6b4c5a76db6f406fbe.zip
wip: redesign output_unmanaged_for_each_surface iterator
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r--sway/desktop/render.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/sway/desktop/render.c b/sway/desktop/render.c
index c9fdfd95..8eea19e0 100644
--- a/sway/desktop/render.c
+++ b/sway/desktop/render.c
@@ -123,6 +123,31 @@ static void render_surface_iterator(struct wlr_surface *surface, int sx, int sy,
123 render_texture(wlr_output, output_damage, texture, &box, matrix, alpha); 123 render_texture(wlr_output, output_damage, texture, &box, matrix, alpha);
124} 124}
125 125
126static void render_surface_iterator2(struct sway_output *output,
127 struct wlr_surface *surface, struct wlr_box *_box, float rotation,
128 void *_data) {
129 struct render_data *data = _data;
130 struct wlr_output *wlr_output = output->wlr_output;
131 pixman_region32_t *output_damage = data->damage;
132 float alpha = data->alpha;
133
134 struct wlr_texture *texture = wlr_surface_get_texture(surface);
135 if (!texture) {
136 return;
137 }
138
139 struct wlr_box box = *_box;
140 scale_box(&box, wlr_output->scale);
141
142 float matrix[9];
143 enum wl_output_transform transform =
144 wlr_output_transform_invert(surface->current.transform);
145 wlr_matrix_project_box(matrix, &box, transform, rotation,
146 wlr_output->transform_matrix);
147
148 render_texture(wlr_output, output_damage, texture, &box, matrix, alpha);
149}
150
126static void render_layer(struct sway_output *output, 151static void render_layer(struct sway_output *output,
127 pixman_region32_t *damage, struct wl_list *layer_surfaces) { 152 pixman_region32_t *damage, struct wl_list *layer_surfaces) {
128 struct render_data data = { 153 struct render_data data = {
@@ -133,6 +158,7 @@ static void render_layer(struct sway_output *output,
133 output_layer_for_each_surface(layer_surfaces, &data.root_geo, 158 output_layer_for_each_surface(layer_surfaces, &data.root_geo,
134 render_surface_iterator, &data); 159 render_surface_iterator, &data);
135} 160}
161
136#ifdef HAVE_XWAYLAND 162#ifdef HAVE_XWAYLAND
137static void render_unmanaged(struct sway_output *output, 163static void render_unmanaged(struct sway_output *output,
138 pixman_region32_t *damage, struct wl_list *unmanaged) { 164 pixman_region32_t *damage, struct wl_list *unmanaged) {
@@ -141,10 +167,11 @@ static void render_unmanaged(struct sway_output *output,
141 .damage = damage, 167 .damage = damage,
142 .alpha = 1.0f, 168 .alpha = 1.0f,
143 }; 169 };
144 output_unmanaged_for_each_surface(unmanaged, output, &data.root_geo, 170 output_unmanaged_for_each_surface(output, unmanaged,
145 render_surface_iterator, &data); 171 render_surface_iterator2, &data);
146} 172}
147#endif 173#endif
174
148static void render_drag_icons(struct sway_output *output, 175static void render_drag_icons(struct sway_output *output,
149 pixman_region32_t *damage, struct wl_list *drag_icons) { 176 pixman_region32_t *damage, struct wl_list *drag_icons) {
150 struct render_data data = { 177 struct render_data data = {