From 99db27234b78c348d58b95305e7e32ab2c706691 Mon Sep 17 00:00:00 2001 From: YoungHun Cho Date: Mon, 30 May 2016 14:40:29 +0900 Subject: [PATCH] cluster view edit animation & fix bug (allpage reposition) Change-Id: Ic37a86fa2521e9d3b39a62d7a5af57de1a2697a5 Signed-off-by: YoungHun Cho --- .sdk_delta.info | Bin 31257 -> 32127 bytes .sign/.manifest.tmp | 6 +- .sign/author-signature.xml | 10 +- .sign/signature1.xml | 12 +- inc/apps_data.h | 1 + inc/apps_view.h | 2 +- inc/cluster_page.h | 2 + inc/cluster_view.h | 4 +- inc/conf.h | 1 + src/add_widget_viewer/add_widget_viewer.c | 7 +- src/apps_data.c | 16 ++- src/apps_view.c | 41 ++++-- src/cluster_page.c | 50 ++++++- src/cluster_view.c | 164 +++++++++++++++++----- src/homescreen-efl.c | 6 +- src/widget_viewer.c | 26 +++- tizen-manifest.xml | 1 + 17 files changed, 276 insertions(+), 73 deletions(-) diff --git a/.sdk_delta.info b/.sdk_delta.info index a61d4ea30eae94fb9a07c7b6cb9fd3f1bb8ba377..6d039b28685338f98542abcd1b039be4fbe8ea3c 100644 GIT binary patch delta 5675 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 B8iW7< diff --git a/.sign/.manifest.tmp b/.sign/.manifest.tmp index 0d660b0..2dbae78 100644 --- a/.sign/.manifest.tmp +++ b/.sign/.manifest.tmp @@ -1,4 +1,4 @@ -bin/homescreen-efl__DEL__eTq3efsJy3ZZoKNlLaZ9YAEzn/s5GNn8Ld3OAWbZ6yw= +bin/homescreen-efl__DEL__ipNhMGA9YdCS9WORWvE96K43jMicxNCwjm21OChmqWk= res/edje/add_widget_viewer.edj__DEL__KaDoUUh0Qg+t+Cw1qHJXA6PUxIh2xuIQHnCu9OV4/hc= res/edje/app_icon.edj__DEL__Eu43j1+2+ea+oxjufrHtApUvLicZcONCnpZkQFMLZUs= res/edje/apps_chooser_btn.edj__DEL__pAJeOFkfFmGw5h4Uvur4s7KUUVSRScqAnG8rBBiF/b8= @@ -91,5 +91,5 @@ res/locale/zh_CN/LC_MESSAGES/homescreen-efl.mo__DEL__RIZ1KIFfGF2e+0IkBlDIut/N5Y8 res/locale/zh_HK/LC_MESSAGES/homescreen-efl.mo__DEL__XbmoPGvpjZD09qMkipbn/N/GNg/T74qcAmfZ09aTVIM= res/locale/zh_TW/LC_MESSAGES/homescreen-efl.mo__DEL__oV3fIhDtXRMBjVuLETwBwYVDwiCHWvpDVpgtektLlM4= shared/res/homescreen-efl.png__DEL__1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= -tizen-manifest.xml__DEL__HlwQmaFXgrNH4ygDj7kH+fT/9cUP7JE60jlK1v0pnlo= -author-signature.xml__DEL__qBw3ojaI9mHXmStXQqj6UheMnUNxYh2vLEsp1lW17ng= +tizen-manifest.xml__DEL__n71/oOsgirvYilXhpF4alQgL4lw91QqnbgS1i/ve70M= +author-signature.xml__DEL__X+8Jrm6O6fvHlWPM947dQtNm06dzUhr2o2QQvz8rbJQ= diff --git a/.sign/author-signature.xml b/.sign/author-signature.xml index 709ab03..a50129c 100644 --- a/.sign/author-signature.xml +++ b/.sign/author-signature.xml @@ -4,7 +4,7 @@ -eTq3efsJy3ZZoKNlLaZ9YAEzn/s5GNn8Ld3OAWbZ6yw= +ipNhMGA9YdCS9WORWvE96K43jMicxNCwjm21OChmqWk= @@ -376,7 +376,7 @@ -HlwQmaFXgrNH4ygDj7kH+fT/9cUP7JE60jlK1v0pnlo= +n71/oOsgirvYilXhpF4alQgL4lw91QqnbgS1i/ve70M= @@ -387,9 +387,9 @@ -d6OHq4Nq3I1jnehuAEg9cUpAahMi3ddhrop/NS3AuN9u7rKnllR3OJRcfkSRlFvodPyPVt2VhuhG -wCzgAvUvOxODuHCdT0lwoNrJ2GtVRNVHJAYsgv6zofvvRLmJ+d77w9XtMaehYx+1pKv7d/RL5CpB -OuqHAY2pFA7UkLpXyhE= +LdNqJQBfp75uvgHwUBy36Q1xSOuRaswzhY9hwJ4uAzb91/H5gUuZnLwV7PoN5mzki76xM0wEAOv1 +UGGHPcwWtYUTWMfUIyBWICNYmosRIgyymEJAodRwwywP4zixMgB5Da+CviFzED4J0I2Q2CtToSqQ +pAfWzwF451kqwNBXYRk= diff --git a/.sign/signature1.xml b/.sign/signature1.xml index bbd76b2..3c88678 100644 --- a/.sign/signature1.xml +++ b/.sign/signature1.xml @@ -4,11 +4,11 @@ -qBw3ojaI9mHXmStXQqj6UheMnUNxYh2vLEsp1lW17ng= +X+8Jrm6O6fvHlWPM947dQtNm06dzUhr2o2QQvz8rbJQ= -eTq3efsJy3ZZoKNlLaZ9YAEzn/s5GNn8Ld3OAWbZ6yw= +ipNhMGA9YdCS9WORWvE96K43jMicxNCwjm21OChmqWk= @@ -380,7 +380,7 @@ -HlwQmaFXgrNH4ygDj7kH+fT/9cUP7JE60jlK1v0pnlo= +n71/oOsgirvYilXhpF4alQgL4lw91QqnbgS1i/ve70M= @@ -391,9 +391,9 @@ -WBzVKlIahWHYeFKhjahxiS/GhfPjYxFRZclUVLelXGbJ9whOfFvUpzs0D13oLsjqYam+u/woz1An -T640+CIxwKcZpdnHeW10HRomDXuptNM2VY8PWHo0ZXeOW6i8cI4r8i1TRT8NDCzFokxTIOKLKB3k -APG31joACyxHygafuz0= +WsBEmp+6nWUTg/LhM0fltpiZ5Q/ZGaHwhGmQP//ULH+BJf507I8pyd0B1X5vW6BhWOH/FZg2nHFD +I9n0/kA45DpoLtEaJE2Hv/E76MjDrEMJVGZfTHP32OpVQ+rEpuTUlzBNaE6xPOiFbtFCHR5CjahX +MbklcMzpsOa10/2+kNY= diff --git a/inc/apps_data.h b/inc/apps_data.h index fb63dc5..0a6d0ec 100755 --- a/inc/apps_data.h +++ b/inc/apps_data.h @@ -61,5 +61,6 @@ void apps_data_update_folder(app_data_t *folder_item); void apps_data_delete_item(app_data_t *item); void apps_data_delete_list(Eina_List *list); app_data_t *apps_data_find_item_by_index(int index); +int apps_data_get_folder_item_count(app_data_t *folder); #endif /* __APPS_DATA_H__ */ diff --git a/inc/apps_view.h b/inc/apps_view.h index 27cb582..97aebf1 100755 --- a/inc/apps_view.h +++ b/inc/apps_view.h @@ -40,7 +40,7 @@ void apps_view_icon_unset(app_data_t *item); void apps_view_icon_add(app_data_t *item); void apps_view_hw_menu_key(void); -void apps_view_hw_home_key(void); +bool apps_view_hw_home_key(void); bool apps_view_hw_back_key(void); view_state_t apps_view_get_state(void); void apps_view_set_state(view_state_t state); diff --git a/inc/cluster_page.h b/inc/cluster_page.h index e04965f..2760527 100755 --- a/inc/cluster_page.h +++ b/inc/cluster_page.h @@ -42,9 +42,11 @@ bool cluster_page_set_widget(cluster_page_t *page, widget_data_t *item); bool cluster_page_unset(cluster_page_t *page, widget_data_t *item); bool cluster_page_check_empty_space(cluster_page_t *page, widget_size_type_e type, int pos_x, int pos_y, int *empty_x, int *empty_y); +void cluster_page_check_empty_space_pos(cluster_page_t *page, widget_data_t *item, int *out_x, int *out_y); Evas_Object *cluster_page_thumbnail(cluster_page_t *page); void cluster_page_drag_cancel(cluster_page_t *page); void cluster_page_drag_widget(cluster_page_t *page, widget_size_type_e type, int pos_x, int pos_y); bool cluster_page_drop_widget(cluster_page_t *page, widget_data_t *widget); +void cluster_page_get_highlight_xy(cluster_page_t *page, int *x, int *y); #endif /* __CLUSTER_VIEW_PAGE_H__ */ diff --git a/inc/cluster_view.h b/inc/cluster_view.h index 3b0ddcb..3e1f671 100755 --- a/inc/cluster_view.h +++ b/inc/cluster_view.h @@ -31,10 +31,10 @@ void cluster_view_show_anim(double pos); void cluster_view_hide_anim(double pos); void cluster_view_hw_menu_key(void); -void cluster_view_hw_home_key(void); +bool cluster_view_hw_home_key(void); bool cluster_view_hw_back_key(void); view_state_t cluster_view_get_state(void); -void cluster_view_set_state(view_state_t state); +bool cluster_view_set_state(view_state_t state); void cluster_view_delete_widget(widget_data_t *item); bool cluster_view_add_widget(widget_data_t *item, bool scroll); diff --git a/inc/conf.h b/inc/conf.h index 4ab597c..b3f1bef 100755 --- a/inc/conf.h +++ b/inc/conf.h @@ -79,6 +79,7 @@ extern int __conf_get_window_w(); #define CLUSTER_COL 4 #define CLUSTER_HOME_PAGE 0 #define CLUSTER_MAX_PAGE 6 +#define CLUSTER_VIEW_ALLPAGE_MOVE_GAP 10000 #define PAGE_INDICATOR_PADDING_BOTTON ((16) * (__conf_get_resolution_scale_h())) #define PAGE_INDICATOR_H ((76) * (__conf_get_resolution_scale_h())) diff --git a/src/add_widget_viewer/add_widget_viewer.c b/src/add_widget_viewer/add_widget_viewer.c index 42116d4..9485c72 100755 --- a/src/add_widget_viewer/add_widget_viewer.c +++ b/src/add_widget_viewer/add_widget_viewer.c @@ -571,9 +571,12 @@ static void __add_widget_viewer_preview_clicked_cb(void *data, Evas_Object *obj, return; } - cluster_data_insert_widget(widget->widget_id, widget->widget_id, *size); - + int type = *size; free(size); + char *widget_id = strdup(widget->widget_id); cluster_view_set_state(VIEW_STATE_NORMAL); + + cluster_data_insert_widget(widget_id, widget_id, type); + free(widget_id); } diff --git a/src/apps_data.c b/src/apps_data.c index 23fefb0..196cc74 100755 --- a/src/apps_data.c +++ b/src/apps_data.c @@ -29,7 +29,7 @@ static struct { .data_list = NULL }; -void __apps_data_print(Eina_List *list); +static void __apps_data_print(Eina_List *list); static int __apps_data_sort_cb(const void *a , const void *b); static void __apps_data_item_free(app_data_t *item); app_data_t *__apps_data_find_item(int db_id); @@ -359,7 +359,7 @@ static void __apps_data_item_free(app_data_t *item) free(item); } -void __apps_data_print(Eina_List *list) +static void __apps_data_print(Eina_List *list) { app_data_t *item = NULL; Eina_List *find_list; @@ -370,3 +370,15 @@ void __apps_data_print(Eina_List *list) } LOGD("========================================"); } + +int apps_data_get_folder_item_count(app_data_t *folder) +{ + int cnt = 0; + app_data_t *item = NULL; + Eina_List *find_list; + EINA_LIST_FOREACH(apps_data_s.data_list, find_list, item) { + if (item->parent_db_id == folder->db_id) + cnt += 1; + } + return cnt; +} diff --git a/src/apps_view.c b/src/apps_view.c index c1fdb02..30b91cc 100755 --- a/src/apps_view.c +++ b/src/apps_view.c @@ -704,16 +704,20 @@ static void __apps_view_icon_uninstall_btn_clicked_cb(void *data, Evas_Object *o LOGD("Uninstall :: %s", item->pkg_str); if (item->is_folder) { - Evas_Smart_Cb func[3] = { __apps_view_delete_folder_cb, NULL, NULL }; - void *data[3] = { item, NULL, NULL }; - char btn_text[3][STR_MAX] = { "", "", "" }; - char title_text[STR_MAX] = { "" }; - char popup_text[STR_MAX] = { "" }; - snprintf(btn_text[0], sizeof(btn_text[0]), "%s", _("IDS_ST_BUTTON_REMOVE_ABB2")); - snprintf(btn_text[1], sizeof(btn_text[1]), "%s", _("IDS_CAM_SK_CANCEL")); - snprintf(title_text, sizeof(title_text), "%s", _("IDS_HS_HEADER_REMOVE_FOLDER_ABB")); - snprintf(popup_text, sizeof(popup_text), "%s", _("IDS_HS_BODY_FOLDER_WILL_BE_REMOVED_APPLICATIONS_IN_THIS_FOLDER_WILL_NOT_BE_UNINSTALLED")); - popup_show(2, func, data, btn_text, title_text, popup_text); + if (apps_data_get_folder_item_count(item) > 0) { + Evas_Smart_Cb func[3] = { __apps_view_delete_folder_cb, NULL, NULL }; + void *data[3] = { item, NULL, NULL }; + char btn_text[3][STR_MAX] = { "", "", "" }; + char title_text[STR_MAX] = { "" }; + char popup_text[STR_MAX] = { "" }; + snprintf(btn_text[0], sizeof(btn_text[0]), "%s", _("IDS_ST_BUTTON_REMOVE_ABB2")); + snprintf(btn_text[1], sizeof(btn_text[1]), "%s", _("IDS_CAM_SK_CANCEL")); + snprintf(title_text, sizeof(title_text), "%s", _("IDS_HS_HEADER_REMOVE_FOLDER_ABB")); + snprintf(popup_text, sizeof(popup_text), "%s", _("IDS_HS_BODY_FOLDER_WILL_BE_REMOVED_APPLICATIONS_IN_THIS_FOLDER_WILL_NOT_BE_UNINSTALLED")); + popup_show(2, func, data, btn_text, title_text, popup_text); + } else { + apps_data_delete_folder(item); + } } else if (item->type >= APPS_DATA_TYPE_APP_SHORTCUT) { LOGD("Delete shortcut"); apps_data_delete_item(item); @@ -800,13 +804,15 @@ void apps_view_hw_menu_key(void) menu_change_state_on_hw_menu_key(apps_menu_table); } -void apps_view_hw_home_key(void) +bool apps_view_hw_home_key(void) { if (apps_view_s.opened_folder != NULL) { __apps_view_close_folder_popup(apps_view_s.opened_folder); } apps_view_set_state(VIEW_STATE_NORMAL); + + return false; } bool apps_view_hw_back_key(void) @@ -994,6 +1000,11 @@ void apps_view_icon_add(app_data_t *item) static void __apps_view_open_folder_popup(app_data_t *item) { + if (apps_view_s.animator != NULL) { + LOGE("apps_view_s.animator != NULL"); + return ; + } + char edj_path[PATH_MAX] = {0, }; snprintf(edj_path, sizeof(edj_path), "%s", util_get_res_file_path(EDJE_DIR"/apps_folder_popup.edj")); @@ -1061,8 +1072,12 @@ static Eina_Bool __apps_view_hide_folder_anim(void *data, double pos) static void __apps_view_close_folder_popup(app_data_t *item) { - if (apps_view_s.animator == NULL) - apps_view_s.animator = ecore_animator_timeline_add(HOME_FOLDR_ANIMATION_TIME, __apps_view_hide_folder_anim, NULL); + if (apps_view_s.animator != NULL) { + LOGE("apps_view_s.animator != NULL"); + return ; + } + + apps_view_s.animator = ecore_animator_timeline_add(HOME_FOLDR_ANIMATION_TIME, __apps_view_hide_folder_anim, NULL); } static void __apps_view_close_folder_popup_done(void) diff --git a/src/cluster_page.c b/src/cluster_page.c index 265f519..d0e97f7 100755 --- a/src/cluster_page.c +++ b/src/cluster_page.c @@ -147,6 +147,39 @@ bool cluster_page_check_empty_space(cluster_page_t *page, widget_size_type_e typ return false; } +void cluster_page_check_empty_space_pos(cluster_page_t *page, widget_data_t *item, int *out_x, int *out_y) +{ + int x, y; + *out_x = INIT_VALUE; + *out_y = INIT_VALUE; + + int gx, gy, w, h; + evas_object_geometry_get(page->grid, &gx, &gy, &w, &h); + if (cluster_page_check_empty_space(page, item->type, item->pos_x, item->pos_y, &x, &y)) { + *out_x = gx + x * (w / CLUSTER_COL); + *out_y = gy + y * (h / CLUSTER_ROW); + } else if (cluster_page_check_empty_space(page, item->type, INIT_VALUE, INIT_VALUE, &x, &y)) { + *out_x = gx + x * (w / CLUSTER_COL); + *out_y = gy + y * (h / CLUSTER_ROW); + } else { + *out_x = gx + item->pos_x * (w / CLUSTER_COL); + *out_y = gy + item->pos_y * (h / CLUSTER_ROW); + } +} + +void cluster_page_get_highlight_xy(cluster_page_t *page, int *x, int *y) +{ + int gx, gy, w, h; + evas_object_geometry_get(page->grid, &gx, &gy, &w, &h); + if (page->highlight_pos_x == INIT_VALUE || page->highlight_pos_y == INIT_VALUE) { + *x = INIT_VALUE; + *y = INIT_VALUE; + } else { + *x = gx + page->highlight_pos_x * (w / CLUSTER_COL); + *y = gy + page->highlight_pos_y * (h / CLUSTER_ROW); + } +} + void __cluster_page_set(cluster_page_t *page, widget_data_t *item) { int w, h; @@ -194,6 +227,8 @@ void cluster_page_drag_cancel(cluster_page_t *page) if (page->highlight) { evas_object_del(page->highlight); page->highlight = NULL; + page->highlight_pos_x = INIT_VALUE; + page->highlight_pos_y = INIT_VALUE; } } @@ -232,8 +267,18 @@ void cluster_page_drag_widget(cluster_page_t *page, widget_size_type_e type, int bool cluster_page_drop_widget(cluster_page_t *page, widget_data_t *widget) { - if (!page->highlight || page->highlight_pos_x == INIT_VALUE || page->highlight_pos_y == INIT_VALUE) + if (!page->highlight || page->highlight_pos_x == INIT_VALUE || page->highlight_pos_y == INIT_VALUE) { + int x, y; + if (cluster_page_check_empty_space(page, widget->type, widget->pos_x, widget->pos_y, &x, &y) || + cluster_page_check_empty_space(page, widget->type, INIT_VALUE, INIT_VALUE, &x, &y)) { + widget->page_idx = page->page_index; + widget->pos_x = x; + widget->pos_y = y; + __cluster_page_set(page, widget); + return true; + } return false; + } elm_grid_unpack(page->grid, page->highlight); evas_object_del(page->highlight); @@ -243,6 +288,9 @@ bool cluster_page_drop_widget(cluster_page_t *page, widget_data_t *widget) widget->pos_x = page->highlight_pos_x; widget->pos_y = page->highlight_pos_y; __cluster_page_set(page, widget); + + page->highlight_pos_x = INIT_VALUE; + page->highlight_pos_y = INIT_VALUE; return true; } diff --git a/src/cluster_view.c b/src/cluster_view.c index dd07a3c..5f6043a 100755 --- a/src/cluster_view.c +++ b/src/cluster_view.c @@ -46,6 +46,11 @@ static struct { widget_data_t *picked_widget; Ecore_Timer *edit_mode_scroll_timer; bool is_srolling; + Ecore_Animator *edit_animator; + int animation_from_x; + int animation_from_y; + int animation_to_x; + int animation_to_y; } cluster_view_s = { .scroller = NULL, .box = NULL, @@ -61,6 +66,11 @@ static struct { .picked_widget = NULL, .edit_mode_scroll_timer = NULL, .is_srolling = false, + .edit_animator = NULL, + .animation_from_x = INIT_VALUE, + .animation_from_y = INIT_VALUE, + .animation_to_x = INIT_VALUE, + .animation_to_y = INIT_VALUE, }; static int cluster_menu_list[4] = { @@ -128,10 +138,12 @@ static Eina_Bool __cluster_view_widget_long_press_time_cb(void *data); static void __cluster_view_edit_pick_up_widget(void *data); static void __cluster_view_edit_drag_widget(void *data); static void __cluster_view_edit_drop_widget(void *data); - +static Eina_Bool __cluster_view_edit_move_anim(void *data, double pos); +static void __cluster_view_edit_move_anim_done(void *data); static Eina_Bool __cluster_view_scroll_timer_cb(void *data); +static void __cluster_view_scroll_anim_start_cb(void *data, Evas_Object *obj, void *event_info); static void __cluster_view_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info); static void __cluster_view_allpage_get_page_pos(int page_idx, int *w, int *h); static int __cluster_view_allpage_get_page_index(int x, int y); @@ -218,6 +230,7 @@ Evas_Object *__cluster_view_create_base_gui(Evas_Object *win) evas_object_event_callback_add(cluster_view_s.scroller, EVAS_CALLBACK_MOUSE_UP, __clsuter_view_scroller_up_cb, NULL); evas_object_smart_callback_add(cluster_view_s.scroller, "scroll,anim,stop", __cluster_view_scroll_anim_stop_cb, NULL); + evas_object_smart_callback_add(cluster_view_s.scroller, "scroll,anim,start", __cluster_view_scroll_anim_start_cb, NULL); cluster_view_s.box = elm_box_add(cluster_view_s.scroller); elm_box_horizontal_set(cluster_view_s.box, EINA_TRUE); @@ -324,7 +337,7 @@ void cluster_view_hw_menu_key(void) menu_change_state_on_hw_menu_key(cluster_menu_table); } -void cluster_view_hw_home_key(void) +bool cluster_view_hw_home_key(void) { if (cluster_view_s.view_state == VIEW_STATE_NORMAL) { __cluster_view_scroll_to_home(); @@ -335,13 +348,13 @@ void cluster_view_hw_home_key(void) } else if (cluster_view_s.view_state == VIEW_STATE_ALL_PAGE) { cluster_view_set_state(VIEW_STATE_NORMAL); } + + return false; } bool cluster_view_hw_back_key(void) { - if (cluster_view_s.view_state == VIEW_STATE_NORMAL) { - return true; - } else if (cluster_view_s.view_state == VIEW_STATE_EDIT) { + if (cluster_view_s.view_state == VIEW_STATE_EDIT) { cluster_view_set_state(VIEW_STATE_NORMAL); } else if (cluster_view_s.view_state == VIEW_STATE_ADD_VIEWER) { cluster_view_set_state(VIEW_STATE_NORMAL); @@ -357,8 +370,19 @@ view_state_t cluster_view_get_state(void) return cluster_view_s.view_state; } -void cluster_view_set_state(view_state_t state) +bool cluster_view_set_state(view_state_t state) { + if (cluster_view_s.is_srolling) { + LOGE("cannot change view-state"); + return false; + } + + if (cluster_view_s.edit_animator) { + ecore_animator_del(cluster_view_s.edit_animator); + cluster_view_s.edit_animator = NULL; + __cluster_view_edit_move_anim_done(cluster_view_s.picked_widget); + } + if (state == VIEW_STATE_EDIT) { homescreen_efl_btn_hide(HOMESCREEN_VIEW_HOME); @@ -413,6 +437,7 @@ void cluster_view_set_state(view_state_t state) Eina_List *find_list = NULL; cluster_page_t *page_item = NULL; + elm_box_unpack_all(cluster_view_s.box); EINA_LIST_FOREACH(cluster_view_s.page_list, find_list, page_item) { if (page_item->page_layout) { elm_box_pack_end(cluster_view_s.box, page_item->page_layout); @@ -435,6 +460,8 @@ void cluster_view_set_state(view_state_t state) } cluster_view_s.view_state = state; + + return true; } bool cluster_view_add_widget(widget_data_t *item, bool scroll) @@ -454,7 +481,7 @@ bool cluster_view_add_widget(widget_data_t *item, bool scroll) cluster_page_t *page = (cluster_page_t *)eina_list_nth(cluster_view_s.page_list, page_idx); set_on = cluster_page_set_widget(page, item); - if (!set_on && !cluster_page_set_widget(page, item)) { + if (!set_on) { Eina_List *find_list = NULL; cluster_page_t *page_item = NULL; bool set_on = false; @@ -532,7 +559,6 @@ static void __cluster_view_scroll_to_home(void) static void __cluster_view_scroll_to_page(int page_idx, bool animation) { if (animation) { - cluster_view_s.is_srolling = true; elm_scroller_page_bring_in(cluster_view_s.scroller, page_idx, 0); } else { page_indicator_set_current_page(cluster_view_s.indicator, page_idx); @@ -677,27 +703,31 @@ static void __cluster_view_allpage_get_page_pos(int page_idx, int *w, int *h) static int __cluster_view_allpage_get_page_index(int x, int y) { - double row, col; - int int_row, int_col; - int start_y = 0; - int index = 0; + int idx = 0; + int sx = CLUSTER_ALL_PAGE_PADDING_SIDE; + int sy = 0; if (cluster_view_s.page_count < 2) { - start_y = (WINDOW_H - CLUSTER_ALL_PAGE_H) / 2; + sy = (WINDOW_H - CLUSTER_ALL_PAGE_H) / 2; } else if (cluster_view_s.page_count < 4) { - start_y = (WINDOW_H - (CLUSTER_ALL_PAGE_H * 2 + CLUSTER_ALL_PAGE_GAP_H)) / 2; + sy = (WINDOW_H - (CLUSTER_ALL_PAGE_H * 2 + CLUSTER_ALL_PAGE_GAP_H)) / 2; } else { - start_y = (WINDOW_H - (CLUSTER_ALL_PAGE_H * 3 + CLUSTER_ALL_PAGE_GAP_H * 2)) / 2; + sy = (WINDOW_H - (CLUSTER_ALL_PAGE_H * 3 + CLUSTER_ALL_PAGE_GAP_H * 2)) / 2; } - col = (double)(x - CLUSTER_ALL_PAGE_PADDING_SIDE) / (CLUSTER_ALL_PAGE_W + CLUSTER_ALL_PAGE_GAP_W); - int_col = (int)(col + 0.5); - row = (double)(y - start_y)/(CLUSTER_ALL_PAGE_H + CLUSTER_ALL_PAGE_GAP_H); - int_row = (int)(row + 0.5); - - if (((int_col - ALLPAGE_MOVE_GAP) < col && (int_col + ALLPAGE_MOVE_GAP) > col) && - ((int_row - ALLPAGE_MOVE_GAP) < row && (int_row + ALLPAGE_MOVE_GAP) > row)) { - index = int_row * 2 + int_col; - return index; + int w = CLUSTER_ALL_PAGE_W + CLUSTER_ALL_PAGE_GAP_W; + int h = CLUSTER_ALL_PAGE_H + CLUSTER_ALL_PAGE_GAP_H; + + for (idx=0; idx < cluster_view_s.page_count; idx++) { + int row = idx / 2; + int col = idx % 2; + int ny = sy + (row * h); + int nx = sx + (col * w); + + int d = (ny - y) * (ny - y) + (nx - x) * (nx - x); + if (d < CLUSTER_VIEW_ALLPAGE_MOVE_GAP) { + return (row * 2) + col; + } } + return INIT_VALUE; } @@ -766,6 +796,9 @@ static void __cluster_view_page_delete(cluster_page_t *page) static void __cluster_view_allpage_delete_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { + if (cluster_view_s.page_count <= 1) + return ; + cluster_page_t *page_item = (cluster_page_t *)data; if (eina_list_count(page_item->widget_list) > 0) { Evas_Smart_Cb func[3] = { __cluster_view_allpage_delete_page_cb, NULL, NULL }; @@ -1033,7 +1066,8 @@ static void __cluster_view_allpage_pick_up_page(void *data) static void __cluster_view_allpage_drop_page(void *data) { if (cluster_view_s.picked_page) { - elm_object_signal_emit(cluster_view_s.picked_page->thumbnail_ly, SIGNAL_ALLPAGE_DELETE_BUTTON_SHOW, SIGNAL_SOURCE); + if (cluster_view_s.page_count > 1) + elm_object_signal_emit(cluster_view_s.picked_page->thumbnail_ly, SIGNAL_ALLPAGE_DELETE_BUTTON_SHOW, SIGNAL_SOURCE); elm_object_signal_emit(cluster_view_s.picked_page->thumbnail_ly, SIGNAL_ALLPAGE_DRAG_BG_HIDE, SIGNAL_SOURCE); int x, y; @@ -1043,6 +1077,16 @@ static void __cluster_view_allpage_drop_page(void *data) } cluster_view_s.page_list = eina_list_sort(cluster_view_s.page_list, eina_list_count(cluster_view_s.page_list), __cluster_view_page_sort_cb); + + Eina_List *find_list = NULL, *widget_list = NULL; + cluster_page_t *page_item = NULL; + widget_data_t *widget_item = NULL; + EINA_LIST_FOREACH(cluster_view_s.page_list, find_list, page_item) { + EINA_LIST_FOREACH(page_item->widget_list, widget_list, widget_item) { + widget_item->page_idx = page_item->page_index; + cluster_data_update(widget_item); + } + } } static void __clsuter_view_widget_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) @@ -1050,6 +1094,11 @@ static void __clsuter_view_widget_down_cb(void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down* ev = event_info; LOGD("DOWN: (%d,%d)", ev->output.x, ev->output.y); + if (cluster_view_s.edit_animator) { + LOGE("edit animator is running"); + return ; + } + cluster_mouse_info.pressed = true; cluster_mouse_info.pressed_obj = obj; @@ -1093,8 +1142,6 @@ static void __clsuter_view_widget_up_cb(void *data, Evas *e, Evas_Object *obj, v if (cluster_view_s.picked_widget) { __cluster_view_edit_drop_widget(data); - - cluster_view_s.picked_widget = NULL; } } @@ -1228,20 +1275,63 @@ static void __cluster_view_edit_drag_widget(void *data) static void __cluster_view_edit_drop_widget(void *data) { - Evas_Object *widget_layout = cluster_view_s.picked_widget->widget_layout; - elm_object_signal_emit(widget_layout, SIGNAL_DELETE_BUTTON_SHOW_ANI, SIGNAL_SOURCE); - elm_object_signal_emit(widget_layout, SIGNAL_CLUSTER_EDIT_STATE, SIGNAL_SOURCE); - if (cluster_view_s.edit_mode_scroll_timer) { ecore_timer_del(cluster_view_s.edit_mode_scroll_timer); cluster_view_s.edit_mode_scroll_timer = NULL; } + if (cluster_view_s.edit_animator) { + ecore_animator_del(cluster_view_s.edit_animator); + cluster_view_s.edit_animator = NULL; + } + + int to_x, to_y; + cluster_view_s.animation_from_x = cluster_mouse_info.move_x - cluster_mouse_info.offset_x; + cluster_view_s.animation_from_y = cluster_mouse_info.move_y - cluster_mouse_info.offset_y; + + cluster_page_t *page = (cluster_page_t *)eina_list_nth(cluster_view_s.page_list, cluster_view_s.current_page); + cluster_page_get_highlight_xy(page, &to_x, &to_y); + if (to_x == INIT_VALUE || to_y == INIT_VALUE) { + cluster_page_check_empty_space_pos(page, cluster_view_s.picked_widget, &to_x, &to_y); + } + + cluster_view_s.animation_to_x = to_x; + cluster_view_s.animation_to_y = to_y; + + cluster_view_s.edit_animator = ecore_animator_timeline_add(HOME_ANIMATION_TIME, __cluster_view_edit_move_anim, NULL); +} +static Eina_Bool __cluster_view_edit_move_anim(void *data, double pos) +{ + evas_object_move(cluster_view_s.picked_widget->widget_layout, + (cluster_view_s.animation_to_x - cluster_view_s.animation_from_x) * pos + cluster_view_s.animation_from_x, + (cluster_view_s.animation_to_y - cluster_view_s.animation_from_y) * pos + cluster_view_s.animation_from_y); + + if (pos >= 1.0 - (1e-10)) { + __cluster_view_edit_move_anim_done(data); + + cluster_view_s.edit_animator = NULL; + return ECORE_CALLBACK_DONE; + } + + return ECORE_CALLBACK_RENEW; +} + +static void __cluster_view_edit_move_anim_done(void *data) +{ + Evas_Object *widget_layout = cluster_view_s.picked_widget->widget_layout; + elm_object_signal_emit(widget_layout, SIGNAL_DELETE_BUTTON_SHOW_ANI, SIGNAL_SOURCE); + elm_object_signal_emit(widget_layout, SIGNAL_CLUSTER_EDIT_STATE, SIGNAL_SOURCE); + cluster_page_t *page = (cluster_page_t *)eina_list_nth(cluster_view_s.page_list, cluster_view_s.current_page); if (!cluster_page_drop_widget(page, cluster_view_s.picked_widget)) { - cluster_view_add_widget(cluster_view_s.picked_widget, false); + cluster_view_s.current_page = cluster_view_s.picked_widget->page_idx; + __cluster_view_scroll_to_page(cluster_view_s.current_page, true); + + cluster_view_add_widget(cluster_view_s.picked_widget, true); } + + cluster_view_s.picked_widget = NULL; } static void __clsuter_view_scroller_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) @@ -1251,6 +1341,11 @@ static void __clsuter_view_scroller_down_cb(void *data, Evas *e, Evas_Object *ob if (cluster_view_s.view_state != VIEW_STATE_NORMAL) return ; + if (cluster_view_s.edit_animator) { + LOGE("edit animator is running"); + return ; + } + LOGD("DOWN: (%d,%d)", ev->output.x, ev->output.y); cluster_mouse_info.pressed = true; @@ -1328,6 +1423,10 @@ static Eina_Bool __cluster_view_scroller_long_press_time_cb(void *data) return ECORE_CALLBACK_CANCEL; } +static void __cluster_view_scroll_anim_start_cb(void *data, Evas_Object *obj, void *event_info) +{ + cluster_view_s.is_srolling = true; +} static void __cluster_view_scroll_anim_stop_cb(void *data, Evas_Object *obj, void *event_info) { @@ -1353,4 +1452,3 @@ static Eina_Bool __cluster_view_scroll_timer_cb(void *data) __cluster_view_scroll_to_page(next_page_idx, true); return ECORE_CALLBACK_RENEW; } - diff --git a/src/homescreen-efl.c b/src/homescreen-efl.c index 5f4fc9c..38dc3dd 100755 --- a/src/homescreen-efl.c +++ b/src/homescreen-efl.c @@ -50,7 +50,7 @@ static struct { .root_width = 0, .root_height = 0, .view_type = HOMESCREEN_VIEW_HOME, - .animator = NULL + .animator = NULL, }; static void __homescreen_efl_get_window_size(Evas_Object *win); @@ -340,8 +340,8 @@ void homescreen_efl_hw_home_key_release(void) if (main_info.view_type == HOMESCREEN_VIEW_HOME) { cluster_view_hw_home_key(); } else if (main_info.view_type == HOMESCREEN_VIEW_APPS) { - apps_view_hw_home_key(); - __homescreen_efl_change_view(); + if (apps_view_hw_home_key() == false) + __homescreen_efl_change_view(); } } diff --git a/src/widget_viewer.c b/src/widget_viewer.c index df8f64e..1dcf348 100755 --- a/src/widget_viewer.c +++ b/src/widget_viewer.c @@ -20,6 +20,16 @@ #include "conf.h" #include "edc_conf.h" +//#define _TEST_ +#ifdef _TEST_ +static Eina_Bool __widget_viewer_test_timer_cb(void *data) +{ + Evas_Object *widget = (Evas_Object*) data; + evas_object_color_set(widget, rand()%255, rand()%255, rand()%255, 100); + return ECORE_CALLBACK_RENEW; +} +static int count = 0; +#endif static void __widget_viewer_delete_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); void widget_viewer_init(Evas_Object *win) @@ -49,17 +59,29 @@ Evas_Object *widget_viewer_add_widget(Evas_Object *parent, widget_data_t *item, evas_object_show(rect); elm_object_part_content_set(widget_layout, SIZE_SETTER, rect); -#if 1 +#ifndef _TEST_ Evas_Object *widget = widget_viewer_evas_add_widget(widget_layout, item->pkg_name, NULL, item->period); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(widget, 255, 255, 255, 255); #else // for TEST - Evas_Object *widget = evas_object_rectangle_add(evas_object_evas_get(widget_layout)); +/* Evas_Object *widget = evas_object_rectangle_add(evas_object_evas_get(widget_layout)); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(widget, 0, 0, 255, 100); evas_object_show(widget); +*/ + char number[1000]; + sprintf(number, "%s_%d", item->pkg_name, count++); + Evas_Object *widget = elm_label_add(evas_object_evas_get(widget_layout)); + elm_object_style_set(widget, "popup/default"); + evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(widget, number); + evas_object_color_set(widget, 0, 0, 255, 100); + evas_object_show(widget); + + Ecore_Timer *timer = ecore_timer_add(1, __widget_viewer_test_timer_cb, widget); #endif elm_object_part_content_set(widget_layout, WIDGET_CONTENT, widget); diff --git a/tizen-manifest.xml b/tizen-manifest.xml index 03aa533..6e9472f 100755 --- a/tizen-manifest.xml +++ b/tizen-manifest.xml @@ -13,6 +13,7 @@ http://tizen.org/privilege/appmanager.launch http://tizen.org/privilege/packagemanager.admin http://tizen.org/privilege/shortcut + http://tizen.org/privilege/notification http://tizen.org/privilege/packagemanager.info http://tizen.org/privilege/widget.viewer -- 2.34.1