diff options
author | emersion <contact@emersion.fr> | 2018-07-27 19:16:36 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2018-07-29 14:33:26 +0100 |
commit | 8d5cc8625ce04c657eab6bd5f242a02e97ddd647 (patch) | |
tree | cf6ce6cf223a508361139b223fe72d4fe2c79065 /sway/desktop/render.c | |
parent | wip: redesign output_view_for_each_surface iterator (diff) | |
download | sway-8d5cc8625ce04c657eab6bd5f242a02e97ddd647.tar.gz sway-8d5cc8625ce04c657eab6bd5f242a02e97ddd647.tar.zst sway-8d5cc8625ce04c657eab6bd5f242a02e97ddd647.zip |
Completely switch over to new iterators
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r-- | sway/desktop/render.c | 49 |
1 files changed, 5 insertions, 44 deletions
diff --git a/sway/desktop/render.c b/sway/desktop/render.c index 18d076df..f25055b8 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c | |||
@@ -29,10 +29,7 @@ | |||
29 | #include "sway/tree/workspace.h" | 29 | #include "sway/tree/workspace.h" |
30 | 30 | ||
31 | struct render_data { | 31 | struct render_data { |
32 | struct root_geometry root_geo; | ||
33 | struct sway_output *output; | ||
34 | pixman_region32_t *damage; | 32 | pixman_region32_t *damage; |
35 | struct sway_view *view; | ||
36 | float alpha; | 33 | float alpha; |
37 | }; | 34 | }; |
38 | 35 | ||
@@ -92,38 +89,7 @@ damage_finish: | |||
92 | pixman_region32_fini(&damage); | 89 | pixman_region32_fini(&damage); |
93 | } | 90 | } |
94 | 91 | ||
95 | static void render_surface_iterator(struct wlr_surface *surface, int sx, int sy, | 92 | static void render_surface_iterator(struct sway_output *output, |
96 | void *_data) { | ||
97 | struct render_data *data = _data; | ||
98 | struct wlr_output *wlr_output = data->output->wlr_output; | ||
99 | float rotation = data->root_geo.rotation; | ||
100 | pixman_region32_t *output_damage = data->damage; | ||
101 | float alpha = data->alpha; | ||
102 | |||
103 | struct wlr_texture *texture = wlr_surface_get_texture(surface); | ||
104 | if (!texture) { | ||
105 | return; | ||
106 | } | ||
107 | |||
108 | struct wlr_box box; | ||
109 | bool intersects = output_get_surface_box(&data->root_geo, data->output, | ||
110 | surface, sx, sy, &box); | ||
111 | if (!intersects) { | ||
112 | return; | ||
113 | } | ||
114 | |||
115 | scale_box(&box, wlr_output->scale); | ||
116 | |||
117 | float matrix[9]; | ||
118 | enum wl_output_transform transform = | ||
119 | wlr_output_transform_invert(surface->current.transform); | ||
120 | wlr_matrix_project_box(matrix, &box, transform, rotation, | ||
121 | wlr_output->transform_matrix); | ||
122 | |||
123 | render_texture(wlr_output, output_damage, texture, &box, matrix, alpha); | ||
124 | } | ||
125 | |||
126 | static void render_surface_iterator2(struct sway_output *output, | ||
127 | struct wlr_surface *surface, struct wlr_box *_box, float rotation, | 93 | struct wlr_surface *surface, struct wlr_box *_box, float rotation, |
128 | void *_data) { | 94 | void *_data) { |
129 | struct render_data *data = _data; | 95 | struct render_data *data = _data; |
@@ -151,36 +117,33 @@ static void render_surface_iterator2(struct sway_output *output, | |||
151 | static void render_layer(struct sway_output *output, | 117 | static void render_layer(struct sway_output *output, |
152 | pixman_region32_t *damage, struct wl_list *layer_surfaces) { | 118 | pixman_region32_t *damage, struct wl_list *layer_surfaces) { |
153 | struct render_data data = { | 119 | struct render_data data = { |
154 | .output = output, | ||
155 | .damage = damage, | 120 | .damage = damage, |
156 | .alpha = 1.0f, | 121 | .alpha = 1.0f, |
157 | }; | 122 | }; |
158 | output_layer_for_each_surface(output, layer_surfaces, | 123 | output_layer_for_each_surface(output, layer_surfaces, |
159 | render_surface_iterator2, &data); | 124 | render_surface_iterator, &data); |
160 | } | 125 | } |
161 | 126 | ||
162 | #ifdef HAVE_XWAYLAND | 127 | #ifdef HAVE_XWAYLAND |
163 | static void render_unmanaged(struct sway_output *output, | 128 | static void render_unmanaged(struct sway_output *output, |
164 | pixman_region32_t *damage, struct wl_list *unmanaged) { | 129 | pixman_region32_t *damage, struct wl_list *unmanaged) { |
165 | struct render_data data = { | 130 | struct render_data data = { |
166 | .output = output, | ||
167 | .damage = damage, | 131 | .damage = damage, |
168 | .alpha = 1.0f, | 132 | .alpha = 1.0f, |
169 | }; | 133 | }; |
170 | output_unmanaged_for_each_surface(output, unmanaged, | 134 | output_unmanaged_for_each_surface(output, unmanaged, |
171 | render_surface_iterator2, &data); | 135 | render_surface_iterator, &data); |
172 | } | 136 | } |
173 | #endif | 137 | #endif |
174 | 138 | ||
175 | static void render_drag_icons(struct sway_output *output, | 139 | static void render_drag_icons(struct sway_output *output, |
176 | pixman_region32_t *damage, struct wl_list *drag_icons) { | 140 | pixman_region32_t *damage, struct wl_list *drag_icons) { |
177 | struct render_data data = { | 141 | struct render_data data = { |
178 | .output = output, | ||
179 | .damage = damage, | 142 | .damage = damage, |
180 | .alpha = 1.0f, | 143 | .alpha = 1.0f, |
181 | }; | 144 | }; |
182 | output_drag_icons_for_each_surface(output, drag_icons, | 145 | output_drag_icons_for_each_surface(output, drag_icons, |
183 | render_surface_iterator2, &data); | 146 | render_surface_iterator, &data); |
184 | } | 147 | } |
185 | 148 | ||
186 | static void render_rect(struct wlr_output *wlr_output, | 149 | static void render_rect(struct wlr_output *wlr_output, |
@@ -226,12 +189,10 @@ static void premultiply_alpha(float color[4], float opacity) { | |||
226 | static void render_view_surfaces(struct sway_view *view, | 189 | static void render_view_surfaces(struct sway_view *view, |
227 | struct sway_output *output, pixman_region32_t *damage, float alpha) { | 190 | struct sway_output *output, pixman_region32_t *damage, float alpha) { |
228 | struct render_data data = { | 191 | struct render_data data = { |
229 | .output = output, | ||
230 | .damage = damage, | 192 | .damage = damage, |
231 | .view = view, | ||
232 | .alpha = alpha, | 193 | .alpha = alpha, |
233 | }; | 194 | }; |
234 | output_view_for_each_surface(output, view, render_surface_iterator2, &data); | 195 | output_view_for_each_surface(output, view, render_surface_iterator, &data); |
235 | } | 196 | } |
236 | 197 | ||
237 | static void render_saved_view(struct sway_view *view, | 198 | static void render_saved_view(struct sway_view *view, |