diff --git a/src/Makefile_Cxx.am b/src/Makefile_Cxx.am index cf99ea3db3..74ac8f7183 100644 --- a/src/Makefile_Cxx.am +++ b/src/Makefile_Cxx.am @@ -34,7 +34,7 @@ CLEANFILES += $(elementary_eolian_cxx_hh) $(elementary_eolian_cxx_impl_hh) lib/e ### Efl C++ installed_eflcxxmainheadersdir = $(includedir)/efl-cxx-@VMAJ@/ nodist_installed_eflcxxmainheaders_DATA = $(efl_eolian_cxx_hh) $(efl_eolian_cxx_impl_hh) lib/efl/Efl.eo.hh -dist_installed_eflcxxmainheaders_DATA = lib/efl/Efl.hh +dist_installed_eflcxxmainheaders_DATA = lib/efl/Efl.hh lib/efl/cxx/efl_part_impl.hh lib/efl/Efl.eo.hh: $(efl_eolian_files) $(_EOLIAN_CXX_DEP) $(AM_V_EOLCXX) \ diff --git a/src/examples/elementary/bg_cxx_example_02.cc b/src/examples/elementary/bg_cxx_example_02.cc index 8ef33a8816..eb71693242 100644 --- a/src/examples/elementary/bg_cxx_example_02.cc +++ b/src/examples/elementary/bg_cxx_example_02.cc @@ -23,10 +23,6 @@ efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED) win.text_set("Bg Image"); win.autohide_set(true); - // FIXME: Part API needs some fixing to be nice in C++ :) - //efl::eo::downcast(win.part("background")) - // .file_set("performance/background.png", nullptr); - efl::ui::Bg bg(instantiate, win); bg.scale_type_set(EFL_UI_IMAGE_SCALE_TYPE_FILL); bg.file_set("performance/background.png", nullptr); diff --git a/src/lib/efl/Efl.hh b/src/lib/efl/Efl.hh index 20dfc1a90d..a7efc5f8f6 100644 --- a/src/lib/efl/Efl.hh +++ b/src/lib/efl/Efl.hh @@ -3,7 +3,12 @@ #ifdef EFL_BETA_API_SUPPORT +#define EFL_PART_IMPL_HH +#define EFL_OBJECT_BETA +#define EFL_OBJECT_PROTECTED + #include +#include "cxx/efl_part_impl.hh" #endif #endif diff --git a/src/lib/efl/cxx/efl_part_impl.hh b/src/lib/efl/cxx/efl_part_impl.hh new file mode 100644 index 0000000000..c1c99e785a --- /dev/null +++ b/src/lib/efl/cxx/efl_part_impl.hh @@ -0,0 +1,26 @@ +//#ifndef EFL_PART_IMPL_HH +//#define EFL_PART_IMPL_HH + +namespace efl { +inline ::efl::eolian::return_traits< ::efl::Object>::type Part::part( ::efl::eolian::in_traits< ::efl::eina::string_view>::type name) const +{ + Eo *handle = ::efl_part(this->_eo_ptr(), name.c_str()); + ::efl_auto_unref_set(handle, false); + return ::efl::Object{handle}; +} +} + +namespace eo_cxx { +namespace efl { +inline ::efl::eolian::return_traits< ::efl::Object>::type Part::part( ::efl::eolian::in_traits< ::efl::eina::string_view>::type name) const +{ + Eo *handle = ::efl_part(this->_eo_ptr(), name.c_str()); + ::efl_auto_unref_set(handle, false); + return ::efl::Object{handle}; +} +inline efl::Part::operator ::efl::Part() const { return *static_cast< ::efl::Part const*>(static_cast(this)); } +inline efl::Part::operator ::efl::Part&() { return *static_cast< ::efl::Part*>(static_cast(this)); } +inline efl::Part::operator ::efl::Part const&() const { return *static_cast< ::efl::Part const*>(static_cast(this)); } +} } + +//#endif