fully remove the BG panning.

add a float_set message directed towards the bg object on desk show


SVN revision: 64102
This commit is contained in:
Viktor Kojouharov 2011-10-16 14:53:27 +00:00
parent 436918fe7a
commit 96ff415a02
8 changed files with 13 additions and 252 deletions

View File

@ -3,7 +3,6 @@
/* local subsystem functions */
static void _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _e_bg_event_bg_update_free(void *data, void *event);
static Eina_Bool _e_bg_slide_animator(void *data);
static void _e_bg_image_import_dialog_done(void *data, const char *path, Eina_Bool ok, Eina_Bool external, int quality, E_Image_Import_Mode mode);
static void _e_bg_image_import_done(void *data, Eina_Bool ok, const char *image_path, const char *edje_path);
@ -13,21 +12,6 @@ static void _e_bg_handler_image_imported(void *data, const char *image_path);
EAPI int E_EVENT_BG_UPDATE = 0;
static E_Fm2_Mime_Handler *bg_hdl = NULL;
typedef struct _E_Bg_Anim_Params E_Bg_Anim_Params;
struct _E_Bg_Anim_Params
{
E_Zone *zone;
double start_time;
int start_x;
int start_y;
int end_x;
int end_y;
struct {
Eina_Bool x, y;
} freedom;
};
struct _E_Bg_Image_Import_Handle
{
struct {
@ -244,7 +228,6 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
else if (transition == E_BG_TRANSITION_DESK) trans = e_config->transition_desk;
else if (transition == E_BG_TRANSITION_CHANGE) trans = e_config->transition_change;
if ((!trans) || (!trans[0])) transition = E_BG_TRANSITION_NONE;
if (e_config->desk_flip_pan_bg) transition = E_BG_TRANSITION_NONE;
desk = e_desk_current_get(zone);
if (desk)
@ -257,7 +240,7 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
const char *pfile = "";
edje_object_file_get(zone->bg_object, &pfile, NULL);
if ((!e_util_strcmp(pfile, bgfile)) && !e_config->desk_flip_pan_bg) return;
if (!e_util_strcmp(pfile, bgfile)) return;
}
if (transition == E_BG_TRANSITION_NONE)
@ -317,30 +300,6 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
}
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
if (e_config->desk_flip_pan_bg)
{
int x = 0, y = 0;
o = zone->bg_scrollframe;
if (!o)
{
o = e_scrollframe_add(zone->container->bg_evas);
zone->bg_scrollframe = o;
e_scrollframe_custom_theme_set(o, "base/theme/background",
"e/desktop/background/scrollframe");
e_scrollframe_policy_set(o, E_SCROLLFRAME_POLICY_OFF, E_SCROLLFRAME_POLICY_OFF);
e_scrollframe_child_pos_set(o, 0, 0);
evas_object_show(o);
}
e_scrollframe_child_set(o, zone->bg_object);
if (desk)
{
x = desk->x;
y = desk->y;
}
e_bg_zone_slide(zone, x, y);
return;
}
if (transition != E_BG_TRANSITION_NONE)
{
@ -356,71 +315,6 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
}
}
EAPI void
e_bg_zone_slide(E_Zone *zone, int prev_x, int prev_y)
{
Evas_Object *o;
E_Desk *desk;
Evas_Coord w, h, maxw, maxh, step_w, step_h;
Ecore_Animator *anim;
E_Bg_Anim_Params *params;
Evas_Coord vw, vh, px, py;
int fx, fy;
const void *data;
desk = e_desk_current_get(zone);
edje_object_size_max_get(zone->bg_object, &w, &h);
maxw = zone->w * zone->desk_x_count;
maxh = zone->h * zone->desk_y_count;
if (!w) w = maxw;
if (!h) h = maxh;
evas_object_resize(zone->bg_object, w, h);
if (zone->desk_x_count > 1)
step_w = ((double) (w - zone->w)) / (zone->desk_x_count - 1);
else step_w = 0;
if (zone->desk_y_count > 1)
step_h = ((double) (h - zone->h)) / (zone->desk_y_count - 1);
else step_h = 0;
o = zone->bg_scrollframe;
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, -1);
evas_object_clip_set(o, zone->bg_clip_object);
data = edje_object_data_get(zone->bg_object, "directional_freedom");
e_scrollframe_child_viewport_size_get(o, &vw, &vh);
e_scrollframe_child_pos_get(o, &px, &py);
params = evas_object_data_get(zone->bg_object, "switch_animator_params");
if (!params)
params = E_NEW(E_Bg_Anim_Params, 1);
params->zone = zone;
params->start_x = px;
params->start_y = py;
params->end_x = desk->x * step_w * e_config->desk_flip_pan_x_axis_factor;
params->end_y = desk->y * step_h * e_config->desk_flip_pan_y_axis_factor;
params->start_time = 0.0;
if ((data) && (sscanf(data, "%d %d", &fx, &fy) == 2))
{
if (fx)
{
params->freedom.x = EINA_TRUE;
params->start_x = prev_x * step_w * e_config->desk_flip_pan_x_axis_factor;
}
if (fy)
{
params->freedom.y = EINA_TRUE;
params->start_y = prev_y * step_h * e_config->desk_flip_pan_y_axis_factor;
}
}
anim = evas_object_data_get(zone->bg_object, "switch_animator");
if (anim) ecore_animator_del(anim);
anim = ecore_animator_add(_e_bg_slide_animator, params);
evas_object_data_set(zone->bg_object, "switch_animator", anim);
evas_object_data_set(zone->bg_object, "switch_animator_params", params);
}
EAPI void
e_bg_default_set(const char *file)
{
@ -763,74 +657,6 @@ _e_bg_event_bg_update_free(void *data __UNUSED__, void *event)
free(event);
}
static Eina_Bool
_e_bg_slide_animator(void *data)
{
E_Bg_Anim_Params *params;
E_Zone *zone;
Evas_Object *o;
double st;
double t, dt, spd;
Evas_Coord px, py, rx, ry, bw, bh, panw, panh;
Edje_Message_Int_Set *msg;
params = data;
zone = params->zone;
t = ecore_loop_time_get();
spd = e_config->desk_flip_animate_time;
o = zone->bg_scrollframe;
if (!params->start_time)
st = params->start_time = t;
else
st = params->start_time;
dt = (t - st) / spd;
if (dt > 1.0) dt = 1.0;
dt = 1.0 - dt;
dt *= dt; /* decelerate - could be a better hack */
if (params->end_x > params->start_x)
rx = params->start_x + (params->end_x - params->start_x) * (1.0 - dt);
else
rx = params->end_x + (params->start_x - params->end_x) * dt;
if (params->freedom.x) px = zone->x;
else px = rx;
if (params->end_y > params->start_y)
ry = params->start_y + (params->end_y - params->start_y) * (1.0 - dt);
else
ry = params->end_y + (params->start_y - params->end_y) * dt;
if (params->freedom.y) py = zone->y;
else py = ry;
e_scrollframe_child_pos_set(o, px, py);
evas_object_geometry_get(zone->bg_object, NULL, NULL, &bw, &bh);
panw = bw - zone->w;
if (panw < 0) panw = 0;
panh = bh - zone->h;
if (panh < 0) panh = 0;
msg = alloca(sizeof(Edje_Message_Int_Set) + (5 * sizeof(int)));
msg->count = 6;
msg->val[0] = rx;
msg->val[1] = ry;
msg->val[2] = panw;
msg->val[3] = panh;
msg->val[4] = bw;
msg->val[5] = bh;
edje_object_message_send(zone->bg_object, EDJE_MESSAGE_INT_SET, 0, msg);
if (dt <= 0.0)
{
evas_object_data_del(zone->bg_object, "switch_animator");
evas_object_data_del(zone->bg_object, "switch_animator_params");
E_FREE(params);
return ECORE_CALLBACK_CANCEL;
}
return ECORE_CALLBACK_RENEW;
}
static void
_e_bg_image_import_dialog_done(void *data, const char *path, Eina_Bool ok, Eina_Bool external, int quality, E_Image_Import_Mode mode)
{

View File

@ -31,7 +31,6 @@ EINTERN int e_bg_shutdown(void);
EAPI const E_Config_Desktop_Background *e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI const char *e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI void e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition);
EAPI void e_bg_zone_slide(E_Zone *zone, int prev_x, int prev_y);
EAPI void e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file);
EAPI void e_bg_del(int container, int zone, int desk_x, int desk_y);
EAPI void e_bg_default_set(const char *file);

View File

@ -834,9 +834,6 @@ e_config_init(void)
E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT);
E_CONFIG_VAL(D, T, desk_flip_animate_interpolation, INT);
E_CONFIG_VAL(D, T, desk_flip_animate_time, DOUBLE);
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, wallpaper_import_last_dev, STR);
E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR);
@ -1164,12 +1161,6 @@ e_config_load(void)
COPYVAL(screensaver_ask_presentation_timeout);
IFCFGEND;
IFCFG(0x0133);
COPYVAL(desk_flip_pan_bg);
COPYVAL(desk_flip_pan_x_axis_factor);
COPYVAL(desk_flip_pan_y_axis_factor);
IFCFGEND;
IFCFG(0x0134);
COPYVAL(exec.expire_timeout);
COPYVAL(exec.show_run_dialog);
@ -1300,9 +1291,6 @@ e_config_load(void)
E_CONFIG_LIMIT(e_config->desk_flip_wrap, 0, 1);
E_CONFIG_LIMIT(e_config->fullscreen_flip, 0, 1);
E_CONFIG_LIMIT(e_config->icon_theme_overrides, 0, 1);
E_CONFIG_LIMIT(e_config->desk_flip_pan_bg, 0, 1);
E_CONFIG_LIMIT(e_config->desk_flip_pan_x_axis_factor, 0.0, 1.0);
E_CONFIG_LIMIT(e_config->desk_flip_pan_y_axis_factor, 0.0, 1.0);
E_CONFIG_LIMIT(e_config->remember_internal_windows, 0, 3);
E_CONFIG_LIMIT(e_config->desk_auto_switch, 0, 1);

View File

@ -263,9 +263,6 @@ struct _E_Config
int desk_flip_animate_mode; // GUI
int desk_flip_animate_interpolation; // GUI
double desk_flip_animate_time; // GUI
unsigned char desk_flip_pan_bg;
double desk_flip_pan_x_axis_factor;
double desk_flip_pan_y_axis_factor;
const char *wallpaper_import_last_dev; // INTERNAL
const char *wallpaper_import_last_path; // INTERNAL

View File

@ -197,9 +197,10 @@ e_desk_show(E_Desk *desk)
E_Event_Desk_Show *ev;
E_Event_Desk_Before_Show *eev;
E_Event_Desk_After_Show *eeev;
Edje_Message_Float_Set *msg;
Eina_List *l;
E_Shelf *es;
int was_zone = 0, x, y, dx = 0, dy = 0, prev_x = 0, prev_y = 0;
int was_zone = 0, x, y, dx = 0, dy = 0;
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
@ -222,8 +223,6 @@ e_desk_show(E_Desk *desk)
if (desk2->visible)
{
desk2->visible = 0;
prev_x = desk2->x;
prev_y = desk2->y;
dx = desk->x - desk2->x;
dy = desk->y - desk2->y;
if (e_config->desk_flip_animate_mode > 0)
@ -238,6 +237,15 @@ e_desk_show(E_Desk *desk)
desk->zone->desk_y_current = desk->y;
desk->visible = 1;
msg = alloca(sizeof(Edje_Message_Float_Set) + sizeof(double));
msg->count = 1;
msg->val[0] = e_config->desk_flip_animate_time;
msg->val[1] = (double) desk->x;
msg->val[2] = (double) desk->zone->desk_x_count;
msg->val[3] = (double) desk->y;
msg->val[4] = (double) desk->zone->desk_y_count;
edje_object_message_send(desk->zone->bg_object, EDJE_MESSAGE_FLOAT_SET, 0, msg);
if (desk->zone->bg_object) was_zone = 1;
if (e_config->desk_flip_animate_mode == 0)
{
@ -266,12 +274,7 @@ e_desk_show(E_Desk *desk)
}
if (was_zone)
{
if (e_config->desk_flip_pan_bg)
e_bg_zone_slide(desk->zone, prev_x, prev_y);
else
e_bg_zone_update(desk->zone, E_BG_TRANSITION_DESK);
}
e_bg_zone_update(desk->zone, E_BG_TRANSITION_DESK);
else
e_bg_zone_update(desk->zone, E_BG_TRANSITION_START);

View File

@ -282,8 +282,6 @@ e_zone_move(E_Zone *zone,
zone->x = x;
zone->y = y;
evas_object_move(zone->bg_object, x, y);
if (zone->bg_scrollframe)
evas_object_move(zone->bg_scrollframe, x, y);
evas_object_move(zone->bg_event_object, x, y);
evas_object_move(zone->bg_clip_object, x, y);
@ -315,8 +313,6 @@ e_zone_resize(E_Zone *zone,
zone->w = w;
zone->h = h;
evas_object_resize(zone->bg_object, w, h);
if (zone->bg_scrollframe)
evas_object_resize(zone->bg_scrollframe, w, h);
evas_object_resize(zone->bg_event_object, w, h);
evas_object_resize(zone->bg_clip_object, w, h);
@ -356,13 +352,9 @@ e_zone_move_resize(E_Zone *zone,
zone->h = h;
evas_object_move(zone->bg_object, x, y);
if (zone->bg_scrollframe)
evas_object_move(zone->bg_scrollframe, x, y);
evas_object_move(zone->bg_event_object, x, y);
evas_object_move(zone->bg_clip_object, x, y);
evas_object_resize(zone->bg_object, w, h);
if (zone->bg_scrollframe)
evas_object_resize(zone->bg_scrollframe, w, h);
evas_object_resize(zone->bg_event_object, w, h);
evas_object_resize(zone->bg_clip_object, w, h);
@ -1480,14 +1472,9 @@ _e_zone_free(E_Zone *zone)
con = zone->container;
if (zone->name) eina_stringshare_del(zone->name);
con->zones = eina_list_remove(con->zones, zone);
anim = evas_object_data_get(zone->bg_object, "switch_animator");
if (anim) ecore_animator_del(anim);
data = evas_object_data_get(zone->bg_object, "switch_animator_params");
if (data) E_FREE(data);
evas_object_del(zone->bg_event_object);
evas_object_del(zone->bg_clip_object);
evas_object_del(zone->bg_object);
evas_object_del(zone->bg_scrollframe);
if (zone->prev_bg_object) evas_object_del(zone->prev_bg_object);
if (zone->transition_object) evas_object_del(zone->transition_object);

View File

@ -45,7 +45,6 @@ struct _E_Zone
Evas_Object *bg_event_object;
Evas_Object *bg_clip_object;
Evas_Object *prev_bg_object;
Evas_Object *bg_scrollframe;
Evas_Object *transition_object;
int desk_x_count, desk_y_count;

View File

@ -19,10 +19,7 @@ struct _E_Config_Dialog_Data
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;
@ -65,10 +62,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
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;
}
static void *
@ -106,10 +100,7 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
e_config->desk_flip_animate_mode = cfdata->flip_mode;
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;
e_config->desk_flip_pan_x_axis_factor = cfdata->x_axis_pan;
e_config->desk_flip_pan_y_axis_factor = cfdata->y_axis_pan;
e_config->edge_flip_dragging = cfdata->edge_flip_dragging;
e_config->desk_flip_wrap = cfdata->flip_wrap;
@ -139,10 +130,7 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfda
return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) ||
(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) ||
(e_config->desk_flip_pan_x_axis_factor != cfdata->x_axis_pan) ||
(e_config->desk_flip_pan_y_axis_factor != cfdata->y_axis_pan) ||
(e_config->edge_flip_dragging != cfdata->edge_flip_dragging) ||
(e_config->desk_flip_wrap != cfdata->flip_wrap));
}
@ -203,13 +191,6 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dial
e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
/* this is broken in e so disable in config dialog.
ob = e_widget_check_add(evas, _("Background panning"),
&(cfdata->flip_pan_bg));
e_widget_disabled_set(ob, !cfdata->flip_mode);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
*/
ob = e_widget_label_add(evas, _("Animation speed"));
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
@ -218,25 +199,6 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dial
e_widget_disabled_set(ob, !cfdata->flip_mode);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
/*
ob = e_widget_label_add(evas, _("X-Axis pan factor"));
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
ob = e_widget_slider_add(evas, 1, 0, _("%.2f"), 0, 1, 0.01, 0,
&(cfdata->x_axis_pan), NULL, 150);
e_widget_disabled_set(ob, !cfdata->flip_mode);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
ob = e_widget_label_add(evas, _("Y-Axis pan factor"));
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
ob = e_widget_slider_add(evas, 1, 0, _("%.2f"), 0, 1, 0.01, 0,
&(cfdata->y_axis_pan), NULL, 150);
e_widget_disabled_set(ob, !cfdata->flip_mode);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
*/
e_widget_toolbook_page_append(otb, NULL, _("Flip Animation"), o,
1, 0, 1, 0, 0.5, 0.0);