aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/render.c
diff options
context:
space:
mode:
authorLibravatar Calvin Lee <cyrus296@gmail.com>2017-06-07 21:32:48 -0700
committerLibravatar Calvin Lee <cyrus296@gmail.com>2017-06-07 21:32:48 -0700
commit1451ee8fd13dd35227d11e393c80871c70ad90f0 (patch)
tree74a34de797c46c2734751d77b4dc4ac5694af9a7 /swaybar/render.c
parentFix cairo blending on tray icons (diff)
downloadsway-1451ee8fd13dd35227d11e393c80871c70ad90f0.tar.gz
sway-1451ee8fd13dd35227d11e393c80871c70ad90f0.tar.zst
sway-1451ee8fd13dd35227d11e393c80871c70ad90f0.zip
Reorganize Tray Code
Remove tray code from bar.c and render.c
Diffstat (limited to 'swaybar/render.c')
-rw-r--r--swaybar/render.c67
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
368no_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