aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-12-16 18:43:40 +0000
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-12-31 20:40:18 +0000
commit8ffb7f05293d306959d709063f430182dfbffb7a (patch)
tree7540f0fa65679dc8ad707512412eee5bede3e607 /swaybar
parentswaybar: do not create tray if hidden (diff)
downloadsway-8ffb7f05293d306959d709063f430182dfbffb7a.tar.gz
sway-8ffb7f05293d306959d709063f430182dfbffb7a.tar.zst
sway-8ffb7f05293d306959d709063f430182dfbffb7a.zip
swaybar: draw a sad face if SNI has no icon
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/tray/item.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/swaybar/tray/item.c b/swaybar/tray/item.c
index 98d3dc1f..d00339e2 100644
--- a/swaybar/tray/item.c
+++ b/swaybar/tray/item.c
@@ -384,16 +384,32 @@ uint32_t render_sni(cairo_t *cairo, struct swaybar_output *output, double *x,
384 } 384 }
385 } 385 }
386 386
387 if (!sni->icon) { 387 int icon_size;
388 // TODO fallback
389 return 0;
390 }
391
392 cairo_surface_t *icon; 388 cairo_surface_t *icon;
393 int actual_size = cairo_image_surface_get_height(sni->icon); 389 if (sni->icon) {
394 int icon_size = actual_size < ideal_size ? 390 int actual_size = cairo_image_surface_get_height(sni->icon);
395 actual_size * (ideal_size / actual_size) : ideal_size; 391 icon_size = actual_size < ideal_size ?
396 icon = cairo_image_surface_scale(sni->icon, icon_size, icon_size); 392 actual_size*(ideal_size/actual_size) : ideal_size;
393 icon = cairo_image_surface_scale(sni->icon, icon_size, icon_size);
394 } else { // draw a sad face
395 icon_size = ideal_size*0.8;
396 icon = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, icon_size, icon_size);
397 cairo_t *cairo_icon = cairo_create(icon);
398 cairo_set_source_u32(cairo_icon, 0xFF0000FF);
399 cairo_translate(cairo_icon, icon_size/2, icon_size/2);
400 cairo_scale(cairo_icon, icon_size/2, icon_size/2);
401 cairo_arc(cairo_icon, 0, 0, 1, 0, 7);
402 cairo_fill(cairo_icon);
403 cairo_set_operator(cairo_icon, CAIRO_OPERATOR_CLEAR);
404 cairo_arc(cairo_icon, 0.35, -0.3, 0.1, 0, 7);
405 cairo_fill(cairo_icon);
406 cairo_arc(cairo_icon, -0.35, -0.3, 0.1, 0, 7);
407 cairo_fill(cairo_icon);
408 cairo_arc(cairo_icon, 0, 0.75, 0.5, 3.71238898038469, 5.71238898038469);
409 cairo_set_line_width(cairo_icon, 0.1);
410 cairo_stroke(cairo_icon);
411 cairo_destroy(cairo_icon);
412 }
397 413
398 int padded_size = icon_size + 2*padding; 414 int padded_size = icon_size + 2*padding;
399 *x -= padded_size; 415 *x -= padded_size;