diff options
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r-- | sway/desktop/render.c | 31 |
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 | ||
126 | static 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 | |||
126 | static void render_layer(struct sway_output *output, | 151 | static 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 |
137 | static void render_unmanaged(struct sway_output *output, | 163 | static 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 | |||
148 | static void render_drag_icons(struct sway_output *output, | 175 | static 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 = { |