Enlightenment CVS committal
Author : xcomputerman
Project : e17
Module : proto
Dir : e17/proto/esmart/src/trans
Modified Files:
esmart_trans.c
Log Message:
Forgot this one
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/esmart/src/trans/esmart_trans.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- esmart_trans.c 8 Nov 2003 20:19:15 -0000 1.1
+++ esmart_trans.c 8 Nov 2003 20:25:33 -0000 1.2
@@ -29,6 +29,86 @@
static void _esmart_trans_x11_clip_set(Evas_Object *o, Evas_Object *clip);
static void _esmart_trans_x11_clip_unset(Evas_Object *o);
+/**
+ * Stolen from ev and iconbar, hopefully this should be shareable now
+ */
+static Evas_Object *
+_esmart_trans_x11_pixmap_get(Evas *evas, Evas_Object *old,
+ int x, int y, int w, int h)
+{
+ Atom prop,type;
+ int format;
+ unsigned long length,after;
+ unsigned char *data;
+ Evas_Object *new=NULL;
+ Pixmap p;
+
+ if(old)
+ evas_object_del(old);
+
+ if((prop=XInternAtom(ecore_x_display_get(),"_XROOTPMAP_ID",True))!=None)
+ {
+ int ret=XGetWindowProperty(ecore_x_display_get(),
+ RootWindow(ecore_x_display_get(), 0),
+ prop, 0L, 1L, False, AnyPropertyType, &type,
+ &format,&length, &after,&data);
+ if((ret==Success)&&(type==XA_PIXMAP)&&((p=*((Pixmap *)data))!=None)) {
+ Imlib_Image im;
+ unsigned int pw,ph, pb,pd;
+ int px,py;
+ Window win_dummy;
+ Status st;
+
+ st=XGetGeometry(ecore_x_display_get(),p,&win_dummy, &px,&py,&pw,&ph, &pb, &pd);
+ if(st&&(pw>0)&&(ph>0)) {
+# ifdef NOIR_DEBUG
+ fprintf(stderr,"bg_ebg_trans: transparency update %3d,%3d %3dx%3d\n",x,y,w,h);
+# endif
+
+ imlib_context_set_display(ecore_x_display_get());
+
imlib_context_set_visual(DefaultVisual(ecore_x_display_get(),DefaultScreen(ecore_x_display_get())));
+
imlib_context_set_colormap(DefaultColormap(ecore_x_display_get(),DefaultScreen(ecore_x_display_get())));
+ imlib_context_set_drawable(*((Pixmap *)data));
+
+ im=imlib_create_image_from_drawable(0,x,y,w,h,1);
+ imlib_context_set_image(im);
+ imlib_image_set_format("argb");
+ new=evas_object_image_add(evas);
+ evas_object_image_alpha_set(new,0);
+ evas_object_image_size_set(new,w,h); /* thanks rephorm */
+ evas_object_image_data_copy_set(new,imlib_image_get_data_for_reading_only());
+ imlib_free_image();
+
+ evas_object_image_fill_set(new,0,0,w,h);
+ evas_object_resize(new,w,h);
+ evas_object_move(new,0,0);
+ evas_object_layer_set(new,-9999);
+ evas_object_image_data_update_add(new,0,0,w,h);
+ evas_object_show(new); }
+#if 1
+ else /* this can happen with e16 */
+ fprintf(stderr,"bg_ebg_trans: got invalid pixmap from root-window,
ignoring...\n");
+#endif
+ }
+ else
+ fprintf(stderr,"bg_ebg_trans: could not read root-window property
_XROOTPMAP_ID...\n"); }
+ else
+ fprintf(stderr,"bg_ebg_trans: could not get XAtom _XROOTPMAP_ID...\n");
+
+ if(!new) { /* fallback if no root pixmap is found */
+#if 1
+ fprintf(stderr,"bg_ebg_trans: cannot create transparency pixmap, no valid
wallpaper set.\n");
+#endif
+ new=evas_object_rectangle_add(evas);
+ evas_object_resize(new,w,h);
+ evas_object_move(new,0,0);
+ evas_object_layer_set(new,-9999);
+ evas_object_color_set(new, 127,127,127, 255);
+ evas_object_show(new); }
+
+ return new;
+}
+
/* keep a global copy of this, so it only has to be created once */
void
esmart_trans_x11_freshen(Evas_Object *o, int x, int y, int w, int h)
@@ -37,7 +117,7 @@
if((data = evas_object_smart_data_get(o)))
{
data->obj =
- transparency_get_pixmap(evas_object_evas_get(data->clip),
+ _esmart_trans_x11_pixmap_get(evas_object_evas_get(data->clip),
data->obj, x, y, w, h);
evas_object_pass_events_set(data->obj, 1);
evas_object_clip_set(data->obj, data->clip);
@@ -241,81 +321,3 @@
evas_object_clip_unset(data->clip);
}
-/**
- * Stolen from ev and iconbar, hopefully this should be shareable now
- */
-static Evas_Object *
-transparency_get_pixmap(Evas *evas, Evas_Object *old,
- int x, int y, int w, int h)
-{
- Atom prop,type;
- int format;
- unsigned long length,after;
- unsigned char *data;
- Evas_Object *new=NULL;
- Pixmap p;
-
- if(old)
- evas_object_del(old);
-
- if((prop=XInternAtom(ecore_x_display_get(),"_XROOTPMAP_ID",True))!=None)
- {
- int ret=XGetWindowProperty(ecore_x_display_get(),
- RootWindow(ecore_x_display_get(), 0),
- prop, 0L, 1L, False, AnyPropertyType, &type,
- &format,&length, &after,&data);
- if((ret==Success)&&(type==XA_PIXMAP)&&((p=*((Pixmap *)data))!=None)) {
- Imlib_Image im;
- unsigned int pw,ph, pb,pd;
- int px,py;
- Window win_dummy;
- Status st;
-
- st=XGetGeometry(ecore_x_display_get(),p,&win_dummy, &px,&py,&pw,&ph, &pb, &pd);
- if(st&&(pw>0)&&(ph>0)) {
-# ifdef NOIR_DEBUG
- fprintf(stderr,"bg_ebg_trans: transparency update %3d,%3d %3dx%3d\n",x,y,w,h);
-# endif
-
- imlib_context_set_display(ecore_x_display_get());
-
imlib_context_set_visual(DefaultVisual(ecore_x_display_get(),DefaultScreen(ecore_x_display_get())));
-
imlib_context_set_colormap(DefaultColormap(ecore_x_display_get(),DefaultScreen(ecore_x_display_get())));
- imlib_context_set_drawable(*((Pixmap *)data));
-
- im=imlib_create_image_from_drawable(0,x,y,w,h,1);
- imlib_context_set_image(im);
- imlib_image_set_format("argb");
- new=evas_object_image_add(evas);
- evas_object_image_alpha_set(new,0);
- evas_object_image_size_set(new,w,h); /* thanks rephorm */
- evas_object_image_data_copy_set(new,imlib_image_get_data_for_reading_only());
- imlib_free_image();
-
- evas_object_image_fill_set(new,0,0,w,h);
- evas_object_resize(new,w,h);
- evas_object_move(new,0,0);
- evas_object_layer_set(new,-9999);
- evas_object_image_data_update_add(new,0,0,w,h);
- evas_object_show(new); }
-#if 1
- else /* this can happen with e16 */
- fprintf(stderr,"bg_ebg_trans: got invalid pixmap from root-window,
ignoring...\n");
-#endif
- }
- else
- fprintf(stderr,"bg_ebg_trans: could not read root-window property
_XROOTPMAP_ID...\n"); }
- else
- fprintf(stderr,"bg_ebg_trans: could not get XAtom _XROOTPMAP_ID...\n");
-
- if(!new) { /* fallback if no root pixmap is found */
-#if 1
- fprintf(stderr,"bg_ebg_trans: cannot create transparency pixmap, no valid
wallpaper set.\n");
-#endif
- new=evas_object_rectangle_add(evas);
- evas_object_resize(new,w,h);
- evas_object_move(new,0,0);
- evas_object_layer_set(new,-9999);
- evas_object_color_set(new, 127,127,127, 255);
- evas_object_show(new); }
-
- return new; }
-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs