diff options
Diffstat (limited to 'swaybar/render.c')
-rw-r--r-- | swaybar/render.c | 67 |
1 files changed, 2 insertions, 65 deletions
diff --git a/swaybar/render.c b/swaybar/render.c index d02ecbbb..6ec47e79 100644 --- a/swaybar/render.c +++ b/swaybar/render.c | |||
@@ -302,72 +302,9 @@ void render(struct output *output, struct config *config, struct status_line *li | |||
302 | cairo_paint(cairo); | 302 | cairo_paint(cairo); |
303 | 303 | ||
304 | #ifdef ENABLE_TRAY | 304 | #ifdef ENABLE_TRAY |
305 | // Tray icons | 305 | uint32_t tray_width = tray_render(output, config); |
306 | uint32_t tray_padding = config->tray_padding; | ||
307 | unsigned int tray_width = window->width * window->scale; | ||
308 | const int item_size = (window->height * window->scale) - (2 * tray_padding); | ||
309 | |||
310 | if (item_size < 0) { | ||
311 | // Can't render items if the padding is too large | ||
312 | goto no_tray; | ||
313 | } | ||
314 | |||
315 | if (config->tray_output && strcmp(config->tray_output, output->name) != 0) { | ||
316 | goto no_tray; | ||
317 | } | ||
318 | |||
319 | for (int i = 0; i < tray->items->length; ++i) { | ||
320 | struct StatusNotifierItem *item = | ||
321 | tray->items->items[i]; | ||
322 | if (!item->image) { | ||
323 | continue; | ||
324 | } | ||
325 | |||
326 | struct sni_icon_ref *render_item = NULL; | ||
327 | int j; | ||
328 | for (j = i; j < output->items->length; ++j) { | ||
329 | struct sni_icon_ref *ref = | ||
330 | output->items->items[j]; | ||
331 | if (ref->ref == item) { | ||
332 | render_item = ref; | ||
333 | break; | ||
334 | } else { | ||
335 | sni_icon_ref_free(ref); | ||
336 | list_del(output->items, j); | ||
337 | } | ||
338 | } | ||
339 | |||
340 | if (!render_item) { | ||
341 | render_item = sni_icon_ref_create(item, item_size); | ||
342 | list_add(output->items, render_item); | ||
343 | } else if (item->dirty) { | ||
344 | // item needs re-render | ||
345 | sni_icon_ref_free(render_item); | ||
346 | output->items->items[j] = render_item = | ||
347 | sni_icon_ref_create(item, item_size); | ||
348 | } | ||
349 | |||
350 | tray_width -= tray_padding; | ||
351 | tray_width -= item_size; | ||
352 | |||
353 | cairo_operator_t op = cairo_get_operator(cairo); | ||
354 | cairo_set_operator(cairo, CAIRO_OPERATOR_OVER); | ||
355 | cairo_set_source_surface(cairo, render_item->icon, tray_width, tray_padding); | ||
356 | cairo_rectangle(cairo, tray_width, tray_padding, item_size, item_size); | ||
357 | cairo_fill(cairo); | ||
358 | cairo_set_operator(cairo, op); | ||
359 | |||
360 | item->dirty = false; | ||
361 | } | ||
362 | |||
363 | |||
364 | if (tray_width != window->width * window->scale) { | ||
365 | tray_width -= tray_padding; | ||
366 | } | ||
367 | |||
368 | no_tray: | ||
369 | #else | 306 | #else |
370 | const int tray_width = window->width * window->scale; | 307 | const uint32_t tray_width = window->width * window->scale; |
371 | #endif | 308 | #endif |
372 | 309 | ||
373 | // Command output | 310 | // Command output |