[elm_genlist] add zoom effect while item is added or deleted.
[framework/uifw/elementary.git] / src / lib / elm_genlist.c
index 724ea61..616dd88 100644 (file)
@@ -22,7 +22,8 @@ EAPI const char ELM_GENLIST_PAN_SMART_NAME[] = "elm_genlist_pan";
 #define GL_IT(_it) (_it->item)
 
 #define IS_ROOT_PARENT_IT(_it) \
-   ((_it->group) || (GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0)) \
+   ((_it->group) || ((GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0)  \
+                      &&(!(GL_IT(_it)->type & ELM_GENLIST_ITEM_TREE)))) \
 
 static const Evas_Smart_Interface *_smart_interfaces[] =
 {
@@ -153,7 +154,7 @@ static void _changed_job(Elm_Genlist_Smart_Data *sd);
 #if GENLIST_FX_SUPPORT
 static Eina_Bool      _elm_genlist_fx_capture(Evas_Object *obj, int level);
 static void           _elm_genlist_fx_play(Evas_Object *obj);
-static void           _elm_genlist_fx_clear(Evas_Object *obj);
+static void           _elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force);
 static void           _elm_genlist_proxy_item_del(const Elm_Object_Item *item);
 #endif
 
@@ -1085,28 +1086,8 @@ _item_mode_content_realize(Elm_Gen_Item *it,
                        // 1. Add resize callback for multiline entry.
                        // 2. Do not unrealize it for focus issue
                        // ps. Only for entry because of performnace
-                       if (!strcmp("elm_layout", evas_object_type_get(ic)))
-                         {
-                            // If editfield style, it can have entry.
-                            const char *group;
-                            edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
-                            if (group && !strncmp("elm/layout/editfield/", group, 20))
-                              {
-                                 Eina_List *ll;
-                                 Evas_Object *subobj;
-                                 Eina_List *subobjs = elm_widget_sub_object_list_get(ic);
-                                 EINA_LIST_FOREACH(subobjs, ll, subobj)
-                                   {
-                                      if (!strcmp("elm_entry", evas_object_type_get(subobj)) &&
-                                          !elm_entry_single_line_get(subobj))
-                                        it->item->unrealize_disabled = EINA_TRUE;
-                                   }
-                              }
-                         }
-                       else if (!strcmp("elm_entry", evas_object_type_get(ic)) &&
-                                !elm_entry_single_line_get(ic))
-                          it->item->unrealize_disabled = EINA_TRUE;
-
+                       if (!strcmp("elm_entry", evas_object_type_get(ic)))
+                         it->item->unrealize_disabled = EINA_TRUE;
                     }
 #endif
 #if 0
@@ -1388,30 +1369,12 @@ _item_content_realize(Elm_Gen_Item *it,
                   // 1. Add resize callback for multiline entry.
                   // 2. Do not unrealize it for focus issue
                   // ps. Only for entry because of performnace
-                  if (!strcmp("elm_layout", evas_object_type_get(ic)))
+                  if (!strcmp("elm_entry", evas_object_type_get(ic)))
                     {
-                       // If editfield style, it can have entry.
-                       const char *group;
-                       edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
-                       if (group && !strncmp("elm/layout/editfield/", group, 20))
-                         {
-                            Eina_List *ll;
-                            Evas_Object *subobj;
-                            Eina_List *subobjs = elm_widget_sub_object_list_get(ic);
-                            EINA_LIST_FOREACH(subobjs, ll, subobj)
-                              {
-                                 if (!strcmp("elm_entry", evas_object_type_get(subobj)) &&
-                                     !elm_entry_single_line_get(subobj))
-                                    it->item->unrealize_disabled = EINA_TRUE;
-                              }
-                         }
-                    }
-                  else if (!strcmp("elm_entry", evas_object_type_get(ic)) &&
-                           !elm_entry_single_line_get(ic))
-                    {
-                       evas_object_event_callback_add
-                          (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                           _changed_size_hints, it);
+                       if (!elm_entry_single_line_get(ic))
+                         evas_object_event_callback_add
+                            (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                             _changed_size_hints, it);
                        it->item->unrealize_disabled = EINA_TRUE;
                     }
 #endif
@@ -2188,7 +2151,7 @@ _elm_genlist_pan_smart_calculate(Evas_Object *obj)
 #if GROUP_ITEMS_FEATURE
        git->item->want_realize = EINA_FALSE;
 #else
-       _item_unrealize(git, EINA_TRUE);
+       evas_object_hide(VIEW(git));
 #endif
     }
 
@@ -3968,8 +3931,7 @@ _item_idle_enterer(void *data)
      }
 
 #if GENLIST_FX_SUPPORT
-   if (sd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
+   _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
 #endif
    return ECORE_CALLBACK_RENEW;
 }
@@ -4452,6 +4414,9 @@ static void
 _scroll_animate_start_cb(Evas_Object *obj,
                          void *data __UNUSED__)
 {
+#if GENLIST_FX_SUPPORT
+   _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
    evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_START, NULL);
 }
 
@@ -4459,6 +4424,9 @@ static void
 _scroll_animate_stop_cb(Evas_Object *obj,
                         void *data __UNUSED__)
 {
+#if GENLIST_FX_SUPPORT
+   _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
    evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_STOP, NULL);
 }
 
@@ -5478,7 +5446,7 @@ elm_genlist_item_sorted_insert(Evas_Object *obj,
 }
 
 static void
-_elm_genlist_fx_clear(Evas_Object *obj)
+_elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force)
 {
    ELM_GENLIST_DATA_GET(obj, sd);
 
@@ -5486,6 +5454,8 @@ _elm_genlist_fx_clear(Evas_Object *obj)
    Proxy_Item *pi;
    Elm_Gen_Item *it;
 
+   if ((!force) && (!sd->fx_first_captured)) return;
+
    EINA_LIST_FREE(sd->capture_before_items, pi)
      {
         if ((pi->it) && (GL_IT(pi->it))) GL_IT(pi->it)->has_proxy_it = EINA_FALSE;
@@ -5546,7 +5516,7 @@ elm_genlist_clear(Evas_Object *obj)
 #if GENLIST_FX_SUPPORT
    if (sd->fx_mode)
      {
-        _elm_genlist_fx_clear(obj);
+        _elm_genlist_fx_clear(obj, EINA_TRUE);
         sd->genlist_clearing = EINA_TRUE;
         sd->rendered = EINA_FALSE;
      }
@@ -6082,8 +6052,7 @@ elm_genlist_item_update(Elm_Object_Item *item)
 #endif
 
 #if GENLIST_FX_SUPPORT
-   if (GL_IT(it)->wsd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj);
+     _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj, EINA_FALSE);
 #endif
 
    if (GL_IT(it)->wsd->update_job) ecore_job_del(GL_IT(it)->wsd->update_job);
@@ -6654,9 +6623,7 @@ elm_genlist_decorate_mode_set(Evas_Object *obj,
           }
      }
 #if GENLIST_FX_SUPPORT
-   if (sd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
-
+     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
 #endif
    if (sd->calc_job) ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, sd);
@@ -7507,7 +7474,7 @@ _elm_genlist_fx_play(Evas_Object *obj)
    _elm_genlist_fx_items_make(obj);
    if (!eina_list_count(sd->fx_items) || (sd->queue))
      {
-        _elm_genlist_fx_clear(obj);
+        _elm_genlist_fx_clear(obj, EINA_TRUE);
         return;
      }
 
@@ -7566,11 +7533,16 @@ _elm_genlist_fx_play(Evas_Object *obj)
           {
              elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
              elm_transit_effect_color_add(fi->trans, 0, 0, 0, 0, 255, 255, 255, 255);
+             if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+               elm_transit_effect_zoom_add(fi->trans, 0.8, 1.0);
           }
         else if (fi->type == ELM_GEN_ITEM_FX_TYPE_DEL)
           {
+             _item_unhighlight(fi->it);
              elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
              elm_transit_effect_color_add(fi->trans, 255, 255, 255, 255, 0, 0, 0, 0);
+             if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+               elm_transit_effect_zoom_add(fi->trans, 1.0, 0.8);
           }
         elm_transit_effect_add(fi->trans, _item_fx_op, fi, _item_fx_done);
         elm_transit_del_cb_set(fi->trans, _item_fx_del_cb, fi);