Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_container.c 


Log Message:


this is ugly - but it reduces trails from dropshadow or desktop redraws on
slow boxes. i had to
1. use bg pixmaps
2. defer window moves until idle enterer that runs AFTER the rendering
3. simple resizes from top-left are handled, but if top-left of frame needs
to mvoe all bets are off and its not deferred anymore.


===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.605
retrieving revision 1.606
diff -u -3 -r1.605 -r1.606
--- e_border.c  30 Sep 2007 17:44:46 -0000      1.605
+++ e_border.c  3 Oct 2007 07:13:02 -0000       1.606
@@ -761,6 +761,7 @@
 //     e_object_breadcrumb_add(E_OBJECT(bd), "border_hide_event");
        ecore_event_add(E_EVENT_BORDER_HIDE, ev, 
_e_border_event_border_hide_free, NULL);
      }
+   bd->post_show = 0;
 }
 
 EAPI void
@@ -2380,7 +2381,17 @@
                      (!bd->changes.size))
                    {
                       ecore_evas_show(bd->bg_ecore_evas);
-                      ecore_x_window_show(bd->win);
+                      if ((1) && 
+                          ((bd->changes.pos && !bd->changes.size) ||
+                           (!bd->changes.pos && bd->changes.size) ||
+                           (bd->post_job)))
+                        {
+                           bd->post_show = 1;
+                        }
+                      else
+                        {
+                           ecore_x_window_show(bd->win);
+                        }
                       bd->changes.visible = 0;
                    }
               }
@@ -2414,7 +2425,17 @@
                      (!bd->new_client))
                    {
                       ecore_evas_show(bd->bg_ecore_evas);
-                      ecore_x_window_show(bd->win);
+                      if ((1) && 
+                          ((bd->changes.pos && !bd->changes.size) ||
+                           (!bd->changes.pos && bd->changes.size) ||
+                           (bd->post_job)))
+                        {
+                           bd->post_show = 1;
+                        }
+                      else
+                        {
+                           ecore_x_window_show(bd->win);
+                        }
                       bd->changes.visible = 0;
                    }
               }
@@ -3061,6 +3082,11 @@
 static void
 _e_border_free(E_Border *bd)
 {
+   if (bd->post_job)
+     {
+       ecore_idle_enterer_del(bd->post_job);
+       bd->post_job = NULL;
+     }
    if (bd->pointer) 
      {
        e_object_del(E_OBJECT(bd->pointer));
@@ -4897,6 +4923,38 @@
    return 0;
 }
 
+static int
+_e_border_post_move_resize_job(void *data)
+{
+   E_Border *bd;
+   
+   bd = (E_Border *)data;
+   if ((bd->post_move) && (bd->post_resize))
+     {
+       ecore_x_window_move_resize(bd->win, 
+                                  bd->x + bd->fx.x, 
+                                  bd->y + bd->fx.y,
+                                  bd->w, bd->h);
+     }
+   else if (bd->post_move)
+     {
+       ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
+     }
+   else if (bd->post_resize)
+     {
+       ecore_x_window_resize(bd->win, bd->w, bd->h);
+     }
+   if (bd->post_show)
+     {
+       if (bd->visible) ecore_x_window_show(bd->win);
+     }
+   bd->post_show = 0;
+   bd->post_move = 0;
+   bd->post_resize = 0;
+   bd->post_job = NULL;
+   return 0;
+}
+
 static void
 _e_border_eval(E_Border *bd)
 {      
@@ -6122,10 +6180,21 @@
        if ((bd->shaded) && (!bd->shading))
          {
             evas_obscured_clear(bd->bg_evas);
-            ecore_x_window_move_resize(bd->win, 
-                                       bd->x + bd->fx.x, 
-                                       bd->y + bd->fx.y,
-                                       bd->w, bd->h);
+            if (0)
+              {
+                 if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+                 bd->post_job = 
ecore_idle_enterer_add(_e_border_post_move_resize_job,
+                                                       bd);
+                 bd->post_move = 1;
+                 bd->post_resize = 1;
+              }
+            else
+              {
+                 ecore_x_window_move_resize(bd->win, 
+                                            bd->x + bd->fx.x, 
+                                            bd->y + bd->fx.y,
+                                            bd->w, bd->h);
+              }
             ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
             if (bd->internal_ecore_evas)
               ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, 
bd->client.w, bd->client.h);
@@ -6145,10 +6214,21 @@
                                         bd->client_inset.l, bd->client_inset.t,
                                         bd->w - (bd->client_inset.l + 
bd->client_inset.r),
                                         bd->h - (bd->client_inset.t + 
bd->client_inset.b));
-            ecore_x_window_move_resize(bd->win,
-                                       bd->x + bd->fx.x,
-                                       bd->y + bd->fx.y,
-                                       bd->w, bd->h);
+            if (0)
+              {
+                 if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+                 bd->post_job = 
ecore_idle_enterer_add(_e_border_post_move_resize_job,
+                                                       bd);
+                 bd->post_move = 1;
+                 bd->post_resize = 1;
+              }
+            else
+              {
+                 ecore_x_window_move_resize(bd->win,
+                                            bd->x + bd->fx.x,
+                                            bd->y + bd->fx.y,
+                                            bd->w, bd->h);
+              }
             ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
             ecore_x_window_move_resize(bd->client.shell_win,
                                        bd->client_inset.l, bd->client_inset.t,
@@ -6218,8 +6298,18 @@
        if (bd->internal_ecore_evas)
          ecore_evas_managed_move(bd->internal_ecore_evas,
                                  bd->x + bd->fx.x + bd->client_inset.l,
-                                 bd->y + bd->fx.x + bd->client_inset.t);
-       ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
+                                 bd->y + bd->fx.y + bd->client_inset.t);
+       if (1)
+         {
+            if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+            bd->post_job = 
ecore_idle_enterer_add(_e_border_post_move_resize_job,
+                                                  bd);
+            bd->post_move = 1;
+         }
+       else
+         {
+            ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
+         }
        e_container_shape_move(bd->shape, bd->x + bd->fx.x, bd->y + bd->fx.y);
        bd->changes.pos = 0;
        rem_change = 1;
@@ -6236,7 +6326,17 @@
          {
             evas_obscured_clear(bd->bg_evas);
             ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
-            ecore_x_window_resize(bd->win, bd->w, bd->h);
+            if (1)
+              {
+                 if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+                 bd->post_job = 
ecore_idle_enterer_add(_e_border_post_move_resize_job,
+                                                       bd);
+                 bd->post_resize = 1;
+              }
+            else
+              {
+                 ecore_x_window_resize(bd->win, bd->w, bd->h);
+              }
             if (bd->internal_ecore_evas)
               ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, 
bd->client.w, bd->client.h);
             else
@@ -6253,7 +6353,17 @@
                                         bd->w - (bd->client_inset.l + 
bd->client_inset.r),
                                         bd->h - (bd->client_inset.t + 
bd->client_inset.b));
             ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
-            ecore_x_window_resize(bd->win, bd->w, bd->h);
+            if (1)
+              {
+                 if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+                 bd->post_job = 
ecore_idle_enterer_add(_e_border_post_move_resize_job,
+                                                       bd);
+                 bd->post_resize = 1;
+              }
+            else
+              {
+                 ecore_x_window_resize(bd->win, bd->w, bd->h);
+              }
             ecore_x_window_move_resize(bd->client.shell_win,
                                        bd->client_inset.l, bd->client_inset.t,
                                        bd->w - (bd->client_inset.l + 
bd->client_inset.r),
@@ -6488,7 +6598,14 @@
               }
          }
        ecore_evas_show(bd->bg_ecore_evas);
-       ecore_x_window_show(bd->win);
+       if (bd->post_job)
+         {
+            bd->post_show = 1;
+         }
+       else
+         {
+            ecore_x_window_show(bd->win);
+         }
        if (bd->cur_mouse_action)
          {
             bd->moveinfo.down.x = bd->x + bd->fx.x;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.164
retrieving revision 1.165
diff -u -3 -r1.164 -r1.165
--- e_border.h  5 Aug 2007 04:41:55 -0000       1.164
+++ e_border.h  3 Oct 2007 07:13:02 -0000       1.165
@@ -477,6 +477,11 @@
 
    Efreet_Desktop *desktop;
    E_Pointer *pointer;
+   
+   unsigned char post_move   : 1;
+   unsigned char post_resize : 1;
+   unsigned char post_show : 1;
+   Ecore_Idle_Enterer *post_job;
 };
 
 struct _E_Border_Pending_Move_Resize 
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_container.c,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -3 -r1.118 -r1.119
--- e_container.c       24 Sep 2007 10:53:44 -0000      1.118
+++ e_container.c       3 Oct 2007 07:13:02 -0000       1.119
@@ -101,7 +101,7 @@
    if (getenv("REDRAW_DEBUG"))
      ecore_evas_avoid_damage_set(con->bg_ecore_evas, 
!atoi(getenv("REDRAW_DEBUG")));
    else
-     ecore_evas_avoid_damage_set(con->bg_ecore_evas, 1);
+     ecore_evas_avoid_damage_set(con->bg_ecore_evas, 
ECORE_EVAS_AVOID_DAMAGE_BUILT_IN);
    ecore_x_window_lower(con->bg_win);
 
    o = evas_object_rectangle_add(con->bg_evas);



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to