- if (tsk->icon_data == 0) return;
-
- Pixmap *pmap = (active == 0) ? (&tsk->area.pix.pmap) : (&tsk->area.pix_active.pmap);
-
- /* Find pos */
- int pos_x;
- Panel *panel = (Panel*)tsk->area.panel;
- if (panel->g_task.centered) {
- if (panel->g_task.text)
- pos_x = (tsk->area.width - text_width - panel->g_task.icon_size1) / 2;
- else
- pos_x = (tsk->area.width - panel->g_task.icon_size1) / 2;
- }
- else pos_x = panel->g_task.area.paddingxlr + panel->g_task.area.pix.border.width;
-
- /* Render */
- Imlib_Image icon;
- Imlib_Color_Modifier cmod;
- DATA8 red[256], green[256], blue[256], alpha[256];
-
- // TODO: cpu improvement : compute only when icon changed
- DATA32 *data;
- /* do we have 64bit? => long = 8bit */
- if (sizeof(long) != 4) {
- int length = tsk->icon_width * tsk->icon_height;
- data = malloc(sizeof(DATA32) * length);
- int i;
- for (i = 0; i < length; ++i)
- data[i] = tsk->icon_data[i];
- }
- else data = (DATA32 *) tsk->icon_data;
-
- icon = imlib_create_image_using_data (tsk->icon_width, tsk->icon_height, data);
- imlib_context_set_image (icon);
- imlib_context_set_drawable (*pmap);
-
- cmod = imlib_create_color_modifier ();
- imlib_context_set_color_modifier (cmod);
- imlib_image_set_has_alpha (1);
- imlib_get_color_modifier_tables (red, green, blue, alpha);
-
- int i, opacity;
- opacity = (active == 0) ? (255*panel->g_task.font.alpha) : (255*panel->g_task.font_active.alpha);
- for (i = 127; i < 256; i++) alpha[i] = opacity;
-
- imlib_set_color_modifier_tables (red, green, blue, alpha);
-
- //imlib_render_image_on_drawable (pos_x, pos_y);
- imlib_render_image_on_drawable_at_size (pos_x, panel->g_task.icon_posy, panel->g_task.icon_size1, panel->g_task.icon_size1);
-
- imlib_free_color_modifier ();
- imlib_free_image ();
- if (sizeof(long) != 4) free(data);
+ if (tsk->icon[tsk->current_state] == 0) return;
+
+ // Find pos
+ int pos_x;
+ Panel *panel = (Panel*)tsk->area.panel;
+ if (panel->g_task.centered) {
+ if (panel->g_task.text)
+ pos_x = (tsk->area.width - text_width - panel->g_task.icon_size1) / 2;
+ else
+ pos_x = (tsk->area.width - panel->g_task.icon_size1) / 2;
+ }
+ else pos_x = panel->g_task.area.paddingxlr + tsk->area.bg->border.width;
+
+ // Render
+ imlib_context_set_image (tsk->icon[tsk->current_state]);
+ if (server.real_transparency) {
+ render_image(tsk->area.pix, pos_x, panel->g_task.icon_posy, imlib_image_get_width(), imlib_image_get_height() );
+ }
+ else {
+ imlib_context_set_drawable(tsk->area.pix);
+ imlib_render_image_on_drawable (pos_x, panel->g_task.icon_posy);
+ }