#define ELM_MAX(v1, v2) (((v1) > (v2)) ? (v1) : (v2))\r
#define ROT_RIGHT (5)\r
#define ROT_LEFT (-5)\r
+#define SHOW_ITEM_NUM 3 \r
+\r
\r
struct _Stackedicon_Item {\r
Evas_Object *parent;\r
Evas_Coord x, y, w, h;\r
Eina_Bool on_expanded : 1;\r
Eina_Bool visible: 1;\r
+ Eina_Bool move_start: 1;\r
};\r
\r
static const char *widtype = NULL;\r
static void _icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
static void _icon_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
static void _icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-static void _icon_move_to_zero(void *data);\r
-static int _icon_move_to_zero_cb(void *data);\r
+static void _icon_move_to_zero(Evas_Object *obj);\r
+static int _icon_move_to_zero_cb(Evas_Object *obj);\r
static void _icon_move_map(void *data, int flag, int interval_x, int interval_y);\r
static void _icon_map_pos(void *data, Evas_Coord x, Evas_Coord y);\r
static void _del_image(void *data);\r
static void _show_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);\r
static void _hide_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);\r
static void _event_init(Evas_Object *obj);\r
+static void _hide_hidden_image(Evas_Object *obj);\r
+\r
\r
\r
\r
it->mdx = ev->output.x;\r
it->mdy = ev->output.y;\r
\r
+ _it = NULL;\r
+ EINA_LIST_REVERSE_FOREACH(wd->list, l, _it) {\r
+ if(_it != NULL){\r
+ if(_it->exist == EINA_FALSE) _add_image(it->parent, _it);\r
+ evas_object_move(_it->ly, wd->x + wd->w/2 - _it->mw/2, wd->y + wd->h/2 - _it->mh/2); \r
+ //if(wd->visible) evas_object_show(_it->ly);\r
+ }\r
+ }\r
+\r
EINA_LIST_REVERSE_FOREACH(wd->list, l, _it) {\r
if(_it != NULL){\r
if(_it->exist == EINA_TRUE){ \r
}\r
}\r
}\r
+\r
+ wd->move_start = TRUE;\r
}\r
\r
static void _icon_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
Evas_Event_Mouse_Move *ev = event_info;\r
if(!wd || !ev->buttons) return;\r
\r
+ if(wd->move_start == TRUE){\r
+ _show_all_image(it->parent);\r
+ wd->move_start = FALSE;\r
+ }\r
+ \r
if(it->on_hold == EINA_TRUE){\r
it->mmx = ev->cur.output.x;\r
it->mmy = ev->cur.output.y;\r
wd->interval_y = 0;\r
\r
_icon_move_map(wd, 0, wd->x, wd->y); \r
+ evas_object_smart_callback_call(it->parent, "expanded", NULL); \r
+ _hide_hidden_image(it->parent);\r
\r
- evas_object_smart_callback_call(it->parent, "expanded", NULL); \r
}else{ \r
wd->on_expanded= EINA_FALSE; \r
it->on_hold = EINA_FALSE; \r
wd->animator = NULL;\r
}\r
wd->time = _current_time_get();\r
- wd->animator= ecore_animator_add(_icon_move_to_zero_cb, wd); \r
+ wd->animator= ecore_animator_add(_icon_move_to_zero_cb, it->parent); \r
} \r
}\r
\r
return ((timev.tv_sec * 1000) + ((timev.tv_usec) / 1000));\r
}\r
\r
-static void _icon_move_to_zero(void *data)\r
+static void _icon_move_to_zero(Evas_Object *obj)\r
{\r
- Widget_Data *wd = (Widget_Data *)data;\r
+ Widget_Data *wd = elm_widget_data_get(obj);\r
double t;\r
int x, y;\r
if(!wd) return;\r
wd->interval_x = 0;\r
wd->interval_y = 0; \r
_icon_move_map(wd, 0, wd->x, wd->y);\r
+ _hide_hidden_image(obj);\r
}else{ \r
_icon_move_map(wd, 0, wd->x + wd->interval_x - x, wd->y + wd->interval_y - y);\r
}\r
}\r
\r
-static int _icon_move_to_zero_cb(void *data)\r
+static int _icon_move_to_zero_cb(Evas_Object *obj)\r
{ \r
- _icon_move_to_zero(data);\r
+ _icon_move_to_zero(obj);\r
\r
return EXIT_FAILURE;\r
}\r
if (!wd || ((wd->w == 1) && (wd->h == 1))) return;\r
\r
EINA_LIST_REVERSE_FOREACH(wd->list, l, it) {\r
+ if(it->index >= SHOW_ITEM_NUM){\r
+ if(it->ly) evas_object_hide(it->ly);\r
+ continue;\r
+ }\r
if(it != NULL){\r
- if(it->exist == EINA_FALSE){ \r
- _add_image(obj, it);\r
- }\r
+ if(it->exist == EINA_FALSE) _add_image(obj, it);\r
evas_object_move(it->ly, wd->x + wd->w/2 - it->mw/2, wd->y + wd->h/2 - it->mh/2); \r
if(wd->visible) evas_object_show(it->ly);\r
}\r
}\r
}\r
\r
+static void _hide_hidden_image(Evas_Object *obj)\r
+{\r
+ Widget_Data *wd = elm_widget_data_get(obj);\r
+ Eina_List *l;\r
+ Elm_Stackedicon_Item *it = NULL;\r
+ if (!wd) return;\r
+ \r
+ EINA_LIST_REVERSE_FOREACH(wd->list, l, it) {\r
+ if(it->index >= SHOW_ITEM_NUM){\r
+ if(it->ly) evas_object_hide(it->ly);\r
+ }\r
+ }\r
+}\r
+\r
+static void\r
+_parent_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
+{\r
+ Widget_Data *wd = elm_widget_data_get(data);\r
+ Evas_Coord w, h; \r
+ if (!wd) return;\r
+\r
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h); \r
+ if(wd->clip) evas_object_resize(wd->clip, w, h);\r
+ \r
+ //_update_stackedicon(data);\r
+}\r
+\r
static void\r
_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
{\r
Widget_Data *wd = elm_widget_data_get(obj);\r
if (!wd) return;\r
\r
+ Evas_Object *parent = elm_widget_parent_get(obj);\r
+ if(parent)\r
+ evas_object_event_callback_add(parent, EVAS_CALLBACK_RESIZE, _parent_resize_cb, obj);\r
+ \r
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize_cb, obj);\r
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move_cb, obj); \r
evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _show_cb, obj);\r
it->parent = obj;\r
it->ly = NULL;\r
it->ic = NULL;\r
+ it->pad = NULL;\r
it->index = eina_list_count(wd->list);\r
it->exist = EINA_FALSE; \r
wd->list = eina_list_append(wd->list, it);\r
\r
+ if(it->index < SHOW_ITEM_NUM)\r
_update_stackedicon(obj);\r
\r
return it;\r
it->parent = obj;\r
it->ly = NULL;\r
it->ic = NULL;\r
+ it->pad = NULL;\r
it->index = eina_list_count(wd->list);\r
it->exist = EINA_FALSE; \r
wd->list = eina_list_prepend(wd->list, it);\r
\r
+ if(it->index < SHOW_ITEM_NUM)\r
_update_stackedicon(obj);\r
\r
return it;\r