Hello everyone,
attached is a patch that allows to have additional deskflip animations
registered by modules. Could someone please review it? Suggestions are
welcome :)
Best Regards,
Hannes
Index: src/bin/e_config.h
===================================================================
--- src/bin/e_config.h (revision 40555)
+++ src/bin/e_config.h (working copy)
@@ -35,7 +35,7 @@
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
-#define E_CONFIG_FILE_GENERATION 0x0133
+#define E_CONFIG_FILE_GENERATION 0x0134
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
@@ -275,7 +275,8 @@
Eina_Bool desk_flip_pan_bg;
double desk_flip_pan_x_axis_factor;
double desk_flip_pan_y_axis_factor;
-
+ const char *desk_flip_animation;
+
const char *wallpaper_import_last_dev; // INTERNAL
const char *wallpaper_import_last_path; // INTERNAL
Index: src/bin/e_config.c
===================================================================
--- src/bin/e_config.c (revision 40555)
+++ src/bin/e_config.c (working copy)
@@ -625,6 +625,7 @@
E_CONFIG_VAL(D, T, desk_flip_pan_bg, UCHAR);
E_CONFIG_VAL(D, T, desk_flip_pan_x_axis_factor, DOUBLE);
E_CONFIG_VAL(D, T, desk_flip_pan_y_axis_factor, DOUBLE);
+ E_CONFIG_VAL(D, T, desk_flip_animation, STR);
E_CONFIG_VAL(D, T, wallpaper_import_last_dev, STR);
E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR);
@@ -924,6 +925,10 @@
COPYVAL(desk_flip_pan_y_axis_factor);
IFCFGEND;
+ IFCFG(0x0134);
+ COPYVAL(desk_flip_animation);
+ IFCFGEND;
+
e_config->config_version = E_CONFIG_FILE_VERSION;
_e_config_free(tcfg);
}
@@ -1672,6 +1677,7 @@
if (ecf->wallpaper_import_last_path) eina_stringshare_del(ecf->wallpaper_import_last_path);
if (ecf->theme_default_border_style) eina_stringshare_del(ecf->theme_default_border_style);
if (ecf->desklock_custom_desklock_cmd) eina_stringshare_del(ecf->desklock_custom_desklock_cmd);
+ if (ecf->desk_flip_animation) eina_stringshare_del(ecf->desk_flip_animation);
EINA_LIST_FREE(ecf->syscon.actions, sca)
{
if (sca->action) eina_stringshare_del(sca->action);
Index: src/bin/e_desk.h
===================================================================
--- src/bin/e_desk.h (revision 40555)
+++ src/bin/e_desk.h (working copy)
@@ -9,7 +9,7 @@
typedef struct _E_Event_Desk_After_Show E_Event_Desk_After_Show;
typedef struct _E_Event_Desk_DeskShow E_Event_Desk_DeskShow;
typedef struct _E_Event_Desk_Name_Change E_Event_Desk_Name_Change;
-
+typedef struct _E_Desk_Animation E_Desk_Animation;
#else
#ifndef E_DESK_H
#define E_DESK_H
@@ -32,6 +32,13 @@
Ecore_Animator *animator;
};
+struct _E_Desk_Animation
+{
+ const char *name;
+ const char *label;
+ void (*func) (E_Desk *show, E_Desk *hide);
+};
+
struct _E_Event_Desk_Show
{
E_Desk *desk;
@@ -73,6 +80,10 @@
EAPI void e_desk_col_add(E_Zone *zone);
EAPI void e_desk_col_remove(E_Zone *zone);
+EAPI void e_desk_animation_register(E_Desk_Animation *anim);
+EAPI void e_desk_animation_unregister(E_Desk_Animation *anim);
+EAPI Eina_List *e_desk_animation_list(void);
+
extern EAPI int E_EVENT_DESK_SHOW;
extern EAPI int E_EVENT_DESK_BEFORE_SHOW;
extern EAPI int E_EVENT_DESK_AFTER_SHOW;
Index: src/bin/e_desk.c
===================================================================
--- src/bin/e_desk.c (revision 40555)
+++ src/bin/e_desk.c (working copy)
@@ -14,13 +14,20 @@
static void _e_border_event_desk_after_show_free(void *data, void *ev);
static void _e_border_event_desk_deskshow_free(void *data, void *ev);
static void _e_border_event_desk_name_change_free(void *data, void *ev);
-static void _e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy);
-static void _e_desk_show_end(E_Desk *desk);
-static int _e_desk_show_animator(void *data);
-static void _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy);
-static void _e_desk_hide_end(E_Desk *desk);
-static int _e_desk_hide_animator(void *data);
+static void _e_desk_anim_none(E_Desk *desk, E_Desk *last);
+static void _e_desk_anim_pane(E_Desk *desk, E_Desk *last);
+static void _e_desk_anim_zoom(E_Desk *desk, E_Desk *last);
+static void _e_desk_anim_show_end(E_Desk *desk);
+static int _e_desk_anim_show_animator(void *data);
+static void _e_desk_anim_hide_end(E_Desk *desk);
+static int _e_desk_anim_hide_animator(void *data);
+
+static E_Desk_Animation *anim_none;
+static E_Desk_Animation *anim_zoom;
+static E_Desk_Animation *anim_pane;
+static Eina_List *animations = NULL;
+
EAPI int E_EVENT_DESK_SHOW = 0;
EAPI int E_EVENT_DESK_BEFORE_SHOW = 0;
EAPI int E_EVENT_DESK_AFTER_SHOW = 0;
@@ -35,15 +42,62 @@
E_EVENT_DESK_AFTER_SHOW = ecore_event_type_new();
E_EVENT_DESK_DESKSHOW = ecore_event_type_new();
E_EVENT_DESK_NAME_CHANGE = ecore_event_type_new();
+
+ anim_none = calloc(1, sizeof(E_Desk_Animation));
+ anim_none->name = "none";
+ anim_none->label = _("Off");
+ anim_none->func = &_e_desk_anim_none;
+ e_desk_animation_register(anim_none);
+
+ anim_pane = calloc(1, sizeof(E_Desk_Animation));
+ anim_pane->name = "pane";
+ anim_pane->label = _("Pane");
+ anim_pane->func = &_e_desk_anim_pane;
+ e_desk_animation_register(anim_pane);
+
+ anim_zoom = calloc(1, sizeof(E_Desk_Animation));
+ anim_zoom->name = "zoom";
+ anim_zoom->label = _("Zoom");
+ anim_zoom->func = &_e_desk_anim_zoom;
+ e_desk_animation_register(anim_zoom);
+
+ if (!e_config->desk_flip_animation)
+ e_config->desk_flip_animation = eina_stringshare_add("none");
+
return 1;
}
EAPI int
e_desk_shutdown(void)
{
+ e_desk_animation_unregister(anim_none);
+ e_desk_animation_unregister(anim_zoom);
+ e_desk_animation_unregister(anim_pane);
+ free(anim_none);
+ free(anim_zoom);
+ free(anim_pane);
return 1;
}
+EAPI void
+e_desk_animation_register(E_Desk_Animation *anim)
+{
+ if (!eina_list_data_find(animations, anim))
+ animations = eina_list_append(animations, anim);
+}
+
+EAPI void
+e_desk_animation_unregister(E_Desk_Animation *anim)
+{
+ animations = eina_list_remove(animations, anim);
+}
+
+EAPI Eina_List *
+e_desk_animation_list(void)
+{
+ return animations;
+}
+
EAPI E_Desk *
e_desk_new(E_Zone *zone, int x, int y)
{
@@ -203,14 +257,26 @@
EAPI void
e_desk_show(E_Desk *desk)
{
- E_Border_List *bl;
- E_Border *bd;
E_Event_Desk_Show *ev;
E_Event_Desk_Before_Show *eev;
E_Event_Desk_After_Show *eeev;
Eina_List *l;
int was_zone = 0, x, y, dx = 0, dy = 0, prev_x = 0, prev_y = 0;
+ E_Desk_Animation *anim = NULL;
+ E_Desk *last = NULL;
+ if (e_config->desk_flip_animation)
+ {
+ printf("find anim %s\n", e_config->desk_flip_animation);
+
+ EINA_LIST_FOREACH(animations, l, anim)
+ {
+ if (!strcmp(anim->name, e_config->desk_flip_animation))
+ break;
+ anim = NULL;
+ }
+ }
+
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
if (desk->visible) return;
@@ -236,9 +302,7 @@
prev_y = desk2->y;
dx = desk->x - desk2->x;
dy = desk->y - desk2->y;
- if (e_config->desk_flip_animate_mode > 0)
- _e_desk_hide_begin(desk2, e_config->desk_flip_animate_mode,
- dx, dy);
+ if (anim) last = desk2;
break;
}
}
@@ -249,27 +313,12 @@
desk->visible = 1;
if (desk->zone->bg_object) was_zone = 1;
- if (e_config->desk_flip_animate_mode == 0)
- {
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if ((bd->desk == desk) || (bd->sticky))
- e_border_show(bd);
- else if (bd->moving)
- e_border_desk_set(bd, desk);
- else
- e_border_hide(bd, 2);
- }
- }
- e_container_border_list_free(bl);
- }
- if (e_config->desk_flip_animate_mode > 0)
- _e_desk_show_begin(desk, e_config->desk_flip_animate_mode, dx, dy);
-
+ if (anim)
+ anim->func(desk, last);
+ else
+ _e_desk_anim_none(desk, last);
+
if (e_config->focus_last_focused_per_desktop)
e_desk_last_focused_focus(desk);
@@ -323,7 +372,8 @@
e_shelf_hide(es);
}
- if (e_config->desk_flip_animate_mode == 0)
+ // XXX is this event needed for anything?
+ if (!strcmp(anim->name, "none"))
{
eeev = E_NEW(E_Event_Desk_After_Show, 1);
eeev->desk = e_desk_current_get(desk->zone);
@@ -331,7 +381,6 @@
ecore_event_add(E_EVENT_DESK_AFTER_SHOW, eeev,
_e_border_event_desk_after_show_free, NULL);
}
-
}
EAPI void
@@ -584,80 +633,198 @@
}
static void
-_e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
+_e_desk_anim_none(E_Desk *desk, E_Desk *last)
{
E_Border_List *bl;
E_Border *bd;
- double t;
- t = ecore_loop_time_get();
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
{
if ((bd->desk->zone == desk->zone) && (!bd->iconic))
{
+ if ((bd->desk == desk) || (bd->sticky))
+ e_border_show(bd);
+ else if (bd->moving)
+ e_border_desk_set(bd, desk);
+ else
+ e_border_hide(bd, 2);
+ }
+ }
+ e_container_border_list_free(bl);
+}
+
+static void
+_e_desk_anim_pane(E_Desk *desk, E_Desk *last)
+{
+ E_Border_List *bl;
+ E_Border *bd;
+ double t;
+ int dx = 0, dy = 0;
+ if (last)
+ {
+ dx = desk->x - last->x;
+ dy = desk->y - last->y;
+ }
+
+ t = ecore_loop_time_get();
+ bl = e_container_border_list_first(desk->zone->container);
+ while ((bd = e_container_border_list_next(bl)))
+ {
+ if (bd->iconic) continue;
+
+ if (bd->desk->zone == desk->zone)
+ {
if (bd->moving)
{
bd->fx.start.t = t;
bd->fx.start.x = 0;
bd->fx.start.y = 0;
- e_border_desk_set(bd, desk);
- e_border_show(bd);
+
+ if (bd->desk == desk)
+ {
+ e_border_desk_set(bd, desk);
+ e_border_show(bd);
+ }
}
- else if ((bd->desk == desk) && (!bd->sticky))
+ else if ((!bd->sticky) && ((bd->desk == desk) || (bd->desk == last)))
{
bd->fx.start.t = t;
- if (mode == 1)
+ if (bd->desk == desk)
{
bd->fx.start.x = bd->zone->w * dx;
bd->fx.start.y = bd->zone->h * dy;
}
- else if (mode == 2)
+ else
{
- int mx, my, bx, by;
- double fx, fy, ang, rad, len, lmax;
+ bd->fx.start.x = bd->zone->w * -dx;
+ bd->fx.start.y = bd->zone->h * -dy;
+ }
+
+ if (bd->fx.start.x < 0)
+ bd->fx.start.x -= bd->zone->x;
+ else
+ bd->fx.start.x += bd->zone->container->w -
+ (bd->zone->x + bd->zone->w);
+ if (bd->fx.start.y < 0)
+ bd->fx.start.y -= bd->zone->y;
+ else
+ bd->fx.start.y += bd->zone->container->h -
+ (bd->zone->y + bd->zone->h);
- mx = bd->zone->x + (bd->zone->w / 2);
- my = bd->zone->y + (bd->zone->h / 2);
+ if (bd->desk == desk)
+ {
+ e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
+ e_border_show(bd);
+ }
+ else
+ e_border_fx_offset(bd, 0, 0);
+ }
+ }
+ }
+ e_container_border_list_free(bl);
+ if (desk->animator) ecore_animator_del(desk->animator);
+ desk->animator = ecore_animator_add(_e_desk_anim_show_animator, desk);
+ if (last)
+ {
+ if (last->animator) ecore_animator_del(last->animator);
+ last->animator = ecore_animator_add(_e_desk_anim_hide_animator, last);
+ }
+}
- bx = bd->x + (bd->w / 2) - mx;
- by = bd->y + (bd->h / 2) - my;
- if (bx == 0) bx = 1;
- if (by == 0) by = 1;
- fx = (double)bx / (double)(bd->zone->w / 2);
- fy = (double)by / (double)(bd->zone->h / 2);
- ang = atan(fy / fx);
- if (fx < 0.0)
- ang = M_PI + ang;
- len = sqrt((bx * bx) + (by * by));
- lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) +
- ((bd->zone->h / 2) * (bd->zone->h / 2)));
- rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0;
- bx = cos(ang) * (lmax - len + rad);
- by = sin(ang) * (lmax - len + rad);
- bd->fx.start.x = bx;
- bd->fx.start.y = by;
+static void
+_e_desk_anim_zoom(E_Desk *desk, E_Desk *last)
+{
+ E_Border_List *bl;
+ E_Border *bd;
+ double t;
+ int dx = 0, dy = 0, mx, my, bx, by;
+ double fx, fy, ang, rad, len, lmax;
+
+ if (last)
+ {
+ dx = desk->x - last->x;
+ dy = desk->y - last->y;
+ }
+
+ t = ecore_loop_time_get();
+ bl = e_container_border_list_first(desk->zone->container);
+ while ((bd = e_container_border_list_next(bl)))
+ {
+ if (bd->iconic) continue;
+
+ if (bd->desk->zone == desk->zone)
+ {
+ if (bd->moving)
+ {
+ bd->fx.start.t = t;
+ bd->fx.start.x = 0;
+ bd->fx.start.y = 0;
+
+ if (bd->desk == desk)
+ {
+ e_border_desk_set(bd, desk);
+ e_border_show(bd);
}
+ }
+ else if ((!bd->sticky) && ((bd->desk == desk) || (bd->desk == last)))
+ {
+ mx = bd->zone->x + (bd->zone->w / 2);
+ my = bd->zone->y + (bd->zone->h / 2);
+
+ bx = bd->x + (bd->w / 2) - mx;
+ by = bd->y + (bd->h / 2) - my;
+ if (bx == 0) bx = 1;
+ if (by == 0) by = 1;
+ fx = (double)bx / (double)(bd->zone->w / 2);
+ fy = (double)by / (double)(bd->zone->h / 2);
+ ang = atan(fy / fx);
+ if (fx < 0.0)
+ ang = M_PI + ang;
+ len = sqrt((bx * bx) + (by * by));
+ lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) +
+ ((bd->zone->h / 2) * (bd->zone->h / 2)));
+ rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0;
+ bx = cos(ang) * (lmax - len + rad);
+ by = sin(ang) * (lmax - len + rad);
+
+ bd->fx.start.t = t;
+ bd->fx.start.x = bx;
+ bd->fx.start.y = by;
+
if (bd->fx.start.x < 0)
bd->fx.start.x -= bd->zone->x;
else
- bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w);
+ bd->fx.start.x += bd->zone->container->w -
+ (bd->zone->x + bd->zone->w);
if (bd->fx.start.y < 0)
bd->fx.start.y -= bd->zone->y;
else
- bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
- e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
- e_border_show(bd);
+ bd->fx.start.y += bd->zone->container->h -
+ (bd->zone->y + bd->zone->h);
+
+ if (bd->desk == desk)
+ {
+ e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
+ e_border_show(bd);
+ }
+ else
+ e_border_fx_offset(bd, 0, 0);
}
}
}
e_container_border_list_free(bl);
if (desk->animator) ecore_animator_del(desk->animator);
- desk->animator = ecore_animator_add(_e_desk_show_animator, desk);
+ desk->animator = ecore_animator_add(_e_desk_anim_show_animator, desk);
+ if (last)
+ {
+ if (last->animator) ecore_animator_del(last->animator);
+ last->animator = ecore_animator_add(_e_desk_anim_hide_animator, last);
+ }
}
static void
-_e_desk_show_end(E_Desk *desk)
+_e_desk_anim_show_end(E_Desk *desk)
{
E_Event_Desk_After_Show *ev;
E_Border_List *bl;
@@ -684,13 +851,13 @@
}
static int
-_e_desk_show_animator(void *data)
+_e_desk_anim_show_animator(void *data)
{
E_Desk *desk;
E_Border_List *bl;
E_Border *bd;
double t, dt, spd;
-
+
desk = data;
t = ecore_loop_time_get();
dt = -1.0;
@@ -718,89 +885,20 @@
e_container_border_list_free(bl);
if (dt <= 0.0)
{
- _e_desk_show_end(desk);
+ _e_desk_anim_show_end(desk);
desk->animator = NULL;
return 0;
}
return 1;
}
-static void
-_e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
-{
- E_Border_List *bl;
- E_Border *bd;
- double t;
- t = ecore_loop_time_get();
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if (bd->moving)
- {
- bd->fx.start.t = t;
- bd->fx.start.x = 0;
- bd->fx.start.y = 0;
- }
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- bd->fx.start.t = t;
- if (mode == 1)
- {
- bd->fx.start.x = bd->zone->w * -dx;
- bd->fx.start.y = bd->zone->h * -dy;
- }
- else if (mode == 2)
- {
- int mx, my, bx, by;
- double fx, fy, ang, rad, len, lmax;
-
- mx = bd->zone->x + (bd->zone->w / 2);
- my = bd->zone->y + (bd->zone->h / 2);
-
- bx = bd->x + (bd->w / 2) - mx;
- by = bd->y + (bd->h / 2) - my;
- if (bx == 0) bx = 1;
- if (by == 0) by = 1;
- fx = (double)bx / (double)(bd->zone->w / 2);
- fy = (double)by / (double)(bd->zone->h / 2);
- ang = atan(fy / fx);
- if (fx < 0.0)
- ang = M_PI + ang;
- len = sqrt((bx * bx) + (by * by));
- lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) +
- ((bd->zone->h / 2) * (bd->zone->h / 2)));
- rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0;
- bx = cos(ang) * (lmax - len + rad);
- by = sin(ang) * (lmax - len + rad);
- bd->fx.start.x = bx;
- bd->fx.start.y = by;
- }
- if (bd->fx.start.x < 0)
- bd->fx.start.x -= bd->zone->x;
- else
- bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w);
- if (bd->fx.start.y < 0)
- bd->fx.start.y -= bd->zone->y;
- else
- bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
- e_border_fx_offset(bd, 0, 0);
- }
- }
- }
- e_container_border_list_free(bl);
- if (desk->animator) ecore_animator_del(desk->animator);
- desk->animator = ecore_animator_add(_e_desk_hide_animator, desk);
-}
-
static void
-_e_desk_hide_end(E_Desk *desk)
+_e_desk_anim_hide_end(E_Desk *desk)
{
E_Border_List *bl;
E_Border *bd;
-
+
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
{
@@ -820,7 +918,7 @@
}
static int
-_e_desk_hide_animator(void *data)
+_e_desk_anim_hide_animator(void *data)
{
E_Desk *desk;
E_Border_List *bl;
@@ -853,7 +951,7 @@
e_container_border_list_free(bl);
if ((dt < 0.0) || (dt >= 1.0))
{
- _e_desk_hide_end(desk);
+ _e_desk_anim_hide_end(desk);
desk->animator = NULL;
return 0;
}
Index: src/modules/conf_desks/e_int_config_desks.c
===================================================================
--- src/modules/conf_desks/e_int_config_desks.c (revision 40555)
+++ src/modules/conf_desks/e_int_config_desks.c (working copy)
@@ -24,15 +24,16 @@
int flip_animate;
/*- ADVANCED -*/
+ int flip_animation_cur;
+ int flip_animation_sel;
int edge_flip_dragging;
int flip_wrap;
- int flip_mode;
int flip_interp;
int flip_pan_bg;
double flip_speed;
double x_axis_pan;
double y_axis_pan;
-
+
/*- GUI -*/
Evas_Object *preview;
Eina_List *flip_anim_list;
@@ -69,17 +70,31 @@
static void
_fill_data(E_Config_Dialog_Data *cfdata)
{
+ E_Desk_Animation *anim;
+ Eina_List *l;
+ int i = 0;
+
cfdata->x = e_config->zone_desks_x_count;
cfdata->y = e_config->zone_desks_y_count;
- cfdata->flip_animate = e_config->desk_flip_animate_mode > 0;
+ cfdata->flip_animate = strcmp(e_config->desk_flip_animation, "none") != 0;
cfdata->edge_flip_dragging = e_config->edge_flip_dragging;
cfdata->flip_wrap = e_config->desk_flip_wrap;
- cfdata->flip_mode = e_config->desk_flip_animate_mode;
cfdata->flip_interp = e_config->desk_flip_animate_interpolation;
cfdata->flip_pan_bg = e_config->desk_flip_pan_bg;
cfdata->flip_speed = e_config->desk_flip_animate_time;
cfdata->x_axis_pan = e_config->desk_flip_pan_x_axis_factor;
cfdata->y_axis_pan = e_config->desk_flip_pan_y_axis_factor;
+
+ EINA_LIST_FOREACH(e_desk_animation_list(), l, anim)
+ {
+ if (!strcmp(anim->name, e_config->desk_flip_animation))
+ {
+ cfdata->flip_animation_sel = i;
+ cfdata->flip_animation_cur = i;
+ break;
+ }
+ i++;
+ }
}
static void *
@@ -120,15 +135,16 @@
if (cfdata->flip_animate)
{
- cfdata->flip_mode = 1;
- e_config->desk_flip_animate_mode = 1;
+ eina_stringshare_del(e_config->desk_flip_animation);
+ e_config->desk_flip_animation = eina_stringshare_add("pane");
+
e_config->desk_flip_animate_interpolation = 0;
e_config->desk_flip_animate_time = 0.5;
}
else
{
- cfdata->flip_mode = 0;
- e_config->desk_flip_animate_mode = 0;
+ eina_stringshare_del(e_config->desk_flip_animation);
+ e_config->desk_flip_animation = eina_stringshare_add("none");
}
e_config_save_queue();
@@ -155,16 +171,14 @@
if (cfdata->flip_animate)
{
- if ((cfdata->flip_mode != 1) ||
- (e_config->desk_flip_animate_mode != 1) ||
+ if ((strcmp(e_config->desk_flip_animation, "pane") != 0) ||
(e_config->desk_flip_animate_interpolation != 0) ||
(e_config->desk_flip_animate_time != 0.5))
return 1;
}
else
{
- if ((cfdata->flip_mode != 0) ||
- (e_config->desk_flip_animate_mode != 0))
+ if (strcmp(e_config->desk_flip_animation, "none") != 0)
return 1;
}
@@ -179,13 +193,28 @@
E_Manager *man;
E_Container *con;
E_Zone *zone;
-
+
EINA_LIST_FOREACH(e_manager_list(), l, man)
EINA_LIST_FOREACH(man->containers, ll, con)
EINA_LIST_FOREACH(con->zones, lll, zone)
e_zone_desk_count_set(zone, cfdata->x, cfdata->y);
- e_config->desk_flip_animate_mode = cfdata->flip_mode;
+ if (cfdata->flip_animation_sel != cfdata->flip_animation_cur)
+ {
+ E_Desk_Animation *anim;
+
+ if (e_config->desk_flip_animation)
+ eina_stringshare_del(e_config->desk_flip_animation);
+
+ anim = eina_list_nth(e_desk_animation_list(), cfdata->flip_animation_sel);
+ if (anim)
+ e_config->desk_flip_animation = eina_stringshare_add(anim->name);
+ else
+ e_config->desk_flip_animation = eina_stringshare_add("none");
+
+ cfdata->flip_animation_cur = cfdata->flip_animation_sel;
+ }
+
e_config->desk_flip_animate_interpolation = cfdata->flip_interp;
e_config->desk_flip_pan_bg = cfdata->flip_pan_bg;
e_config->desk_flip_animate_time = cfdata->flip_speed;
@@ -206,7 +235,9 @@
E_Manager *man;
E_Container *con;
E_Zone *zone;
-
+ E_Desk_Animation *anim;
+ int changed = 0;
+
EINA_LIST_FOREACH(e_manager_list(), l, man)
EINA_LIST_FOREACH(man->containers, ll, con)
EINA_LIST_FOREACH(con->zones, lll, zone)
@@ -216,8 +247,8 @@
if ((x != cfdata->x) || (y != cfdata->y))
return 1;
}
-
- return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) ||
+
+ return ((cfdata->flip_animation_cur != cfdata->flip_animation_sel) ||
(e_config->desk_flip_animate_interpolation != cfdata->flip_interp) ||
(e_config->desk_flip_pan_bg != cfdata->flip_pan_bg) ||
(e_config->desk_flip_animate_time != cfdata->flip_speed) ||
@@ -270,6 +301,9 @@
/* generate the core widget layout for an advanced dialog */
Evas_Object *o, *ob, *of, *ot, *ott;
E_Radio_Group *rg;
+ Eina_List *l;
+ E_Desk_Animation *anim;
+ int i = 0;
o = e_widget_list_add(evas, 0, 0);
ott = e_widget_table_add(evas, 0);
@@ -300,30 +334,41 @@
e_widget_table_object_append(ott, of, 1, 0, 1, 1, 1, 0, 1, 0);
of = e_widget_framelist_add(evas, _("Flip Animation"), 0);
- rg = e_widget_radio_group_new(&(cfdata->flip_mode));
- ob = e_widget_radio_add(evas, _("Off"), 0, rg);
- e_widget_framelist_object_append(of, ob);
- e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
- ob = e_widget_radio_add(evas, _("Pane"), 1, rg);
- e_widget_framelist_object_append(of, ob);
- e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
- ob = e_widget_radio_add(evas, _("Zoom"), 2, rg);
- e_widget_framelist_object_append(of, ob);
- e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
+ rg = e_widget_radio_group_new(&(cfdata->flip_animation_sel));
+
+ EINA_LIST_FOREACH(e_desk_animation_list(), l, anim)
+ {
+ ob = e_widget_radio_add(evas, anim->label, i, rg);
+ e_widget_framelist_object_append(of, ob);
+ e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
+ i++;
+ }
+
+ /* ob = e_widget_radio_add(evas, _("Off"), i, rg);
+ * e_widget_framelist_object_append(of, ob);
+ * e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata); */
+
+ /* ob = e_widget_radio_add(evas, _("Pane"), 1, rg);
+ * e_widget_framelist_object_append(of, ob);
+ * e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
+ * ob = e_widget_radio_add(evas, _("Zoom"), 2, rg);
+ * e_widget_framelist_object_append(of, ob);
+ * e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata); */
+
ob = e_widget_slider_add(evas, 1, 0, _("%1.1f sec"), 0.0, 5.0, 0.05, 0, &(cfdata->flip_speed), NULL, 200);
- e_widget_disabled_set(ob, !cfdata->flip_mode);
+ e_widget_disabled_set(ob, !cfdata->flip_animation_sel);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Background panning"), &(cfdata->flip_pan_bg));
- e_widget_disabled_set(ob, !cfdata->flip_mode);
+ e_widget_disabled_set(ob, !cfdata->flip_animation_sel);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%.2f X-axis pan factor"), 0.0, 1.0, 0.01, 0, &(cfdata->x_axis_pan), NULL, 200);
- e_widget_disabled_set(ob, !cfdata->flip_mode);
+ e_widget_disabled_set(ob, !cfdata->flip_animation_sel);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%.2f Y-axis pan factor"), 0.0, 1.0, 0.01, 0, &(cfdata->y_axis_pan), NULL, 200);
- e_widget_disabled_set(ob, !cfdata->flip_mode);
+ e_widget_disabled_set(ob, !cfdata->flip_animation_sel);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_framelist_object_append(of, ob);
@@ -349,7 +394,7 @@
Eina_List *list = cfdata->flip_anim_list;
Eina_List *l;
Evas_Object *o;
-
+
EINA_LIST_FOREACH(list, l, o)
- e_widget_disabled_set(o, !cfdata->flip_mode);
+ e_widget_disabled_set(o, !cfdata->flip_animation_sel);
}
------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel