rendericon: Ignore transparent icons
authorTimm Bäder <mail@baedert.org>
Sun, 10 Feb 2019 09:27:27 +0000 (10:27 +0100)
committerTimm Bäder <mail@baedert.org>
Sun, 10 Feb 2019 09:31:27 +0000 (10:31 +0100)
If the recoloring would end up multiplying the alpha component with 0
anyway, just skip drawing anything altogether.

This increases the icon count in the switch demo of the fishbowl from
~260 to ~280 on my system.

gtk/gtkrendericon.c

index 2d2dfa05f5213f0a7ac7d06dc2ea9fb784a7a35d..a4d867001f1e6e8fbad57fc024f443f21c56fd95 100644 (file)
@@ -133,6 +133,9 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle  *style,
 
       gtk_icon_theme_lookup_symbolic_colors (style, &fg, &sc, &wc, &ec);
 
+      if (fg.alpha == 0.0f)
+        goto transparent;
+
       graphene_matrix_init_from_float (&color_matrix, (float[16]) {
                                          sc.red - fg.red, sc.green - fg.green, sc.blue - fg.blue, 0,
                                          wc.red - fg.red, wc.green - fg.green, wc.blue - fg.blue, 0,
@@ -171,5 +174,6 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle  *style,
   if (has_shadow)
     gtk_snapshot_pop (snapshot);
 
+transparent:
   gtk_css_filter_value_pop_snapshot (filter_value, snapshot);
 }