Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

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


Modified Files:
        ecore_evas_private.h ecore_evas_x.c 


Log Message:


special case - if direct resize on AND avoid damage... THEN use window bg
pixmap. :)

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/ecore_evas_private.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- ecore_evas_private.h        10 Jun 2005 04:18:23 -0000      1.11
+++ ecore_evas_private.h        25 Jun 2005 07:23:38 -0000      1.12
@@ -93,6 +93,7 @@
       Ecore_X_GC     gc;
       Region         damages;
       unsigned char  direct_resize : 1;
+      unsigned char  using_bg_pixmap : 1;
       struct {
           /*
           unsigned char modal : 1;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/ecore_evas_x.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -3 -r1.42 -r1.43
--- ecore_evas_x.c      13 Jun 2005 11:57:14 -0000      1.42
+++ ecore_evas_x.c      25 Jun 2005 07:23:38 -0000      1.43
@@ -317,6 +317,7 @@
    e = event;
    ee = _ecore_evas_x_match(e->win);
    if (!ee) return 1; /* pass on event */
+   if (ee->engine.x.using_bg_pixmap) return 1;
    if (ee->prop.avoid_damage)
      {
        XRectangle xr;
@@ -672,58 +673,80 @@
                         r->x, r->y, r->w, r->h);
               }
 #endif                
-            for (l = updates; l; l = l->next)
+            if (ee->engine.x.using_bg_pixmap)
               {
-                 Evas_Rectangle *r;
-                 XRectangle xr;
-                 Region tmpr;
-                 
-                 if (!ee->engine.x.damages)
-                   ee->engine.x.damages = XCreateRegion();
-                 r = l->data;
-                 tmpr = XCreateRegion();
-                 if (ee->rotation == 0)
-                   {
-                      xr.x = r->x;
-                      xr.y = r->y;
-                      xr.width = r->w;
-                      xr.height = r->h;
-                   }
-                 else if (ee->rotation == 90)
-                   {
-                      xr.x = r->y;
-                      xr.y = ee->h - r->x - r->w;
-                      xr.width = r->h;
-                      xr.height = r->w;
-                   }
-                 else if (ee->rotation == 180)
-                   {
-                      xr.x = ee->w - r->x - r->w;
-                      xr.y = ee->h - r->y - r->h;
-                      xr.width = r->w;
-                      xr.height = r->h;
-                   }
-                 else if (ee->rotation == 270)
+                 if (updates)
                    {
-                      xr.x = ee->w - r->y - r->h;
-                      xr.y = r->x;
-                      xr.width = r->h;
-                      xr.height = r->w;
+                      for (l = updates; l; l = l->next)
+                        {
+                           Evas_Rectangle *r;
+                           
+                           r = l->data;
+                           ecore_x_window_area_clear(ee->engine.x.win, r->x, 
r->y, r->w, r->h);
+                        }
+                      if ((ee->shaped) && (updates))
+                        {
+                           if (ee->prop.fullscreen)
+                             ecore_x_window_shape_mask_set(ee->engine.x.win, 
ee->engine.x.mask);
+                           else
+                             
ecore_x_window_shape_mask_set(ee->engine.x.win_container, ee->engine.x.mask);
+                        }
                    }
-                 XUnionRectWithRegion(&xr, ee->engine.x.damages, tmpr);
-                 XDestroyRegion(ee->engine.x.damages);
-                 ee->engine.x.damages = tmpr;
               }
-            if (ee->engine.x.damages)
+            else
               {
-                 if ((ee->shaped) && (updates))
+                 for (l = updates; l; l = l->next)
                    {
-                      if (ee->prop.fullscreen)
-                        ecore_x_window_shape_mask_set(ee->engine.x.win, 
ee->engine.x.mask);
-                      else
-                        
ecore_x_window_shape_mask_set(ee->engine.x.win_container, ee->engine.x.mask);
+                      Evas_Rectangle *r;
+                      XRectangle xr;
+                      Region tmpr;
+                      
+                      if (!ee->engine.x.damages)
+                        ee->engine.x.damages = XCreateRegion();
+                      r = l->data;
+                      tmpr = XCreateRegion();
+                      if (ee->rotation == 0)
+                        {
+                           xr.x = r->x;
+                           xr.y = r->y;
+                           xr.width = r->w;
+                           xr.height = r->h;
+                        }
+                      else if (ee->rotation == 90)
+                        {
+                           xr.x = r->y;
+                           xr.y = ee->h - r->x - r->w;
+                           xr.width = r->h;
+                           xr.height = r->w;
+                        }
+                      else if (ee->rotation == 180)
+                        {
+                           xr.x = ee->w - r->x - r->w;
+                           xr.y = ee->h - r->y - r->h;
+                           xr.width = r->w;
+                           xr.height = r->h;
+                        }
+                      else if (ee->rotation == 270)
+                        {
+                           xr.x = ee->w - r->y - r->h;
+                           xr.y = r->x;
+                           xr.width = r->h;
+                           xr.height = r->w;
+                        }
+                      XUnionRectWithRegion(&xr, ee->engine.x.damages, tmpr);
+                      XDestroyRegion(ee->engine.x.damages);
+                      ee->engine.x.damages = tmpr;
                    }
-                 XSetRegion(ecore_x_display_get(), ee->engine.x.gc, 
ee->engine.x.damages);
+                 if (ee->engine.x.damages)
+                   {
+                      if ((ee->shaped) && (updates))
+                        {
+                           if (ee->prop.fullscreen)
+                             ecore_x_window_shape_mask_set(ee->engine.x.win, 
ee->engine.x.mask);
+                           else
+                             
ecore_x_window_shape_mask_set(ee->engine.x.win_container, ee->engine.x.mask);
+                        }
+                      XSetRegion(ecore_x_display_get(), ee->engine.x.gc, 
ee->engine.x.damages);
 /* debug rendering */
 /*               
                  XSetForeground(ecore_x_display_get(), ee->engine.x.gc, 
rand());
@@ -733,10 +756,11 @@
                  usleep(20000);
                  XSync(ecore_x_display_get(), False);
  */
-                 ecore_x_pixmap_paste(ee->engine.x.pmap, ee->engine.x.win, 
ee->engine.x.gc,
-                                      0, 0, ee->w, ee->h, 0, 0);
-                 XDestroyRegion(ee->engine.x.damages);
-                 ee->engine.x.damages = 0;
+                      ecore_x_pixmap_paste(ee->engine.x.pmap, 
ee->engine.x.win, ee->engine.x.gc,
+                                           0, 0, ee->w, ee->h, 0, 0);
+                      XDestroyRegion(ee->engine.x.damages);
+                      ee->engine.x.damages = 0;
+                   }
                  if (updates) evas_render_updates_free(updates);
               }
          }
@@ -1429,11 +1453,21 @@
               evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
             else
               evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+            if (ee->engine.x.direct_resize)
+              {
+                 ee->engine.x.using_bg_pixmap = 1;
+                 ecore_x_window_pixmap_set(ee->engine.x.win, 
ee->engine.x.pmap);
+              }
          }
        else
          {
             if (ee->engine.x.pmap) ecore_x_pixmap_del(ee->engine.x.pmap);
             if (ee->engine.x.gc) ecore_x_gc_del(ee->engine.x.gc);
+            if (ee->engine.x.using_bg_pixmap)
+              {
+                 ecore_x_window_pixmap_set(ee->engine.x.win, 0);
+                 ee->engine.x.using_bg_pixmap = 0;
+              }
             ee->engine.x.pmap = 0;
             ee->engine.x.gc = 0;
             einfo->info.drawable = ee->engine.x.win;
@@ -1656,6 +1690,20 @@
 {
 #ifdef BUILD_ECORE_X
    ee->engine.x.direct_resize = on;
+   if (ee->prop.avoid_damage)
+     {
+       if (ee->engine.x.direct_resize)
+         {
+            ee->engine.x.using_bg_pixmap = 1;
+            ecore_x_window_pixmap_set(ee->engine.x.win, ee->engine.x.pmap);
+         }
+       else
+         {
+            ee->engine.x.using_bg_pixmap = 0;
+            ecore_x_window_pixmap_set(ee->engine.x.win, 0);
+            ecore_x_window_area_expose(ee->engine.x.win, 0, 0, ee->w, ee->h);
+         }
+     }
 #else
    return;
 #endif   




-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to