savio pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=089029a68fec6d989e138a8a76da34007caf3153
commit 089029a68fec6d989e138a8a76da34007caf3153 Author: Felipe Magno de Almeida <fel...@expertisesolutions.com.br> Date: Mon Jul 21 13:35:11 2014 -0300 cxx: refreshed example --- src/examples/box_cxx_example_02.cc | 132 +++++++++++++++++++++---------------- src/lib/elm_box.eo | 2 +- 2 files changed, 78 insertions(+), 56 deletions(-) diff --git a/src/examples/box_cxx_example_02.cc b/src/examples/box_cxx_example_02.cc index b1f7bc9..10fcb0c 100644 --- a/src/examples/box_cxx_example_02.cc +++ b/src/examples/box_cxx_example_02.cc @@ -16,6 +16,8 @@ #define ELM_INTERFACE_ATSPI_IMAGE_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#include <iostream> + #include <Elementary.h> #include <Eo.h> @@ -32,39 +34,45 @@ #include <deque> -// static void -// _test_box_transition_change(void *data) -// { -// Transitions_Data *tdata = static_cast<Transitions_Data*>(data); -// Elm_Box_Transition *layout_data; -// Evas_Object_Box_Layout next_layout; - -// assert (!!data); -// assert (!tdata->transitions.empty()); - -// if(efl::eina::optional<elm_box> box = tdata->box.lock()) -// { -// next_layout = tdata->transitions.front(); -// layout_data = elm_box_transition_new(2.0, tdata->transitions.back(), -// nullptr, nullptr, next_layout, nullptr, nullptr, -// _test_box_transition_change, tdata); -// box->layout_set(elm_box_layout_transition, layout_data, -// elm_box_transition_free); -// tdata->last_layout = next_layout; +struct Transitions_Data +{ + efl::eo::wref<elm_box> box; + std::deque<Evas_Object_Box_Layout> transitions; + Evas_Object_Box_Layout last_layout; +}; + +static void +_test_box_transition_change(void *data) +{ + Transitions_Data *tdata = static_cast<Transitions_Data*>(data); + Elm_Box_Transition *layout_data; + Evas_Object_Box_Layout next_layout; + + assert (!!data); + assert (!tdata->transitions.empty()); + + if(efl::eina::optional<elm_box> box = tdata->box.lock()) + { + next_layout = tdata->transitions.front(); + layout_data = elm_box_transition_new(2.0, tdata->transitions.back(), + nullptr, nullptr, next_layout, nullptr, nullptr, + _test_box_transition_change, tdata); + box->layout_set(elm_box_layout_transition, layout_data, + elm_box_transition_free); + tdata->last_layout = next_layout; -// tdata->transitions.push_back(tdata->transitions[0]); -// tdata->transitions.pop_front(); -// } -// } + tdata->transitions.push_back(tdata->transitions[0]); + tdata->transitions.pop_front(); + } +} EAPI_MAIN int elm_main(int argc, char *argv[]) { elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - efl::eo::wref<elm_box> weak_box; - std::deque<Evas_Object_Box_Layout> transitions; - Evas_Object_Box_Layout last_layout; + Transitions_Data tdata; + Eo* test; { ::elm_win win (elm_win_util_standard_add("box-transition", "Box Transition")); @@ -72,52 +80,52 @@ elm_main(int argc, char *argv[]) elm_box bigbox ( efl::eo::parent = win ); bigbox.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - win.resize_object_add(bigbox._eo_ptr()); + win.resize_object_add(bigbox); bigbox.visibility_set(true); elm_box buttons ( efl::eo::parent = win ); buttons.horizontal_set(EINA_TRUE); - bigbox.pack_end(buttons._eo_ptr()); + bigbox.pack_end(buttons); buttons.visibility_set(true); elm_button add ( efl::eo::parent = win ); add.text_set("Add"); - buttons.pack_end(add._eo_ptr()); + buttons.pack_end(add); add.visibility_set(true); add.event_clicked_callback_add - (std::bind([&weak_box] + (std::bind([&tdata] { - if(efl::eina::optional<elm_box> box = weak_box.lock()) + if(efl::eina::optional<elm_box> box = tdata.box.lock()) { elm_button btn ( efl::eo::parent = *box ); btn.text_set("I do nothing"); - efl::eina::range_list<efl::eo::base> childrens (box->children_get()); + efl::eina::list<evas::object> childrens = box->children_get(); if (!childrens.empty()) { - box->pack_after(btn._eo_ptr(), childrens.front()._eo_ptr()); + box->pack_after(btn, childrens.front()); } else - box->pack_end(btn._eo_ptr()); + box->pack_end(btn); btn.visibility_set(true); } })); elm_button clear ( efl::eo::parent = win ); clear.text_set("Clear"); - buttons.pack_end(clear._eo_ptr()); + buttons.pack_end(clear); clear.visibility_set(true); - clear.event_clicked_callback_add(std::bind([&weak_box] { weak_box.lock()->clear(); })); + clear.event_clicked_callback_add(std::bind([&tdata] { tdata.box.lock()->clear(); })); elm_box dynamic ( efl::eo::parent = win ); dynamic.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); dynamic.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL); - bigbox.pack_end(dynamic._eo_ptr()); + bigbox.pack_end(dynamic); dynamic.visibility_set(true); - auto unpack = std::bind([&weak_box] (evas::clickable_interface obj) + auto unpack = std::bind([&tdata] (evas::clickable_interface obj) { - weak_box.lock()->unpack(obj._eo_ptr()); elm_button btn = efl::eo::downcast<elm_button>(obj); + tdata.box.lock()->unpack(btn); btn.position_set(0, 50); btn.color_set(128, 64, 0, 128); }, std::placeholders::_1) @@ -128,7 +136,7 @@ elm_main(int argc, char *argv[]) bt1.event_clicked_callback_add(unpack); bt1.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); bt1.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL); - dynamic.pack_end(bt1._eo_ptr()); + dynamic.pack_end(bt1); bt1.visibility_set(true); elm_button bt2 ( efl::eo::parent = win ); @@ -136,34 +144,48 @@ elm_main(int argc, char *argv[]) bt2.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0); bt2.size_hint_align_set(1.0, 0.5); bt2.event_clicked_callback_add(unpack); - dynamic.pack_end(bt2._eo_ptr()); + dynamic.pack_end(bt2); bt2.visibility_set(true); elm_button bt3 ( efl::eo::parent = win ); bt3.text_set("Button 3"); bt3.event_clicked_callback_add(unpack); - dynamic.pack_end(bt3._eo_ptr()); + dynamic.pack_end(bt3); bt3.visibility_set(true); - weak_box = dynamic; - last_layout = evas_object_box_layout_horizontal; - transitions.push_back(evas_object_box_layout_vertical); - transitions.push_back(evas_object_box_layout_horizontal); - transitions.push_back(evas_object_box_layout_stack); - transitions.push_back(evas_object_box_layout_homogeneous_vertical); - transitions.push_back(evas_object_box_layout_homogeneous_horizontal); - transitions.push_back(evas_object_box_layout_flow_vertical); - transitions.push_back(evas_object_box_layout_flow_horizontal); - transitions.push_back(evas_object_box_layout_stack); + tdata.box = dynamic; + tdata.last_layout = evas_object_box_layout_horizontal; + tdata.transitions.push_back(evas_object_box_layout_vertical); + tdata.transitions.push_back(evas_object_box_layout_horizontal); + tdata.transitions.push_back(evas_object_box_layout_stack); + tdata.transitions.push_back(evas_object_box_layout_homogeneous_vertical); + tdata.transitions.push_back(evas_object_box_layout_homogeneous_horizontal); + tdata.transitions.push_back(evas_object_box_layout_flow_vertical); + tdata.transitions.push_back(evas_object_box_layout_flow_horizontal); + tdata.transitions.push_back(evas_object_box_layout_stack); dynamic.layout_set(evas_object_box_layout_horizontal, nullptr, nullptr); - // _test_box_transition_change(&tdata); + _test_box_transition_change(&tdata); win.size_set(300, 320); win.visibility_set(true); - win._release(); + + // bigbox._release(); + // buttons._release(); + // add._release(); + // clear._release(); + // dynamic._release(); + // bt1._release(); + // bt2._release(); + // bt3._release(); + + + std::cout << "references to win " << win.ref_get() << std::endl; + test = win._eo_ptr(); + //win._release(); } - + std::cout << "references to win " << ::eo_ref_get(test) << std::endl; + elm_run(); elm_shutdown(); diff --git a/src/lib/elm_box.eo b/src/lib/elm_box.eo index b0e37a4..2aee46d 100644 --- a/src/lib/elm_box.eo +++ b/src/lib/elm_box.eo @@ -149,7 +149,7 @@ class Elm_Box (Elm_Widget) You must free this list with eina_list_free() once you are done with it. @ingroup Box */ - return Eina_List *; + return own(Eina_List *)<Evas_Object *>; } } } --