diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-12-16 18:43:40 +0000 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-12-31 20:40:18 +0000 |
commit | 8ffb7f05293d306959d709063f430182dfbffb7a (patch) | |
tree | 7540f0fa65679dc8ad707512412eee5bede3e607 /swaybar/tray/item.c | |
parent | swaybar: do not create tray if hidden (diff) | |
download | sway-8ffb7f05293d306959d709063f430182dfbffb7a.tar.gz sway-8ffb7f05293d306959d709063f430182dfbffb7a.tar.zst sway-8ffb7f05293d306959d709063f430182dfbffb7a.zip |
swaybar: draw a sad face if SNI has no icon
Diffstat (limited to 'swaybar/tray/item.c')
-rw-r--r-- | swaybar/tray/item.c | 34 |
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; |