From acb9ae70fe7832b0c3a08fb3f316a9630405bc49 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 17 Apr 2017 13:41:29 +0900 Subject: [PATCH] eo/elm: Simplify box/grid EO API After talking with @eunue I realised that the way I'd first implemented the box/grid "pack" API was simply too complicated. I had tried to make it possible to change the layout function at runtime, like good old evas box, but since there are no function pointers in EO the final design was really convoluted. If someone really needs to change the layout of a box at runtime, just create your own subclass, or unpack all items and repack them in a new box. Note: there are still some issues with the layout params & flow --- src/bin/elementary/test_grid_static.c | 16 +-- src/bin/elementary/test_ui_box.c | 140 ++++++++++++---------- src/bin/elementary/test_ui_grid.c | 36 ++---- src/lib/efl/interfaces/efl_pack_layout.eo | 30 +---- src/lib/elementary/efl_ui_box.c | 31 +---- src/lib/elementary/efl_ui_box.eo | 2 - src/lib/elementary/efl_ui_box_flow.c | 35 ++---- src/lib/elementary/efl_ui_box_flow.eo | 9 +- src/lib/elementary/efl_ui_box_private.h | 3 - src/lib/elementary/efl_ui_box_stack.c | 12 +- src/lib/elementary/efl_ui_box_stack.eo | 3 +- src/lib/elementary/efl_ui_grid.c | 33 +---- src/lib/elementary/efl_ui_grid.eo | 2 - src/lib/elementary/efl_ui_grid_private.h | 3 - src/lib/elementary/efl_ui_grid_static.c | 5 +- src/lib/elementary/efl_ui_grid_static.eo | 2 +- 16 files changed, 111 insertions(+), 251 deletions(-) diff --git a/src/bin/elementary/test_grid_static.c b/src/bin/elementary/test_grid_static.c index ef3e51784f..07aa8e96f2 100644 --- a/src/bin/elementary/test_grid_static.c +++ b/src/bin/elementary/test_grid_static.c @@ -110,19 +110,9 @@ test_grid_static(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve efl_ui_win_autodel_set(efl_added, EINA_TRUE), efl_event_callback_add(efl_added, EFL_EVENT_DEL, _win_del, api)); - static int run_count = 0; - if (((run_count++) % 2) == 0) - { - gd = efl_add(EFL_UI_GRID_STATIC_CLASS, win, - efl_gfx_size_hint_weight_set(efl_added, 1, 1)); - } - else - { - gd = efl_add(EFL_UI_GRID_CLASS, win, - efl_gfx_size_hint_weight_set(efl_added, 1, 1), - efl_pack_layout_engine_set(efl_added, EFL_UI_GRID_STATIC_CLASS, NULL)); - } - efl_pack(win, gd); + gd = efl_add(EFL_UI_GRID_STATIC_CLASS, win, + efl_gfx_size_hint_weight_set(efl_added, 1, 1)); + efl_content_set(win, gd); api->data.grid = gd; efl_gfx_visible_set(gd, 1); diff --git a/src/bin/elementary/test_ui_box.c b/src/bin/elementary/test_ui_box.c index 99e3e93fdf..ce37739972 100644 --- a/src/bin/elementary/test_ui_box.c +++ b/src/bin/elementary/test_ui_box.c @@ -64,6 +64,9 @@ static void user_min_slider_cb(void *data EINA_UNUSED, const Efl_Event *event) { int val = elm_slider_value_get(event->object); + Eo *win = data, *box; + + box = efl_key_wref_get(win, "box"); efl_gfx_size_hint_min_set(objects[3], val, val); } @@ -71,79 +74,96 @@ static void padding_slider_cb(void *data, const Efl_Event *event) { int val = elm_slider_value_get(event->object); - efl_pack_padding_set(data, val, val, EINA_TRUE); + Eo *win = data, *box; + + box = efl_key_wref_get(win, "box"); + efl_pack_padding_set(box, val, val, EINA_TRUE); } static void margin_slider_cb(void *data, const Efl_Event *event) { int val = elm_slider_value_get(event->object); - efl_gfx_size_hint_margin_set(data, val, val, val, val); + Eo *win = data, *box; + + box = efl_key_wref_get(win, "box"); + efl_gfx_size_hint_margin_set(box, val, val, val, val); } static void alignh_slider_cb(void *data, const Efl_Event *event) { double av, val; + Eo *win = data, *box; + + box = efl_key_wref_get(win, "box"); val = elm_slider_value_get(event->object); - efl_pack_align_get(data, NULL, &av); - efl_pack_align_set(data, val, av); + efl_pack_align_get(box, NULL, &av); + efl_pack_align_set(box, val, av); } static void alignv_slider_cb(void *data, const Efl_Event *event) { double ah, val; - val = elm_slider_value_get(event->object); - efl_pack_align_get(data, &ah, NULL); - efl_pack_align_set(data, ah, val); -} + Eo *win = data, *box; -static Efl_Ui_Box_Flow_Params s_flow_params = { 0, 0 }; -static Eina_Bool flow = EINA_FALSE; + box = efl_key_wref_get(win, "box"); + val = elm_slider_value_get(event->object); + efl_pack_align_get(box, &ah, NULL); + efl_pack_align_set(box, ah, val); +} static void flow_check_cb(void *data, const Efl_Event *event) { - flow = elm_check_selected_get(event->object); - efl_pack_layout_engine_set(data, flow ? EFL_UI_BOX_FLOW_CLASS : NULL, &s_flow_params); + Eina_Bool chk = elm_check_selected_get(event->object); + Eina_List *list = NULL; + Eina_Iterator *it; + Eo *box, *win, *sobj, *parent; + + // Unpack all children from the box, delete it and repack into the new box + + win = data; + box = efl_key_wref_get(win, "box"); + parent = efl_parent_get(box); + it = efl_content_iterate(box); + EINA_ITERATOR_FOREACH(it, sobj) + list = eina_list_append(list, sobj); + eina_iterator_free(it); + efl_pack_unpack_all(box); + efl_del(box); + + box = efl_add(chk ? EFL_UI_BOX_FLOW_CLASS : EFL_UI_BOX_CLASS, win); + efl_content_set(parent, box); + efl_key_wref_set(win, "box", box); + + EINA_LIST_FREE(list, sobj) + efl_pack(box, sobj); } static void horiz_check_cb(void *data, const Efl_Event *event) { Eina_Bool chk = elm_check_selected_get(event->object); - efl_orientation_set(data, chk ? EFL_ORIENT_HORIZONTAL : EFL_ORIENT_VERTICAL); + Eo *box = efl_key_wref_get(data, "box"); + efl_orientation_set(box, chk ? EFL_ORIENT_HORIZONTAL : EFL_ORIENT_VERTICAL); } static void homo_check_cb(void *data, const Efl_Event *event) { Eina_Bool chk = elm_check_selected_get(event->object); - s_flow_params.homogenous = chk; - efl_pack_layout_engine_set(data, flow ? EFL_UI_BOX_FLOW_CLASS : NULL, &s_flow_params); + Eo *box = efl_key_wref_get(data, "box"); + efl_ui_box_flow_homogenous_set(box, chk); } static void max_size_check_cb(void *data, const Efl_Event *event) { Eina_Bool chk = elm_check_selected_get(event->object); - s_flow_params.max_size = chk; - efl_pack_layout_engine_set(data, flow ? EFL_UI_BOX_FLOW_CLASS : NULL, &s_flow_params); -} - -static void -left_check_cb(void *data, const Efl_Event *event) -{ - Eina_Bool chk = elm_check_selected_get(event->object); - if (chk) - { - efl_pack_align_set(data, 0, 0.5); - } - else - { - efl_pack_align_set(data, 0.5, 0.5); - } + Eo *box = efl_key_wref_get(data, "box"); + efl_ui_box_flow_max_size_set(box, chk); } static void @@ -178,26 +198,25 @@ static void custom_check_cb(void *data, const Efl_Event *event) { EFL_OPS_DEFINE(custom_layout_ops, - EFL_OBJECT_OP_FUNC(efl_pack_layout_update, _custom_layout_update)); + EFL_OBJECT_OP_FUNC(efl_pack_layout_update, _custom_layout_update)); Eina_Bool chk = elm_check_selected_get(event->object); - Eo *obj = data; + Eo *box, *win = data; + + box = efl_key_wref_get(win, "box"); // Overriding just the one function we need - efl_object_override(obj, chk ? &custom_layout_ops : NULL); + efl_object_override(box, chk ? &custom_layout_ops : NULL); // Layout request is required as the pack object doesn't know the layout // function was just overridden. - efl_pack_layout_request(obj); - - // See also test_ui_grid.c for another method for custom layouts (create - // a custom layout engine). + efl_pack_layout_request(box); } void test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *bx, *o, *vbox, *f, *hbox, *chk, *bottombox; + Evas_Object *win, *bx, *o, *vbox, *f, *hbox, *chk; int i = 0; win = elm_win_util_standard_add("ui-box", "Efl.Ui.Box"); @@ -213,10 +232,6 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in efl_gfx_visible_set(vbox, 1); - // create here to pass in cb - bottombox = efl_add(EFL_UI_BOX_CLASS, win); - - /* controls */ f = elm_frame_add(win); elm_object_text_set(f, "Controls"); @@ -240,7 +255,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in chk = o = elm_radio_add(win); elm_object_text_set(o, "No weight"); - efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, bottombox); + efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, win); efl_gfx_size_hint_align_set(o, 0, 0.5); elm_radio_state_value_set(o, NONE); efl_pack(bx, o); @@ -248,7 +263,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_radio_add(win); elm_object_text_set(o, "No weight + box fill"); - efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, bottombox); + efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, win); efl_gfx_size_hint_align_set(o, 0, 0.5); elm_radio_state_value_set(o, NONE_BUT_FILL); elm_radio_group_add(o, chk); @@ -257,7 +272,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_radio_add(win); elm_object_text_set(o, "Equal weights"); - efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, bottombox); + efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, win); efl_gfx_size_hint_align_set(o, 0, 0.5); elm_radio_state_value_set(o, EQUAL); elm_radio_group_add(o, chk); @@ -266,7 +281,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_radio_add(win); elm_object_text_set(o, "One weight only"); - efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, bottombox); + efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, win); efl_gfx_size_hint_align_set(o, 0, 0.5); elm_radio_state_value_set(o, ONE); elm_radio_group_add(o, chk); @@ -275,7 +290,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_radio_add(win); elm_object_text_set(o, "Two weights"); - efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, bottombox); + efl_event_callback_add(o, ELM_RADIO_EVENT_CHANGED, weights_cb, win); efl_gfx_size_hint_align_set(o, 0, 0.5); elm_radio_state_value_set(o, TWO); elm_radio_group_add(o, chk); @@ -301,7 +316,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_check_add(win); elm_check_selected_set(o, 0); elm_object_text_set(o, "Flow"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, flow_check_cb, bottombox); + efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, flow_check_cb, win); efl_gfx_size_hint_align_set(o, 0, 0); efl_pack(bx, o); efl_gfx_visible_set(o, 1); @@ -309,7 +324,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_check_add(win); elm_check_selected_set(o, 1); elm_object_text_set(o, "Horizontal"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, horiz_check_cb, bottombox); + efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, horiz_check_cb, win); efl_gfx_size_hint_align_set(o, 0, 0); efl_pack(bx, o); efl_gfx_visible_set(o, 1); @@ -317,7 +332,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_check_add(win); elm_check_selected_set(o, 0); elm_object_text_set(o, "Homogenous"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, homo_check_cb, bottombox); + efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, homo_check_cb, win); efl_gfx_size_hint_align_set(o, 0, 0); efl_pack(bx, o); efl_gfx_visible_set(o, 1); @@ -325,15 +340,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_check_add(win); elm_check_selected_set(o, 0); elm_object_text_set(o, "Homogenous + Max"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, max_size_check_cb, bottombox); - efl_gfx_size_hint_align_set(o, 0, 0); - efl_pack(bx, o); - efl_gfx_visible_set(o, 1); - - o = elm_check_add(win); - elm_check_selected_set(o, 0); - elm_object_text_set(o, "Align left"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, left_check_cb, bottombox); + efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, max_size_check_cb, win); efl_gfx_size_hint_align_set(o, 0, 0); efl_pack(bx, o); efl_gfx_visible_set(o, 1); @@ -341,7 +348,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in o = elm_check_add(win); elm_check_selected_set(o, 0); elm_object_text_set(o, "Custom layout"); - efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, custom_check_cb, bottombox); + efl_event_callback_add(o, EFL_UI_CHECK_EVENT_CHANGED, custom_check_cb, win); efl_gfx_size_hint_align_set(o, 0, 0); efl_gfx_size_hint_weight_set(o, 0, 1); efl_pack(bx, o); @@ -394,7 +401,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_slider_horizontal_set(o, 0); efl_gfx_size_hint_align_set(o, 0.5, -1); efl_gfx_size_hint_weight_set(o, 1, 1); - efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, padding_slider_cb, bottombox); + efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, padding_slider_cb, win); elm_slider_min_max_set(o, 0, 40); elm_slider_inverted_set(o, 1); elm_slider_value_set(o, 10); @@ -421,7 +428,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_slider_horizontal_set(o, 0); efl_gfx_size_hint_align_set(o, 0.5, -1); efl_gfx_size_hint_weight_set(o, 1, 1); - efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, margin_slider_cb, bottombox); + efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, margin_slider_cb, win); elm_slider_min_max_set(o, 0, 40); elm_slider_inverted_set(o, 1); elm_slider_value_set(o, 10); @@ -448,7 +455,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_slider_horizontal_set(o, 0); efl_gfx_size_hint_align_set(o, 0.5, -1); efl_gfx_size_hint_weight_set(o, 1, 1); - efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, alignv_slider_cb, bottombox); + efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, alignv_slider_cb, win); elm_slider_min_max_set(o, -0.1, 1.0); elm_slider_step_set(o, 0.1); elm_slider_value_set(o, 0.5); @@ -462,7 +469,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in efl_gfx_size_hint_align_set(o, 0.5, -1); efl_gfx_size_hint_weight_set(o, 1, 0); efl_gfx_size_hint_min_set(o, 100, 0); - efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, alignh_slider_cb, bottombox); + efl_event_callback_add(o, ELM_SLIDER_EVENT_CHANGED, alignh_slider_cb, win); elm_slider_min_max_set(o, -0.1, 1.0); elm_slider_step_set(o, 0.1); elm_slider_value_set(o, 0.5); @@ -478,7 +485,8 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in efl_pack(vbox, f); efl_gfx_visible_set(f, 1); - bx = bottombox; + bx = efl_add(EFL_UI_BOX_CLASS, win); + efl_key_wref_set(win, "box", bx); efl_pack_padding_set(bx, 10, 10, EINA_TRUE); efl_gfx_size_hint_align_set(bx, 0.5, 0.5); efl_gfx_size_hint_weight_set(bx, 1, 1); diff --git a/src/bin/elementary/test_ui_grid.c b/src/bin/elementary/test_ui_grid.c index ecc9720d31..9d4e759587 100644 --- a/src/bin/elementary/test_ui_grid.c +++ b/src/bin/elementary/test_ui_grid.c @@ -5,6 +5,8 @@ #define EFL_PACK_LAYOUT_PROTECTED #include +static void _custom_layout_update(Eo *pack, void *_pd EINA_UNUSED); + static Evas_Object *objects[7] = {}; typedef enum { @@ -16,36 +18,17 @@ typedef enum { CUSTOM } Weight_Mode; -static void _custom_engine_layout_do(Eo *obj, void *pd, Efl_Pack *pack, const void *data); - -/* Common Efl Class boilerplate. */ -static Eina_Bool -_custom_engine_class_initializer(Efl_Class *klass) -{ - EFL_OPS_DEFINE(class_ops, - EFL_OBJECT_OP_FUNC(efl_pack_layout_do, _custom_engine_layout_do), - ); - - return efl_class_functions_set(klass, NULL, &class_ops); -} - -static const Efl_Class_Description custom_engine_class_desc = { - EO_VERSION, "Custom Layout Engine", EFL_CLASS_TYPE_INTERFACE, - 0, _custom_engine_class_initializer, NULL, NULL -}; - -EFL_DEFINE_CLASS(_test_ui_grid_custom_engine_class_get, &custom_engine_class_desc, EFL_PACK_LAYOUT_INTERFACE, NULL) - -#define CUSTOM_ENGINE_CLASS _test_ui_grid_custom_engine_class_get() - static void weights_cb(void *data, const Efl_Event *event) { + EFL_OPS_DEFINE(custom_layout_ops, + EFL_OBJECT_OP_FUNC(efl_pack_layout_update, _custom_layout_update)); + Weight_Mode mode = elm_radio_state_value_get(event->object); Eo *grid = data; if (mode != CUSTOM) - efl_pack_layout_engine_set(grid, NULL, NULL); + efl_object_override(grid, NULL); switch (mode) { @@ -78,9 +61,7 @@ weights_cb(void *data, const Efl_Event *event) efl_gfx_size_hint_weight_set(objects[6], 1, 1); break; case CUSTOM: - // See also test_ui_box.c for another solution for custom layouts - // using efl_object_override. - efl_pack_layout_engine_set(grid, CUSTOM_ENGINE_CLASS, NULL); + efl_object_override(grid, &custom_layout_ops); break; } } @@ -145,8 +126,7 @@ child_evt_cb(void *data, const Efl_Event *event) } static void -_custom_engine_layout_do(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, - Efl_Pack *pack, const void *data EINA_UNUSED) +_custom_layout_update(Eo *pack, void *_pd EINA_UNUSED) { /* Example custom layout for grid: * divide space into regions of same size, place objects in center of their diff --git a/src/lib/efl/interfaces/efl_pack_layout.eo b/src/lib/efl/interfaces/efl_pack_layout.eo index 7fcebe1595..5cb35d851b 100644 --- a/src/lib/efl/interfaces/efl_pack_layout.eo +++ b/src/lib/efl/interfaces/efl_pack_layout.eo @@ -6,22 +6,12 @@ interface Efl.Pack.Layout () ]] eo_prefix: efl_pack; methods { - @property layout_engine { - [[Implementation of this container's layout algorithm. - - The default value is the same as the widget class. - ]] - set {} - get {} - values { - /* FIXME: engine is an Efl.Class */ - engine: const(Efl.Object); [[Must be an $Efl.Pack.Layout subclass.]] - data: const(void_ptr); [[Any data to pass along to $Efl.Pack.Layout.layout_do. - Owned by the caller. Depends on the layout engine.]] - } - } + // Note: Do we need a layout_force or a sync flag in layout_request? layout_request { - [[Requests EFL to call the @.layout_update method on this object.]] + [[Requests EFL to call the @.layout_update method on this object. + + This @.layout_update may be called asynchronously. + ]] } layout_update @protected { [[Implementation of this container's layout algorithm. @@ -29,16 +19,8 @@ interface Efl.Pack.Layout () EFL will call this function whenever the contents of this container need to be re-layed out on the canvas. - This can be overriden to implement highly specific layout - behaviours. + This can be overriden to implement custom layout behaviours. ]] } - layout_do @class @protected { - [[Lay out (resize and move) children objects of $pack.]] - params { - pack: Efl.Gfx; [[The container to lay out.]] - data: const(void_ptr) @optional; [[Extra data passed by the caller.]] - } - } } } diff --git a/src/lib/elementary/efl_ui_box.c b/src/lib/elementary/efl_ui_box.c index 25a7a6ec8c..499d33eeae 100644 --- a/src/lib/elementary/efl_ui_box.c +++ b/src/lib/elementary/efl_ui_box.c @@ -148,40 +148,14 @@ _evas_box_custom_layout(Evas_Object *evas_box EINA_UNUSED, } EOLIAN static void -_efl_ui_box_efl_pack_layout_layout_update(Eo *obj, Efl_Ui_Box_Data *pd) -{ - efl_pack_layout_do(pd->layout_engine, obj, pd->layout_data); - efl_event_callback_legacy_call(obj, EFL_PACK_EVENT_LAYOUT_UPDATED, NULL); -} - -EOLIAN static void -_efl_ui_box_efl_pack_layout_layout_do(Eo *klass EINA_UNUSED, - void *_pd EINA_UNUSED, - Eo *obj, const void *data EINA_UNUSED) +_efl_ui_box_efl_pack_layout_layout_update(Eo *obj, Efl_Ui_Box_Data *pd EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); Evas_Object_Box_Data *bd; bd = evas_object_smart_data_get(wd->resize_obj); _efl_ui_box_custom_layout(obj, bd); -} - -EOLIAN static void -_efl_ui_box_efl_pack_layout_layout_engine_set(Eo *obj, Efl_Ui_Box_Data *pd, - const Efl_Class *klass, const void *data) -{ - pd->layout_engine = klass ? klass : efl_class_get(obj); - pd->layout_data = data; - efl_pack_layout_request(obj); - _sizing_eval(obj, pd); -} - -EOLIAN static void -_efl_ui_box_efl_pack_layout_layout_engine_get(Eo *obj EINA_UNUSED, Efl_Ui_Box_Data *pd, - const Efl_Class **klass, const void **data) -{ - if (klass) *klass = pd->layout_engine; - if (data) *data = pd->layout_data; + efl_event_callback_legacy_call(obj, EFL_PACK_EVENT_LAYOUT_UPDATED, NULL); } EOLIAN static void @@ -259,7 +233,6 @@ _efl_ui_box_efl_object_constructor(Eo *obj, Efl_Ui_Box_Data *pd) elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_FILLER); pd->orient = EFL_ORIENT_RIGHT; - pd->layout_engine = efl_class_get(obj); pd->align.h = 0.5; pd->align.v = 0.5; diff --git a/src/lib/elementary/efl_ui_box.eo b/src/lib/elementary/efl_ui_box.eo index 0f81dacb80..f0b68ba86e 100644 --- a/src/lib/elementary/efl_ui_box.eo +++ b/src/lib/elementary/efl_ui_box.eo @@ -30,7 +30,5 @@ class Efl.Ui.Box (Elm.Widget, Efl.Pack.Linear, Efl.Pack.Layout, Efl.Pack.Linear.pack_index_get; Efl.Pack.Layout.layout_update; Efl.Pack.Layout.layout_request; - Efl.Pack.Layout.layout_engine { get; set; } - Efl.Pack.Layout.layout_do; } } diff --git a/src/lib/elementary/efl_ui_box_flow.c b/src/lib/elementary/efl_ui_box_flow.c index c1f72b40ad..5e38119390 100644 --- a/src/lib/elementary/efl_ui_box_flow.c +++ b/src/lib/elementary/efl_ui_box_flow.c @@ -6,64 +6,49 @@ typedef struct _Efl_Ui_Box_Flow_Data Efl_Ui_Box_Flow_Data; struct _Efl_Ui_Box_Flow_Data { - Efl_Ui_Box_Flow_Params params; + Eina_Bool homogenous; + Eina_Bool max_size; }; -EOLIAN static Eo * -_efl_ui_box_flow_efl_object_constructor(Eo *obj, Efl_Ui_Box_Flow_Data *pd) -{ - efl_constructor(efl_super(obj, MY_CLASS)); - efl_pack_layout_engine_set(obj, MY_CLASS, &pd->params); - return obj; -} - EOLIAN static void _efl_ui_box_flow_box_flow_homogenous_set(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd, Eina_Bool val) { - pd->params.homogenous = val; + pd->homogenous = val; } EOLIAN static Eina_Bool _efl_ui_box_flow_box_flow_homogenous_get(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd) { - return pd->params.homogenous; + return pd->homogenous; } EOLIAN static void _efl_ui_box_flow_box_flow_max_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd, Eina_Bool val) { - pd->params.max_size = val; + pd->max_size = val; } EOLIAN static Eina_Bool _efl_ui_box_flow_box_flow_max_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd) { - return pd->params.max_size; + return pd->max_size; } EOLIAN static void -_efl_ui_box_flow_efl_pack_layout_layout_do(Efl_Class *klass EINA_UNUSED, - void *_pd EINA_UNUSED, - Eo *obj, const void *data) +_efl_ui_box_flow_efl_pack_layout_layout_update(Eo *obj, Efl_Ui_Box_Flow_Data *pd) { void (*func)(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data); - const Efl_Ui_Box_Flow_Params *params = data; Evas_Object_Box_Data *bd; - Efl_Ui_Box_Data *pd; Eina_Bool homo = EINA_FALSE, maxsize = EINA_FALSE; EINA_SAFETY_ON_FALSE_RETURN(efl_isa(obj, EFL_UI_BOX_CLASS)); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); bd = efl_data_scope_get(wd->resize_obj, EVAS_BOX_CLASS); - pd = efl_data_scope_get(obj, EFL_UI_BOX_CLASS); - if (params) - { - homo = params->homogenous; - maxsize = params->max_size; - } + homo = pd->homogenous; + maxsize = pd->max_size; - if (_horiz(pd->orient)) + if (_horiz(efl_orientation_get(obj))) { if (homo) { diff --git a/src/lib/elementary/efl_ui_box_flow.eo b/src/lib/elementary/efl_ui_box_flow.eo index 011c24e43c..3b6ffb764e 100644 --- a/src/lib/elementary/efl_ui_box_flow.eo +++ b/src/lib/elementary/efl_ui_box_flow.eo @@ -1,9 +1,3 @@ -struct Efl.Ui.Box.Flow_Params { - [[Extra parameters for Box_Flow layout. Can be omitted.]] - homogenous: bool; [[$true if the box flow layout is homogenous, $false otherwise]] - max_size: bool; [[$true if the box flow layout has the maximal size, $false otherwise]] -} - class Efl.Ui.Box.Flow (Efl.Ui.Box, Efl.Pack.Layout) { [[A custom layout engine for @Efl.Ui.Box.]] @@ -26,7 +20,6 @@ class Efl.Ui.Box.Flow (Efl.Ui.Box, Efl.Pack.Layout) } } implements { - Efl.Object.constructor; - Efl.Pack.Layout.layout_do; + Efl.Pack.Layout.layout_update; } } diff --git a/src/lib/elementary/efl_ui_box_private.h b/src/lib/elementary/efl_ui_box_private.h index 60ac2658fd..57acf1a3e9 100644 --- a/src/lib/elementary/efl_ui_box_private.h +++ b/src/lib/elementary/efl_ui_box_private.h @@ -21,9 +21,6 @@ typedef struct _Box_Item_Iterator Box_Item_Iterator; struct _Efl_Ui_Box_Data { - const Efl_Class *layout_engine; - const void *layout_data; - Efl_Orient orient; Eina_Bool homogeneous : 1; Eina_Bool delete_me : 1; diff --git a/src/lib/elementary/efl_ui_box_stack.c b/src/lib/elementary/efl_ui_box_stack.c index 590de3a963..c50ea05960 100644 --- a/src/lib/elementary/efl_ui_box_stack.c +++ b/src/lib/elementary/efl_ui_box_stack.c @@ -4,18 +4,8 @@ #define MY_CLASS EFL_UI_BOX_STACK_CLASS -EOLIAN static Eo * -_efl_ui_box_stack_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED) -{ - efl_constructor(efl_super(obj, MY_CLASS)); - efl_pack_layout_engine_set(obj, MY_CLASS, NULL); - return obj; -} - EOLIAN static void -_efl_ui_box_stack_efl_pack_layout_layout_do(Efl_Class *klass EINA_UNUSED, - void *_pd EINA_UNUSED, Eo *obj, - const void *data EINA_UNUSED) +_efl_ui_box_stack_efl_pack_layout_layout_update(Eo *obj, void *_pd EINA_UNUSED) { Evas_Object_Box_Option *opt; Evas_Object_Box_Data *bd; diff --git a/src/lib/elementary/efl_ui_box_stack.eo b/src/lib/elementary/efl_ui_box_stack.eo index 269b319127..e5e7e8279f 100644 --- a/src/lib/elementary/efl_ui_box_stack.eo +++ b/src/lib/elementary/efl_ui_box_stack.eo @@ -6,7 +6,6 @@ class Efl.Ui.Box.Stack (Efl.Ui.Box, Efl.Pack.Layout) ]] data: null; implements { - Efl.Object.constructor; - Efl.Pack.Layout.layout_do; + Efl.Pack.Layout.layout_update; } } diff --git a/src/lib/elementary/efl_ui_grid.c b/src/lib/elementary/efl_ui_grid.c index 4e0a843df2..50299c2397 100644 --- a/src/lib/elementary/efl_ui_grid.c +++ b/src/lib/elementary/efl_ui_grid.c @@ -138,10 +138,8 @@ _sizing_eval(Evas_Object *obj, Efl_Ui_Grid_Data *pd EINA_UNUSED) ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - efl_gfx_size_hint_combined_min_get - (wd->resize_obj, &minw, &minh); - evas_object_size_hint_max_get - (wd->resize_obj, &maxw, &maxh); + efl_gfx_size_hint_combined_min_get(wd->resize_obj, &minw, &minh); + evas_object_size_hint_max_get(wd->resize_obj, &maxw, &maxh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); evas_object_geometry_get(obj, NULL, NULL, &w, &h); @@ -198,35 +196,12 @@ _custom_table_calc(Eo *obj, Custom_Table_Data *pd) } /* End of custom table class */ -EOLIAN static void -_efl_ui_grid_efl_pack_layout_layout_engine_set(Eo *obj, Efl_Ui_Grid_Data *pd, const Efl_Class *engine, const void *data) -{ - pd->layout_engine = engine ? engine : efl_class_get(obj); - pd->layout_data = data; - efl_pack_layout_request(obj); -} - -EOLIAN static void -_efl_ui_grid_efl_pack_layout_layout_engine_get(Eo *obj EINA_UNUSED, Efl_Ui_Grid_Data *pd, const Efl_Class **engine, const void **data) -{ - if (engine) *engine = pd->layout_engine; - if (data) *data = pd->layout_data; -} - EOLIAN static void _efl_ui_grid_efl_pack_layout_layout_update(Eo *obj, Efl_Ui_Grid_Data *pd) -{ - _sizing_eval(obj, pd); - efl_pack_layout_do(pd->layout_engine, obj, pd->layout_data); -} - -EOLIAN static void -_efl_ui_grid_efl_pack_layout_layout_do(Eo *klass EINA_UNUSED, - void *_pd EINA_UNUSED, - Eo *obj, const void *data EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + _sizing_eval(obj, pd); efl_canvas_group_calculate(efl_super(wd->resize_obj, CUSTOM_TABLE_CLASS)); } @@ -244,8 +219,6 @@ _efl_ui_grid_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Grid_Data *pd) Custom_Table_Data *custom; Evas_Object *table; - pd->layout_engine = MY_CLASS; - elm_widget_sub_object_parent_add(obj); table = efl_add(CUSTOM_TABLE_CLASS, obj); diff --git a/src/lib/elementary/efl_ui_grid.eo b/src/lib/elementary/efl_ui_grid.eo index a1d8970c5f..746ff45d06 100644 --- a/src/lib/elementary/efl_ui_grid.eo +++ b/src/lib/elementary/efl_ui_grid.eo @@ -31,7 +31,5 @@ class Efl.Ui.Grid (Elm.Widget, Efl.Pack.Grid, Efl.Pack.Layout, Efl.Pack.Linear.pack_end; Efl.Pack.Layout.layout_update; Efl.Pack.Layout.layout_request; - Efl.Pack.Layout.layout_engine { get; set; } - Efl.Pack.Layout.layout_do; } } diff --git a/src/lib/elementary/efl_ui_grid_private.h b/src/lib/elementary/efl_ui_grid_private.h index fbefdcd624..5d9f9efc25 100644 --- a/src/lib/elementary/efl_ui_grid_private.h +++ b/src/lib/elementary/efl_ui_grid_private.h @@ -29,9 +29,6 @@ struct _Grid_Item struct _Efl_Ui_Grid_Data { - const Efl_Class *layout_engine; - const void *layout_data; - Grid_Item *items; int count; diff --git a/src/lib/elementary/efl_ui_grid_static.c b/src/lib/elementary/efl_ui_grid_static.c index 06b4759f71..61dbb30b64 100644 --- a/src/lib/elementary/efl_ui_grid_static.c +++ b/src/lib/elementary/efl_ui_grid_static.c @@ -14,7 +14,6 @@ _efl_ui_grid_static_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED) elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_FILLER); gd = efl_data_scope_get(obj, EFL_UI_GRID_CLASS); - gd->layout_engine = MY_CLASS; gd->req_cols = 100; gd->req_rows = 100; @@ -22,9 +21,7 @@ _efl_ui_grid_static_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED) } EOLIAN static void -_efl_ui_grid_static_efl_pack_layout_layout_do(Efl_Class *klass EINA_UNUSED, - void *_pd EINA_UNUSED, - Eo *obj, const void *data EINA_UNUSED) +_efl_ui_grid_static_efl_pack_layout_layout_update(Eo *obj, void *_pd EINA_UNUSED) { Efl_Ui_Grid_Data *gd; Grid_Item *gi; diff --git a/src/lib/elementary/efl_ui_grid_static.eo b/src/lib/elementary/efl_ui_grid_static.eo index 6b5dff7606..a87c22d770 100644 --- a/src/lib/elementary/efl_ui_grid_static.eo +++ b/src/lib/elementary/efl_ui_grid_static.eo @@ -4,6 +4,6 @@ class Efl.Ui.Grid.Static (Efl.Ui.Grid) data: null; implements { Efl.Object.constructor; - Efl.Pack.Layout.layout_do; + Efl.Pack.Layout.layout_update; } }