add show/hide effect prototyping
authorHyoyoung Chang <hyoyoung.chang@samsung.com>
Sat, 22 Jan 2011 03:32:22 +0000 (12:32 +0900)
committerHyoyoung Chang <hyoyoung.chang@samsung.com>
Sat, 22 Jan 2011 03:32:22 +0000 (12:32 +0900)
src/cbhm_main.c
src/cbhm_main.h
src/clipdrawer.c

index ab308a4..0eb937c 100644 (file)
@@ -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);
                }
        }
 
index 2784754..525e9ae 100755 (executable)
 #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;
 };
 
index 708110e..65ff0ee 100644 (file)
@@ -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);
        }