Enlightenment CVS committal

Author  : xcomputerman
Project : e_modules
Module  : bling

Dir     : e_modules/bling


Modified Files:
        compmgr.c compmgr.h e_mod_main.c 


Log Message:
Fades work now. There may be a very small memory leak here while I try 
to avoid a double free situation. Also avoids fading desktop windows.
Fading is based on elapsed time to avoid performance problems on slow 
PCs.

===================================================================
RCS file: /cvs/e/e_modules/bling/compmgr.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- compmgr.c   24 Jun 2006 22:28:47 -0000      1.3
+++ compmgr.c   25 Jun 2006 02:03:07 -0000      1.4
@@ -127,6 +127,7 @@
 static double get_opacity_percent(Win *w, double def);
 static Ecore_X_Region composite_win_extents (Win *w);
 static int _composite_run_fades_cb(void *data);
+static int composite_update(void *data);
 
 static int
 composite_x_error(Display *dpy, XErrorEvent *xerror)
@@ -163,7 +164,7 @@
    fades = evas_list_remove(fades, f);
    if (f->anim)
       ecore_animator_del(f->anim);
-   E_FREE(f);
+   /* E_FREE(f); */
 }
 
 static void
@@ -174,52 +175,71 @@
 }
 
 static void
-composite_fade_set(Win * w, double start, double finish, double step,
-         void (*callback) (Win * w, Bool gone), Bool gone, Bool exec_callback,
-         Bool override)
+composite_fade_set(Win *w, double start, double finish, double step,
+                   void (*callback) (Win *w, Bool gone), Bool gone,
+                   Bool exec_callback, Bool override)
 {
    Fade *f;
+   E_Manager *man;
+   Evas_List *l;
+   char *name = NULL, *class = NULL;
+
+   /* Don't fade desktop/root windows */
+   if (!w->id || w->id == root) return;
+   ecore_x_icccm_name_class_get(w->id, &name, &class);
+   if (class && !strcmp(class, "Background_Window"))
+   {
+      E_FREE(name);
+      E_FREE(class);
+      return;
+   }
+   E_FREE(name);
+   E_FREE(class);
+   man = e_manager_current_get();
+   if (w->id == man->win) return;
+   for (l = man->containers; l; l = l->next)
+   {
+      E_Container *con = l->data;
+      if (w->id == con->win) return;
+   }
 
    f = composite_fade_find(w);
    if (!f)
    {
       f = E_NEW(Fade, 1);
       f->w = w;
-      f->cur = start;
+      f->start = f->cur = start;
+      w->isInFade = True;
       fades = evas_list_prepend(fades, f);
+      f->anim = ecore_animator_add(_composite_run_fades_cb, f);
    }
    else if (!override)
       return;
    else
    {
-      if (exec_callback)
-         if (f->callback)
-            (*f->callback) (f->w, f->gone);
+      if (exec_callback && f->callback)
+         (*f->callback)(f->w, f->gone);
    }
 
-   if (finish < 0)
-      finish = 0;
-   if (finish > 1)
-      finish = 1;
+   if (finish < 0) finish = 0;
+   if (finish > 1) finish = 1;
    f->finish = finish;
+   f->step = (f->cur < finish) ? step : -step;
+   f->start_time = ecore_time_get();
    if (f->cur < finish)
-      f->step = step;
-   else if (f->cur > finish)
-      f->step = -step;
+      f->interval = (1/config->fx_fade_in_speed * 
ecore_animator_frametime_get());
+   else
+      f->interval = (1/config->fx_fade_out_speed * 
ecore_animator_frametime_get());
    f->callback = callback;
    f->gone = gone;
    w->opacity = f->cur * OPAQUE;
-#if 0
-   printf("set_fade start %g step %g\n", f->cur, f->step);
-#endif
    composite_win_mode_determine(w);
    if (w->shadow)
    {
       XRenderFreePicture(dpy, w->shadow);
-      w->shadow = None;
+      w->shadow= None;
       w->extents = composite_win_extents(w);
    }
-   f->anim = ecore_animator_add(_composite_run_fades_cb, f);
 }
 
 static int
@@ -227,24 +247,23 @@
 {
    Fade *f;
    Win *w;
+   int f_continue = 1;
+   double current_time, delta_time, fade_interval;
 
-#if 0
-   /* Prioritize pending X events */
-   if (QLength(dpy))
-   {
-      fade_steps++;
-      return 1;
-   }
-#endif
    f = data;
    if (!f) return 0;
    w = f->w;
 
-   f->cur += f->step;
+   current_time = ecore_time_get();
+   delta_time = current_time - f->start_time;
+   if (delta_time >= f->interval)
+      f->cur = f->finish;
+   else
+      f->cur = f->start + (delta_time/f->interval * (f->finish - f->start));
    if (f->cur >= 1)
       f->cur = 1;
    else if (f->cur < 0)
-   f->cur = 0;
+      f->cur = 0;
    w->opacity = f->cur * OPAQUE;
    if (f->step > 0)
    {
@@ -252,6 +271,8 @@
       {
          w->opacity = f->finish * OPAQUE;
          composite_fade_dequeue(f);
+         f = NULL;
+         f_continue = 0;
       }
    }
    else
@@ -260,6 +281,8 @@
       {
          w->opacity = f->finish * OPAQUE;
          composite_fade_dequeue(f);
+         f = NULL;
+         f_continue = 0;
       }
    }
    composite_win_mode_determine(w);
@@ -269,14 +292,11 @@
       w->shadow = None;
       w->extents = composite_win_extents(w);
    }
-   /* FIXME: Update fade picture??? */
-   return 1;
+   return f_continue;
 }
 
 #define SHADOW_OFFSET_X        ((-config->shadow_active_size * 7 / 5) - 
config->shadow_horz_offset * config->shadow_active_size / 100) * w->shadowSize
 #define SHADOW_OFFSET_Y        ((-config->shadow_active_size * 7 / 5) - 
config->shadow_vert_offset * config->shadow_active_size / 100) * w->shadowSize
-//#define SHADOW_OFFSET_X                                                      
                    (w->shadowSize * -config->shadow_active_size * 7 / 500) - 
w->shadowSize * config->shadow_horz_offset * config->shadow_active_size / 10000
-//#define SHADOW_OFFSET_Y                                                      
                    (w->shadowSize * -config->shadow_active_size * 7 / 500) - 
w->shadowSize * config->shadow_vert_offset * config->shadow_active_size / 10000
 
 static double
 gaussian(double r, double x, double y)
@@ -828,7 +848,7 @@
       if (!w->damaged)
          continue;
 
-      // skip invisible windows
+      /* skip invisible windows */
       if (w->a.x + w->a.w < 1 || w->a.y + w->a.h < 1
           || w->a.x >= root_width || w->a.y >= root_height)
          continue;
@@ -1077,9 +1097,6 @@
    w->a.visible = 1;
    w->a.viewable = 1;
 
-   /* This needs to be here or else we lose transparency messages */
-   //XSelectInput(dpy, id, PropertyChangeMask);
-
 #if CAN_DO_USABLE
    w->damage_bounds.x = w->damage_bounds.y = 0;
    w->damage_bounds.width = w->damage_bounds.height = 0;
@@ -1118,9 +1135,6 @@
       w->picture = None;
    }
 
-   /* don't care about properties anymore */
-   //XSelectInput(dpy, w->id, 0);
-
    if (w->borderSize)
    {
       ecore_x_region_del(w->borderSize);
@@ -1505,7 +1519,7 @@
 
 void
 composite_shadow_color_set(char *value)
-{                               // format nach #xxxxxx (html) ändern?
+{ 
    unsigned int tmp;
    char **res = NULL;
 
===================================================================
RCS file: /cvs/e/e_modules/bling/compmgr.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -3 -r1.1.1.1 -r1.2
--- compmgr.h   5 Jun 2006 04:42:18 -0000       1.1.1.1
+++ compmgr.h   25 Jun 2006 02:03:07 -0000      1.2
@@ -54,9 +54,12 @@
 typedef struct _Fade {
     Win                        *w;
     Ecore_Animator *anim;
+    double     start;
     double             cur;
     double             finish;
     double             step;
+    double     start_time;
+    double     interval;
     void               (*callback) (Win *w, Bool gone);
     Display            *dpy;
     Bool               gone;
===================================================================
RCS file: /cvs/e/e_modules/bling/e_mod_main.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_mod_main.c        24 Jun 2006 22:28:47 -0000      1.2
+++ e_mod_main.c        25 Jun 2006 02:03:07 -0000      1.3
@@ -190,8 +190,8 @@
       b->config->shadow_horz_offset = 3;
       b->config->shadow_hide_on_move = 0;
 
-      b->config->fx_fade_enable = 0;
-      b->config->fx_fade_opacity_enable = 0;
+      b->config->fx_fade_enable = 1;
+      b->config->fx_fade_opacity_enable = 1;
       b->config->fx_fade_delta = 1.0/30.0;
       b->config->fx_fade_in_speed = 0.075;
       b->config->fx_fade_out_speed = 0.100;



Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to