rendered paste body//protostatic Evas_Object *_ethumb_thumbnail_add(E_Border *bd, Evas *e);//funtion to build the thumbnail_ethumb_thumbnail_add(E_Border *bd, Evas *evas){ Evas_Object *o; Display *disp; XWindowAttributes wattr; Imlib_Image thumb; int twidth, theight; int w, h, ID; void *data; //FIXME: Dinamically set proportion twidth = 128; //2M cache just in case imlib_set_cache_size(2048 * 1024); //Setting up enviroment imlib_context_set_display(disp); imlib_context_set_anti_alias(1); imlib_context_set_visual(DefaultVisual(disp, DefaultScreen(disp))); imlib_context_set_colormap(DefaultColormap(disp, DefaultScreen(disp))); imlib_context_set_drawable(bd->win); //FIXME: May be use some bd->w, bd->h, etc... XGetWindowAttributes(disp, bd->win, &wattr); theight = (int)((float)wattr.height / ((float)wattr.width/(float)twidth)); //Draw the thumbnail if (4*twidth >= wattr.width || 4*theight >= wattr.height) { thumb = imlib_create_image_from_drawable((Pixmap)0, 0, 0, wattr.width, wattr.height, 1); imlib_context_set_image(thumb); thumb = imlib_create_cropped_scaled_image(0, 0, wattr.width, wattr.height, twidth, theight); } else { thumb = imlib_create_scaled_image_from_drawable((Pixmap)0, 0, 0, wattr.width, wattr.height, 4*twidth, 4*theight, 1, 1); imlib_context_set_image(thumb); thumb = imlib_create_cropped_scaled_image(0, 0, 4*twidth, 4*theight, twidth, theight); } //Pass thumbnail as an evas_object imlib_context_set_image(thumb); w = imlib_image_get_width(); h = imlib_image_get_height(); data = imlib_image_get_data(); o = evas_object_image_add(evas); evas_object_image_size_set(o, w, h); evas_object_image_data_set(o, data); evas_object_image_data_update_add(o, 0, 0, w, h); return o;}//how i use this function//first setup o_holderstatic Ethumb_Icon *_ethumb_icon_new(Ethumb *b, E_Border *bd){ Ethumb_Icon *ic; char buf[4096]; ic = E_NEW(Ethumb_Icon, 1); e_object_ref(E_OBJECT(bd)); ic->ethumb = b; ic->border = bd; ic->o_holder = edje_object_add(evas_object_evas_get(b->o_box)); snprintf(buf, sizeof(buf), "%s/ethumb.edj", e_module_dir_get(ethumb_config->module)); if(!e_theme_edje_object_set(ic->o_holder, "base/theme/modules/ethumb", "modules/ethumb/icon")) edje_object_file_set(ic->o_holder, buf, "modules/ethumb/icon"); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_IN, _ethumb_cb_icon_mouse_in, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_OUT, _ethumb_cb_icon_mouse_out, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_DOWN, _ethumb_cb_icon_mouse_down, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_UP, _ethumb_cb_icon_mouse_up, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_MOVE, _ethumb_cb_icon_mouse_move, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOVE, _ethumb_cb_icon_move, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_RESIZE, _ethumb_cb_icon_resize, ic); evas_object_show(ic->o_holder); ic->o_holder2 = edje_object_add(evas_object_evas_get(b->o_box)); if(!e_theme_edje_object_set(ic->o_holder2, "base/theme/modules/ethumb", "modules/ethumb/icon_overlay")) edje_object_file_set(ic->o_holder2, buf, "modules/ethumb/icon_overlay"); evas_object_layer_set(ic->o_holder2, 9999); evas_object_pass_events_set(ic->o_holder2, 1); evas_object_show(ic->o_holder2); _ethumb_icon_fill(ic); return ic;}//now use the thumbnail as iconstatic void_ethumb_icon_fill(Ethumb_Icon *ic){ char *label; ic->o_icon = _ethumb_thumbnail_add(ic->border, evas_object_evas_get(ic->ethumb->o_box)); edje_object_part_swallow(ic->o_holder, "item", ic->o_icon); evas_object_pass_events_set(ic->o_icon, 1); evas_object_show(ic->o_icon); ic->o_icon2 = _ethumb_thumbnail_add(ic->border, evas_object_evas_get(ic->ethumb->o_box)); edje_object_part_swallow(ic->o_holder2, "item", ic->o_icon2); evas_object_pass_events_set(ic->o_icon2, 1); evas_object_show(ic->o_icon2); switch (ic->ethumb->icon_label) { case 0: label = ic->border->client.netwm.name; break; case 1: label = ic->border->client.icccm.title; break; case 2: label = ic->border->client.icccm.class; break; case 3: label = ic->border->client.netwm.icon_name; if (!label) label = ic->border->client.icccm.icon_name; break; } if (!label) label = "?"; edje_object_part_text_set(ic->o_holder, "label", label); edje_object_part_text_set(ic->o_holder2, "label", label);}