Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        draw.c moveresize.c 


Log Message:
Add shaped window version of technical move/resize mode.

===================================================================
RCS file: /cvs/e/e16/e/src/draw.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -3 -r1.106 -r1.107
--- draw.c      23 Jun 2007 20:35:51 -0000      1.106
+++ draw.c      24 Jun 2007 20:10:39 -0000      1.107
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
+ * Copyright (C) 2007 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -31,6 +32,15 @@
 #include <X11/bitmaps/gray>
 #include <X11/bitmaps/gray3>
 
+typedef struct
+{
+   EObj                o;
+   Pixmap              mask;
+   GC                  gc;
+} ShapeWin;
+
+static Font         font = None;       /* Used in mode 1 (technical) */
+
 #define DRAW_H_ARROW(_dr, _gc, x1, x2, y1) \
     if (((x2) - (x1)) >= 12) \
       { \
@@ -145,42 +155,90 @@
    return color_pixel;
 }
 
-static EObj        *
-_ShapeCreateWin(void)
+static void
+_ShapeWinDestroy(ShapeWin * sw)
 {
-   EObj               *eo;
+   EoUnmap(sw);
+   EoFini(sw);
+   if (sw->gc)
+      EXFreeGC(sw->gc);
+   if (sw->mask != None)
+      EFreePixmap(sw->mask);
+   Efree(sw);
+}
 
-   eo = EobjWindowCreate(EOBJ_TYPE_MISC, 0, 0, VRoot.w, VRoot.h, 0, "Wires");
-   if (!eo)
+static ShapeWin    *
+_ShapeWinCreate(int md)
+{
+   ShapeWin           *sw;
+
+   sw = ECALLOC(ShapeWin, 1);
+   if (!sw)
       return NULL;
-   eo->shadow = 0;
-   eo->fade = 0;
-   ESetWindowBackground(EobjGetWin(eo), _ShapeGetColor());
-#ifdef xxShapeInput            /* Should really check server too */
-   XShapeCombineRectangles(disp, EobjGetXwin(eo),
+
+   EoInit(sw, EOBJ_TYPE_MISC, None, 0, 0, VRoot.w, VRoot.h, 1, "Wires");
+   if (!EoGetWin(sw))
+      goto bail_out;
+
+   EoSetShadow(sw, 0);
+   EoSetFade(sw, 0);
+   EoSetFloating(sw, 1);
+   EoSetLayer(sw, 18);
+   ESetWindowBackground(EoGetWin(sw), _ShapeGetColor());
+#ifdef ShapeInput              /* Should really check server too */
+   XShapeCombineRectangles(disp, EoGetXwin(sw),
                           ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);
 #endif
-   return eo;
+
+   if (md == 1)
+     {
+       sw->mask = ECreatePixmap(EoGetWin(sw), VRoot.w, VRoot.h, 1);
+       sw->gc = EXCreateGC(sw->mask, 0, NULL);
+       if (sw->mask == None || !sw->gc)
+          goto bail_out;
+     }
+
+   return sw;
+
+ bail_out:
+   _ShapeWinDestroy(sw);
+   return NULL;
 }
 
 static void
-_ShapeSetBox(EObj * eo, int x, int y, int w, int h,
-            int bl, int br, int bt, int bb, int seqno)
+_ShapeSet(ShapeWin * sw, int md, int x, int y, int w, int h,
+         int bl, int br, int bt, int bb, int seqno)
 {
-   XRectangle          rl[8];
    int                 w2, h2;
 
    w2 = w + bl + br;
    h2 = h + bt + bb;
 
-   _SHAPE_SET_RECT((&rl[0]), x, y, w2, h2);
-   w = (w > 5) ? w - 2 : 3;
-   h = (h > 5) ? h - 2 : 3;
-   _SHAPE_SET_RECT((&rl[4]), x + bl + 1, y + bt + 1, w, h);
-
-   EShapeCombineRectangles(EobjGetWin(eo), ShapeBounding, 0, 0, rl,
-                          8, (seqno == 0) ? ShapeSet : ShapeUnion, Unsorted);
-   EobjShapeUpdate(eo, 0);
+   if (md == 1)
+     {
+       char                str[32];
+
+       XSetForeground(disp, sw->gc, 0);
+       XFillRectangle(disp, sw->mask, sw->gc, 0, 0, VRoot.w, VRoot.h);
+       XSetForeground(disp, sw->gc, 1);
+       DO_DRAW_MODE_1(sw->mask, sw->gc, x, y, w, h);
+       EShapeCombineMask(EoGetWin(sw), ShapeBounding, 0, 0, sw->mask,
+                         (seqno == 0) ? ShapeSet : ShapeUnion);
+     }
+   else
+     {
+       XRectangle          rl[8];
+
+       _SHAPE_SET_RECT((&rl[0]), x, y, w2, h2);
+       w = (w > 5) ? w - 2 : 3;
+       h = (h > 5) ? h - 2 : 3;
+       _SHAPE_SET_RECT((&rl[4]), x + bl + 1, y + bt + 1, w, h);
+
+       EShapeCombineRectangles(EoGetWin(sw), ShapeBounding, 0, 0, rl,
+                               8, (seqno == 0) ? ShapeSet : ShapeUnion,
+                               Unsorted);
+     }
+   EoShapeUpdate(sw, 0);
 }
 
 void
@@ -189,7 +247,6 @@
 {
    static GC           gc = 0;
    static Pixmap       b2 = 0, b3 = 0;
-   static Font         font = 0;
    Window              root = VRoot.xwin;
    int                 x1, y1, w1, h1, i, j, dx, dy;
    int                 bl, br, bt, bb;
@@ -256,22 +313,23 @@
 
    EwinBorderGetSize(ewin, &bl, &br, &bt, &bb);
 
-   if (md == 2 && !Conf.movres.old_mode)
+   if (md <= 2 && !Conf.movres.old_mode)
      {
-       static EObj        *shape_win = NULL;
+       static ShapeWin    *shape_win = NULL;
 
        if (firstlast == 0 && !shape_win)
-          shape_win = _ShapeCreateWin();
+          shape_win = _ShapeWinCreate(md);
        if (!shape_win)
           return;
 
-       _ShapeSetBox(shape_win, x, y, w, h, bl, br, bt, bb, seqno);
-       EobjMap(shape_win, 0);
+       _ShapeSet(shape_win, md, x, y, w, h, bl, br, bt, bb, seqno);
+       EoMap(shape_win, 0);
 
        CoordsShow(ewin);
+
        if (firstlast == 2)
          {
-            EobjDestroy(shape_win);
+            _ShapeWinDestroy(shape_win);
             shape_win = NULL;
          }
        goto done;
===================================================================
RCS file: /cvs/e/e16/e/src/moveresize.c,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -3 -r1.79 -r1.80
--- moveresize.c        17 Jun 2007 20:03:29 -0000      1.79
+++ moveresize.c        24 Jun 2007 20:10:39 -0000      1.80
@@ -50,7 +50,7 @@
 {
    if (mode == 0)
       return 0;
-   if (mode == 2)
+   if (mode <= 2)
       return Conf.movres.old_mode;
    return 1;
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to