Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_x


Modified Files:
        Ecore_X.h ecore_x_private.h ecore_x_window.c 


Log Message:


evilness... but it works.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -3 -r1.160 -r1.161
--- Ecore_X.h   4 Mar 2006 02:57:06 -0000       1.160
+++ Ecore_X.h   8 Mar 2006 08:02:55 -0000       1.161
@@ -1013,6 +1013,8 @@
                  
 EAPI Ecore_X_Window   ecore_x_window_new(Ecore_X_Window parent, int x, int y, 
int w, int h);
 EAPI Ecore_X_Window   ecore_x_window_override_new(Ecore_X_Window parent, int 
x, int y, int w, int h);
+EAPI Ecore_X_Window   ecore_x_window_argb_new(Ecore_X_Window parent, int x, 
int y, int w, int h);
+EAPI Ecore_X_Window   ecore_x_window_override_argb_new(Ecore_X_Window parent, 
int x, int y, int w, int h);
 EAPI Ecore_X_Window   ecore_x_window_input_new(Ecore_X_Window parent, int x, 
int y, int w, int h);
 EAPI void             ecore_x_window_configure(Ecore_X_Window win,
                                               Ecore_X_Window_Configure_Mask 
mask,
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- ecore_x_private.h   3 Mar 2006 04:01:15 -0000       1.52
+++ ecore_x_private.h   8 Mar 2006 08:02:55 -0000       1.53
@@ -33,6 +33,9 @@
 #ifdef ECORE_XSS
 #include <X11/extensions/scrnsaver.h>
 #endif
+#ifdef ECORE_XRENDER
+#include <X11/extensions/Xrender.h>
+#endif
 
 #include "ecore_private.h"
 #include "Ecore_X.h"
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_window.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -3 -r1.47 -r1.48
--- ecore_x_window.c    3 Feb 2006 20:04:12 -0000       1.47
+++ ecore_x_window.c    8 Mar 2006 08:02:55 -0000       1.48
@@ -889,3 +889,144 @@
 {
    XClearArea(_ecore_x_disp, win, x, y, w, h, True);
 }
+
+#ifdef ECORE_XRENDER   
+static Ecore_X_Window
+_ecore_x_window_argb_internal_new(Ecore_X_Window parent, int x, int y, int w, 
int h, int override)
+{
+   Window                win;
+   XSetWindowAttributes  attr;
+   XWindowAttributes     att;
+   XVisualInfo          *xvi;
+   XVisualInfo           vi_in;
+   int                   nvi, i, scr = 0;
+   XRenderPictFormat    *fmt;
+   Visual               *vis;
+   
+   if (parent == 0)
+     {
+       parent = DefaultRootWindow(_ecore_x_disp);
+       scr = DefaultScreen(_ecore_x_disp);
+     }
+   else
+     {
+       /* ewww - round trip */
+       XGetWindowAttributes(_ecore_x_disp, parent, &att);
+       for (i = 0; i < ScreenCount(_ecore_x_disp); i++)
+         {
+            if (att.screen == ScreenOfDisplay(_ecore_x_disp, i))
+              {
+                 scr = i;
+                 break;
+              }
+         }
+     }
+   vi_in.screen = scr;
+   vi_in.depth = 32;
+   vi_in.class = TrueColor;
+   xvi = XGetVisualInfo(_ecore_x_disp,
+                       VisualScreenMask |
+                       VisualDepthMask |
+                       VisualClassMask,
+                       &vi_in,
+                       &nvi);
+   if (xvi == NULL) return 0;
+   vis = NULL;
+   for (i = 0; i < nvi; i++)
+     {
+       fmt = XRenderFindVisualFormat(_ecore_x_disp, xvi[i].visual);
+       if ((fmt->type == PictTypeDirect) && (fmt->direct.alphaMask))
+         {
+            vis = xvi[i].visual;
+            break;
+         }
+     }
+   XFree (xvi);
+   
+   attr.backing_store         = NotUseful;
+   attr.override_redirect     = override;
+   attr.colormap              = XCreateColormap(_ecore_x_disp, parent,
+                                               vis, AllocNone);
+   attr.border_pixel          = 0;
+   attr.background_pixmap     = None;
+   attr.bit_gravity           = NorthWestGravity;
+   attr.win_gravity           = NorthWestGravity;
+   attr.save_under            = False;
+   attr.do_not_propagate_mask = NoEventMask;
+   attr.event_mask            = KeyPressMask |
+                                KeyReleaseMask |
+                                ButtonPressMask |
+                                ButtonReleaseMask |
+                                EnterWindowMask |
+                                LeaveWindowMask |
+                                PointerMotionMask |
+                                ExposureMask |
+                                VisibilityChangeMask |
+                                StructureNotifyMask |
+                                FocusChangeMask |
+                                PropertyChangeMask |
+                                ColormapChangeMask;
+   win = XCreateWindow(_ecore_x_disp, parent,
+                      x, y, w, h, 0,
+                      32, 
+                      InputOutput, 
+                      vis,
+                      CWBackingStore |
+                      CWOverrideRedirect | 
+                      CWColormap |
+                      CWBorderPixel |
+                      CWBackPixmap | 
+                      CWSaveUnder | 
+                      CWDontPropagate | 
+                      CWEventMask |
+                      CWBitGravity |
+                      CWWinGravity,
+                      &attr);
+   XFreeColormap(_ecore_x_disp, attr.colormap);
+
+   if (parent == DefaultRootWindow(_ecore_x_disp)) 
ecore_x_window_defaults_set(win);
+   return win;
+}
+#endif
+
+/**
+ * Creates a new window.
+ * @param   parent The parent window to use.  If @p parent is @c 0, the root
+ *                 window of the default display is used.
+ * @param   x      X position.
+ * @param   y      Y position.
+ * @param   w      Width.
+ * @param   h      Height.
+ * @return  The new window handle.
+ * @ingroup Ecore_X_Window_Create_Group
+ */
+EAPI Ecore_X_Window
+ecore_x_window_argb_new(Ecore_X_Window parent, int x, int y, int w, int h)
+{
+#ifdef ECORE_XRENDER   
+   return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 0);
+#else
+   return 0;
+#endif   
+}
+
+/**
+ * Creates a window with the override redirect attribute set to @c True.
+ * @param   parent The parent window to use.  If @p parent is @c 0, the root
+ *                 window of the default display is used.
+ * @param   x      X position.
+ * @param   y      Y position.
+ * @param   w      Width.
+ * @param   h      Height.
+ * @return  The new window handle.
+ * @ingroup Ecore_X_Window_Create_Group
+ */
+EAPI Ecore_X_Window
+ecore_x_window_override_argb_new(Ecore_X_Window parent, int x, int y, int w, 
int h)
+{
+#ifdef ECORE_XRENDER   
+   return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 1);
+#else
+   return 0;
+#endif   
+}




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to