All pastes #153134 Raw Edit

bcessa

public c v1 · immutable
#153134 ·published 2006-08-29 12:47 UTC
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);}