quickpanel: adjust slide effect when quickpanel requests to show/hide its surface. 96/57896/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 25 Jan 2016 23:45:56 +0000 (08:45 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Mon, 25 Jan 2016 23:45:56 +0000 (08:45 +0900)
Change-Id: I99c74897779e6de1826db769af9da1a65f2f5f8a

src/e_mod_quickpanel.c

index c518b34..15e22df 100644 (file)
@@ -43,6 +43,7 @@ struct _Mover_Data
    Evas_Object *handler_mirror_obj; // quickpanel handler mirror object
    Evas_Object *base_clip; // clipper for quickapnel base object
    Evas_Object *handler_clip; // clipper for quickpanel handler object
+   Evas_Object *handler_obj;
 
    Eina_Bool    qp_layout_init: 1;
 
@@ -172,6 +173,9 @@ _quickpanel_smart_del(Evas_Object *obj)
 
    if (md->qp_layout_obj) evas_object_del(md->qp_layout_obj);
 
+   if (md->handler_obj)
+     evas_object_data_del(md->handler_obj, QP_DATA_KEY);
+
    evas_object_color_set(ec->frame, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity);
    evas_object_data_del(ec->frame, QP_DATA_KEY);
 
@@ -261,7 +265,7 @@ _quickpanel_mover_handler_move(Mover_Data *md, int x, int y)
 }
 
 static Evas_Object *
-_quickpanel_mover_begin(E_Client *ec, int x, int y, unsigned int timestamp)
+_quickpanel_mover_begin(E_Client *ec, Evas_Object *handler, int x, int y, unsigned int timestamp)
 {
    Evas_Object *mover;
    Mover_Data *md;
@@ -281,6 +285,7 @@ _quickpanel_mover_begin(E_Client *ec, int x, int y, unsigned int timestamp)
 
    md = evas_object_smart_data_get(mover);
    md->ec = ec;
+   md->handler_obj = handler;
    md->handler_geo.w = _pol_quickpanel->handler.rect.w;
    md->handler_geo.h = _pol_quickpanel->handler.rect.h;
    md->effect_info.y = y;
@@ -595,7 +600,7 @@ _quickpanel_handler_cb_gesture_start(void *data EINA_UNUSED, Evas_Object *handle
         _quickpanel_mover_free(mover);
      }
 
-   mover = _quickpanel_mover_begin(QP_EC, 0, y, timestamp);
+   mover = _quickpanel_mover_begin(QP_EC, handler, 0, y, timestamp);
    if (!mover)
      return;
 
@@ -754,18 +759,48 @@ e_mod_quickpanel_handler_region_set(int x, int y, int w, int h)
    return EINA_TRUE;
 }
 
-EINTERN void
-e_mod_quickpanel_show(void)
+static void
+_quickpanel_visibility_change(Eina_Bool visibility, Eina_Bool with_effect)
 {
    Evas_Object *mover;
-
-   EINA_SAFETY_ON_NULL_RETURN(_pol_quickpanel);
+   Mover_Data *md;
+   int from_y;
 
    mover = evas_object_data_get(QP_EC->frame, QP_DATA_KEY);
-   if (mover)
-     _quickpanel_mover_free(mover);
 
-   evas_object_move(QP_EC->frame, 0, 0);
+   if (with_effect)
+     {
+        if (mover)
+          {
+             md = evas_object_smart_data_get(mover);
+             from_y = md->handler_geo.y;
+          }
+        else
+          {
+             from_y = visibility ? 0 : QP_EC->zone->h;
+             mover = _quickpanel_mover_begin(QP_EC, NULL, 0, from_y, 0);
+          }
+
+        _quickpanel_mover_effect_begin(mover, from_y, visibility);
+     }
+   else
+     {
+        if (mover)
+          _quickpanel_mover_free(mover);
+
+        if (visibility)
+          evas_object_move(QP_EC->frame, 0, 0);
+        else
+          evas_object_move(QP_EC->frame, -10000, -10000);
+     }
+}
+
+EINTERN void
+e_mod_quickpanel_show(void)
+{
+   EINA_SAFETY_ON_NULL_RETURN(_pol_quickpanel);
+
+   _quickpanel_visibility_change(EINA_TRUE, EINA_TRUE);
 }
 
 EINTERN void
@@ -775,9 +810,5 @@ e_mod_quickpanel_hide(void)
 
    EINA_SAFETY_ON_NULL_RETURN(_pol_quickpanel);
 
-   mover = evas_object_data_get(QP_EC->frame, QP_DATA_KEY);
-   if (mover)
-     _quickpanel_mover_free(mover);
-
-   evas_object_move(QP_EC->frame, -10000, -10000);
+   _quickpanel_visibility_change(EINA_FALSE, EINA_TRUE);
 }