From b909286b1067ceaa5424463bf5a22c53bcba2498 Mon Sep 17 00:00:00 2001 From: Hyoyoung Chang Date: Sat, 22 Jan 2011 12:32:22 +0900 Subject: [PATCH] add show/hide effect prototyping --- src/cbhm_main.c | 19 +++++++++++ src/cbhm_main.h | 12 ++++++- src/clipdrawer.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 125 insertions(+), 2 deletions(-) diff --git a/src/cbhm_main.c b/src/cbhm_main.c index ab308a4..0eb937c 100644 --- a/src/cbhm_main.c +++ b/src/cbhm_main.c @@ -74,6 +74,22 @@ int init_appview(void *data) return 0; } +void disable_focus_for_app_window (Evas_Object *win) +{ + Eina_Bool accepts_focus; + Ecore_X_Window_State_Hint initial_state; + Ecore_X_Pixmap icon_pixmap; + Ecore_X_Pixmap icon_mask; + Ecore_X_Window icon_window; + Ecore_X_Window window_group; + Eina_Bool is_urgent; + + ecore_x_icccm_hints_get (elm_win_xwindow_get (win), + &accepts_focus, &initial_state, &icon_pixmap, &icon_mask, &icon_window, &window_group, &is_urgent); + ecore_x_icccm_hints_set (elm_win_xwindow_get (win), + 0, initial_state, icon_pixmap, icon_mask, icon_window, window_group, is_urgent); +} + static Evas_Object* create_win(void *data, const char *name) { struct appdata *ad = (struct appdata *) data; @@ -94,6 +110,9 @@ static Evas_Object* create_win(void *data, const char *name) { //disable window effect utilx_set_window_effect_state(dpy, elm_win_xwindow_get(eo), 0); ecore_x_icccm_name_class_set(elm_win_xwindow_get(eo), "NORMAL_WINDOW", "NORMAL_WINDOW"); +// elm_win_keyboard_win_set (eo, EINA_TRUE); +// ecore_x_icccm_name_class_set(elm_win_xwindow_get(eo), "Virtual Keyboard", "ISF"); +// disable_focus_for_app_window(eo); } } diff --git a/src/cbhm_main.h b/src/cbhm_main.h index 2784754..525e9ae 100755 --- a/src/cbhm_main.h +++ b/src/cbhm_main.h @@ -10,6 +10,15 @@ #define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj" #define GRP_MAIN "cbhmdrawer" +typedef enum _anim_status_t +{ + STATUS_NONE = 0, + SHOW_ANIM, + HIDE_ANIM, + + STATUS_MAX +} anim_status_t; + struct appdata { int root_w; @@ -20,7 +29,8 @@ struct appdata /* add more variables here */ Evas_Object *hig; // history item gengrid unsigned int hicount; // history item count - Evas_Object *txtlist; + Evas_Object *txtlist; + anim_status_t anim_status; Eina_Bool pastetextonly; }; diff --git a/src/clipdrawer.c b/src/clipdrawer.c index 708110e..65ff0ee 100644 --- a/src/clipdrawer.c +++ b/src/clipdrawer.c @@ -408,6 +408,7 @@ int clipdrawer_init(void *data) ad->hicount = 0; ad->pastetextonly = EINA_TRUE; + ad->anim_status = STATUS_NONE; // for elm_check elm_theme_extension_add(NULL, APP_EDJ_FILE); @@ -480,11 +481,102 @@ int clipdrawer_create_view(void *data) // for debug // at starting, showing app view - // clipdrawer_activate_view(ad); +// clipdrawer_activate_view(ad); + +// clipdrawer_anim_show_effect(ad); return 0; } +Ecore_Timer *tm_anim; + +Eina_Bool anim_pos_calc_cb(void *data) +{ + struct appdata *ad = data; + + static int anim_count = 0; + static int anim_end = 120; + int anim_starty, anim_endy, deltay; +// if (anim_count == 0) +// { + switch (ad->anim_status) + { + case HIDE_ANIM: + anim_starty = (int)((1.0*CLIPDRAWER_HEIGHT/SCREEN_HEIGHT)*ad->root_h); + anim_endy = ad->root_h; + anim_starty = anim_endy - anim_starty; + break; + case SHOW_ANIM: + anim_starty = ad->root_h; + anim_endy = (int)((1.0*CLIPDRAWER_HEIGHT/SCREEN_HEIGHT)*ad->root_h); + anim_endy = anim_starty-anim_endy; + break; + default: + return EINA_FALSE; + } + +// } + + double posprop = 1.0*anim_count/anim_end; + if (ad->anim_status == HIDE_ANIM) + deltay = (int)((anim_endy-anim_starty)*posprop); + else + deltay = (int)((anim_starty-anim_endy)*posprop); + + if (anim_count > anim_end) + { + anim_count = 0; + ad->anim_status = STATUS_NONE; + if (ad->anim_status == HIDE_ANIM) + { + evas_object_hide(ad->win_main); + elm_win_lower(ad->win_main); + } + return EINA_FALSE; + } + + if (ad->anim_status == HIDE_ANIM) + evas_object_move(ad->win_main, 0, anim_starty+deltay); + else + evas_object_move(ad->win_main, 0, anim_starty-deltay); + anim_count++; + + if (ad->anim_status == HIDE_ANIM) + fprintf(stderr, "## cur pos y = %d\n", anim_starty+deltay); + else + fprintf(stderr, "## cur pos y = %d\n", anim_starty-deltay); + + return EINA_TRUE; +} + +void clipdrawer_anim_show_effect(void *data) +{ + struct appdata *ad = data; + + if (ad->anim_status != STATUS_NONE) + { + DTRACE("ERR: another animation is showing\n"); + return; + } + + ad->anim_status = SHOW_ANIM; + ecore_timer_add(1.0/60, anim_pos_calc_cb, ad); +} + +void clipdrawer_anim_hide_effect(void *data) +{ + struct appdata *ad = data; + + if (ad->anim_status != STATUS_NONE) + { + DTRACE("ERR: another animation is showing\n"); + return; + } + + ad->anim_status = HIDE_ANIM; + ecore_timer_add(1.0/60, anim_pos_calc_cb, ad); +} + void clipdrawer_activate_view(void *data) { struct appdata *ad = data; @@ -493,6 +585,7 @@ void clipdrawer_activate_view(void *data) { set_transient_for(ad); evas_object_show(ad->win_main); +// clipdrawer_anim_show_effect(ad); elm_win_activate(ad->win_main); } } @@ -504,6 +597,7 @@ void clipdrawer_lower_view(void *data) if (ad->win_main) { unset_transient_for(ad); +// clipdrawer_anim_hide_effect(ad); evas_object_hide(ad->win_main); elm_win_lower(ad->win_main); } -- 2.7.4