Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h Makefile.am ecompmgr.c eobj.c eobj.h ewins.h mod-misc.c 
Added Files:
        magwin.c 


Log Message:
Add magnifier window (eesh mag show).

===================================================================
RCS file: /cvs/e/e16/e/src/E.h,v
retrieving revision 1.580
retrieving revision 1.581
diff -u -3 -r1.580 -r1.581
--- E.h 23 Mar 2007 22:04:38 -0000      1.580
+++ E.h 7 Apr 2007 13:19:30 -0000       1.581
@@ -249,6 +249,7 @@
    Colormap            cmap;
    int                 scr;
    int                 w, h;
+   Pixmap              pmap;   /* Compositing buffer */
 }
 VirtRoot;
 
===================================================================
RCS file: /cvs/e/e16/e/src/Makefile.am,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -3 -r1.84 -r1.85
--- Makefile.am 29 Mar 2007 20:54:55 -0000      1.84
+++ Makefile.am 7 Apr 2007 13:19:30 -0000       1.85
@@ -1,6 +1,6 @@
 SUBDIRS =
 
-EXTRA_DIST = gnome.c eglx.c eglx.h ecompmgr.c ecompmgr.h snprintf.c
+EXTRA_DIST = gnome.c eglx.c eglx.h ecompmgr.c ecompmgr.h magwin.c snprintf.c
 
 bin_PROGRAMS = e16
 
@@ -11,7 +11,7 @@
 SRCS_GLX = eglx.c eglx.h
 endif
 if HAVE_COMPOSITE
-SRCS_ECOMPMGR = ecompmgr.c ecompmgr.h
+SRCS_ECOMPMGR = ecompmgr.c ecompmgr.h magwin.c
 endif
 if USE_ESNPRINTF
 SRCS_SNPRINTF = snprintf.c
===================================================================
RCS file: /cvs/e/e16/e/src/ecompmgr.c,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -3 -r1.141 -r1.142
--- ecompmgr.c  25 Mar 2007 08:34:34 -0000      1.141
+++ ecompmgr.c  7 Apr 2007 13:19:30 -0000       1.142
@@ -190,6 +190,7 @@
    char                active;
    char                use_pixmap;
    char                reorder;
+   char                ghosts;
    EObj               *eo_first;
    EObj               *eo_last;
    XserverRegion       rgn_screen;
@@ -438,7 +439,8 @@
 }
 
 static              Picture
-EPictureCreateBuffer(Window win, int w, int h, int depth, Visual * vis)
+EPictureCreateBuffer(Window win, int w, int h, int depth, Visual * vis,
+                    Pixmap * ppmap)
 {
    Picture             pict;
    Pixmap              pmap;
@@ -447,7 +449,10 @@
    pmap = XCreatePixmap(disp, win, w, h, depth);
    pictfmt = XRenderFindVisualFormat(disp, vis);
    pict = XRenderCreatePicture(disp, pmap, pictfmt, 0, 0);
-   XFreePixmap(disp, pmap);
+   if (ppmap)
+      *ppmap = pmap;
+   else
+      XFreePixmap(disp, pmap);
 
    return pict;
 }
@@ -490,7 +495,7 @@
 
    /* Resizing - grab old contents */
    pict = EPictureCreateBuffer(EobjGetXwin(eo), wo, ho, WinGetDepth(eo->win),
-                              WinGetVisual(eo->win));
+                              WinGetVisual(eo->win), NULL);
    XRenderComposite(disp, PictOpSrc, cw->picture, None, pict, 0, 0, 0, 0, 0, 0,
                    wo, ho);
 
@@ -1831,6 +1836,7 @@
    /* Determine overall paint order, top to bottom */
    stop = 0;
    eo_first = eo_prev = NULL;
+   Mode_compmgr.ghosts = 0;
 
    for (i = 0; i < num; i++)
      {
@@ -1905,6 +1911,12 @@
        if (cw->picture == None && !eo->noredir)
           continue;
 
+       if (eo->ghost)
+         {
+            Mode_compmgr.ghosts = 1;
+            continue;
+         }
+
        D3printf
           ("ECompMgrDetermineOrder hook in %d - %#lx desk=%d shown=%d\n",
            dsk->num, EobjGetXwin(eo), eo->desk->num, eo->shown);
@@ -2100,6 +2112,36 @@
      }
 }
 
+static void
+ECompMgrPaintGhosts(Picture pict, XserverRegion damage)
+{
+   EObj               *eo, *const *lst;
+   int                 i, num;
+
+   lst = EobjListStackGet(&num);
+   for (i = 0; i < num; i++)
+     {
+       eo = lst[i];
+       if (!eo->shown || !eo->ghost)
+          continue;
+
+       switch (eo->cmhook->mode)
+         {
+         case WINDOW_UNREDIR:
+         case WINDOW_SOLID:
+            ECompMgrRepaintObj(pict, Mode_compmgr.rgn_screen, eo, 0);
+            break;
+         case WINDOW_TRANS:
+         case WINDOW_ARGB:
+            ECompMgrRepaintObj(pict, Mode_compmgr.rgn_screen, eo, 1);
+            break;
+         }
+
+       /* Subtract window region from damage region */
+       ERegionSubtractOffset(damage, 0, 0, eo->cmhook->shape);
+     }
+}
+
 void
 ECompMgrRepaint(void)
 {
@@ -2120,7 +2162,7 @@
 
    if (!rootBuffer)
       rootBuffer = EPictureCreateBuffer(VRoot.xwin, VRoot.w, VRoot.h,
-                                       VRoot.depth, VRoot.vis);
+                                       VRoot.depth, VRoot.vis, &VRoot.pmap);
    pbuf = rootBuffer;
 
    if (!dsk)
@@ -2154,6 +2196,10 @@
    for (eo = Mode_compmgr.eo_last; eo; eo = ((ECmWinInfo *) 
(eo->cmhook))->prev)
       ECompMgrRepaintObj(pbuf, allDamage, eo, 1);
 
+   /* Paint any ghost windows (adjusting damage region) */
+   if (Mode_compmgr.ghosts)
+      ECompMgrPaintGhosts(rootPicture, allDamage);
+
    if (pbuf != rootPicture)
      {
        XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, allDamage);
@@ -2172,30 +2218,31 @@
    if (!allDamage /* || Conf_compmgr.mode == ECM_MODE_AUTO */ )
       return;
    ECompMgrRepaint();
-#if 0                          /* FIXME - Was here - Why? */
-   XSync(disp, False);
-#endif
 }
 
 static void
-ECompMgrRootConfigure(void *prm __UNUSED__, XEvent * ev)
+ECompMgrRootBufferDestroy(void)
 {
-   Display            *dpy = disp;
+   /* Root buffer picture and pixmap */
+   if (rootBuffer != None)
+      XRenderFreePicture(disp, rootBuffer);
+   rootBuffer = None;
+   if (VRoot.pmap != None)
+      XFreePixmap(disp, VRoot.pmap);
+   VRoot.pmap = None;
 
+   /* Screen region */
+   if (Mode_compmgr.rgn_screen != None)
+      ERegionDestroy(Mode_compmgr.rgn_screen);
+   Mode_compmgr.rgn_screen = None;
+}
+
+static void
+ECompMgrRootConfigure(void *prm __UNUSED__, XEvent * ev)
+{
    D1printf("ECompMgrRootConfigure root\n");
    if (ev->xconfigure.window == VRoot.xwin)
-     {
-       if (rootBuffer != None)
-         {
-            XRenderFreePicture(dpy, rootBuffer);
-            rootBuffer = None;
-         }
-
-       if (Mode_compmgr.rgn_screen != None)
-          ERegionDestroy(Mode_compmgr.rgn_screen);
-       Mode_compmgr.rgn_screen = None;
-     }
-   return;
+      ECompMgrRootBufferDestroy();
 }
 
 #if USE_DESK_EXPOSE            /* FIXME - Remove? */
@@ -2396,9 +2443,7 @@
       XRenderFreePicture(disp, rootPicture);
    rootPicture = None;
 
-   if (rootBuffer)
-      XRenderFreePicture(disp, rootBuffer);
-   rootBuffer = None;
+   ECompMgrRootBufferDestroy();
 
    ECompMgrShadowsInit(ECM_SHADOWS_OFF, 0);
 
@@ -2423,10 +2468,6 @@
    if (allDamage != None)
       ERegionDestroy(allDamage);
    allDamage = None;
-
-   if (Mode_compmgr.rgn_screen != None)
-      ERegionDestroy(Mode_compmgr.rgn_screen);
-   Mode_compmgr.rgn_screen = None;
 
    if (Conf_compmgr.mode == ECM_MODE_ROOT)
       XCompositeUnredirectSubwindows(disp, VRoot.xwin, 
CompositeRedirectManual);
===================================================================
RCS file: /cvs/e/e16/e/src/eobj.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -3 -r1.91 -r1.92
--- eobj.c      7 Feb 2007 01:51:18 -0000       1.91
+++ eobj.c      7 Apr 2007 13:19:30 -0000       1.92
@@ -115,6 +115,8 @@
       eo->ilayer |= 512;
    else
       eo->ilayer &= ~512;
+   if (eo->ghost)
+      eo->ilayer |= 1024;
 
    if (eo->ilayer != ilayer)
       EobjRaise(eo);
===================================================================
RCS file: /cvs/e/e16/e/src/eobj.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- eobj.h      19 Mar 2007 05:37:57 -0000      1.41
+++ eobj.h      7 Apr 2007 13:19:30 -0000       1.42
@@ -47,6 +47,7 @@
    unsigned            noredir:1;      /* Do not redirect */
    unsigned            shadow:1;       /* Enable shadows */
    unsigned            fade:1; /* Enable fading */
+   unsigned            ghost:1;        /* Ghost window */
    struct
    {
       char               *wm_name;
===================================================================
RCS file: /cvs/e/e16/e/src/ewins.h,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -3 -r1.70 -r1.71
--- ewins.h     6 Apr 2007 21:44:22 -0000       1.70
+++ ewins.h     7 Apr 2007 13:19:30 -0000       1.71
@@ -285,6 +285,7 @@
 #define EWIN_TYPE_MENU          0x02
 #define EWIN_TYPE_ICONBOX       0x04
 #define EWIN_TYPE_PAGER         0x08
+#define EWIN_TYPE_MISC          0x10
 
 #define EWIN_GRAVITY_NW         0
 #define EWIN_GRAVITY_NE         1
===================================================================
RCS file: /cvs/e/e16/e/src/mod-misc.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -3 -r1.51 -r1.52
--- mod-misc.c  28 Jan 2007 04:59:45 -0000      1.51
+++ mod-misc.c  7 Apr 2007 13:19:30 -0000       1.52
@@ -37,6 +37,7 @@
 
 #if USE_COMPOSITE
 extern const EModule ModCompMgr;
+extern const EModule ModMagwin;
 #endif
 extern const EModule ModCursors;
 extern const EModule ModDesktops;
@@ -68,6 +69,7 @@
    &ModButtons,
 #if USE_COMPOSITE
    &ModCompMgr,
+   &ModMagwin,
 #endif
    &ModCursors,
    &ModDesktops,



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to