toolbar: delay evaluation of the toolbar size until it stabilize.
authorCedric BAIL <cedric@osg.samsung.com>
Thu, 15 Oct 2015 23:33:15 +0000 (16:33 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Thu, 15 Oct 2015 23:38:24 +0000 (16:38 -0700)
Elementary is not using much the calculate callback from Evas. This
create all sort of problem where it transform O(n) algorithm. Like
sizing a toolbar for next frame to O(n^n) by actually sizing the
toolbar every time an object is inserted.

T2777

src/lib/elm_toolbar.c
src/lib/elm_toolbar.eo

index e93c552a6d25a4d36061e2ebd8c7cd4fa7432326..d5239479012e56b2f7a6819ad658267a3db57da9 100644 (file)
@@ -1304,7 +1304,7 @@ _item_theme_hook(Evas_Object *obj,
            (VIEW(it), EVAS_HINT_FILL, EVAS_HINT_FILL);
       }
     _resizing_eval_item(it);
-    _sizing_eval(obj);
+    evas_object_smart_need_recalculate_set(obj, EINA_TRUE);
 }
 
 static void
@@ -1475,7 +1475,7 @@ _elm_toolbar_elm_widget_theme_apply(Eo *obj, Elm_Toolbar_Data *sd)
      _item_theme_hook(obj, sd->more_item, scale, sd->icon_size);
 
    _elm_toolbar_highlight_in_theme(obj);
-   _sizing_eval(obj);
+   evas_object_smart_need_recalculate_set(obj, EINA_TRUE);
 
    return EINA_TRUE;
 }
@@ -1659,9 +1659,8 @@ _item_resize(void *data,
              Evas_Object *obj EINA_UNUSED,
              void *event_info EINA_UNUSED)
 {
-   _sizing_eval(data);
+   evas_object_smart_need_recalculate_set(data, EINA_TRUE);
    _resizing_eval(data);
-
 }
 
 static void
@@ -3360,7 +3359,7 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M
       eo_do(obj, elm_interface_scrollable_policy_set
             (ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF));
 
-   _sizing_eval(obj);
+   evas_object_smart_need_recalculate_set(obj, EINA_TRUE);
 }
 
 EOLIAN static Elm_Toolbar_Shrink_Mode
@@ -3958,5 +3957,12 @@ _elm_toolbar_elm_interface_atspi_selection_child_deselect(Eo *obj EINA_UNUSED, E
    return EINA_FALSE;
 }
 
+EOLIAN void
+_elm_toolbar_evas_object_smart_calculate(Eo *obj, Elm_Toolbar_Data *pd)
+{
+   _sizing_eval(obj);
+}
+
+
 #include "elm_toolbar.eo.c"
 #include "elm_toolbar_item.eo.c"
index 3069c033825498b7e9e8e6a20a65486240654138..25e6034bca70d3baaad42f90a9d02a31764f4971 100644 (file)
@@ -359,6 +359,7 @@ class Elm.Toolbar (Elm.Widget, Elm_Interface_Scrollable,
    implements {
       class.constructor;
       Eo.Base.constructor;
+      Evas.Object_Smart.calculate;
       Evas.Object_Smart.move;
       Evas.Object_Smart.add;
       Evas.Object_Smart.del;