forked from enlightenment/efl
cxx: Implement proper part support (wrt. refs)
It's VERY hacky, but works as expected: no leak, no extra unref. This is a lucky case of simply overriding efl_part() implementation in C++, without having to modify the declaration.
This commit is contained in:
parent
0f5d40e6d4
commit
63725d71fd
|
@ -34,7 +34,7 @@ CLEANFILES += $(elementary_eolian_cxx_hh) $(elementary_eolian_cxx_impl_hh) lib/e
|
||||||
### Efl C++
|
### Efl C++
|
||||||
installed_eflcxxmainheadersdir = $(includedir)/efl-cxx-@VMAJ@/
|
installed_eflcxxmainheadersdir = $(includedir)/efl-cxx-@VMAJ@/
|
||||||
nodist_installed_eflcxxmainheaders_DATA = $(efl_eolian_cxx_hh) $(efl_eolian_cxx_impl_hh) lib/efl/Efl.eo.hh
|
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)
|
lib/efl/Efl.eo.hh: $(efl_eolian_files) $(_EOLIAN_CXX_DEP)
|
||||||
$(AM_V_EOLCXX) \
|
$(AM_V_EOLCXX) \
|
||||||
|
|
|
@ -23,10 +23,6 @@ efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
||||||
win.text_set("Bg Image");
|
win.text_set("Bg Image");
|
||||||
win.autohide_set(true);
|
win.autohide_set(true);
|
||||||
|
|
||||||
// FIXME: Part API needs some fixing to be nice in C++ :)
|
|
||||||
//efl::eo::downcast<efl::ui::win::Part>(win.part("background"))
|
|
||||||
// .file_set("performance/background.png", nullptr);
|
|
||||||
|
|
||||||
efl::ui::Bg bg(instantiate, win);
|
efl::ui::Bg bg(instantiate, win);
|
||||||
bg.scale_type_set(EFL_UI_IMAGE_SCALE_TYPE_FILL);
|
bg.scale_type_set(EFL_UI_IMAGE_SCALE_TYPE_FILL);
|
||||||
bg.file_set("performance/background.png", nullptr);
|
bg.file_set("performance/background.png", nullptr);
|
||||||
|
|
|
@ -3,7 +3,12 @@
|
||||||
|
|
||||||
#ifdef EFL_BETA_API_SUPPORT
|
#ifdef EFL_BETA_API_SUPPORT
|
||||||
|
|
||||||
|
#define EFL_PART_IMPL_HH
|
||||||
|
#define EFL_OBJECT_BETA
|
||||||
|
#define EFL_OBJECT_PROTECTED
|
||||||
|
|
||||||
#include <Efl.eo.hh>
|
#include <Efl.eo.hh>
|
||||||
|
#include "cxx/efl_part_impl.hh"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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<void const*>(this)); }
|
||||||
|
inline efl::Part::operator ::efl::Part&() { return *static_cast< ::efl::Part*>(static_cast<void*>(this)); }
|
||||||
|
inline efl::Part::operator ::efl::Part const&() const { return *static_cast< ::efl::Part const*>(static_cast<void const*>(this)); }
|
||||||
|
} }
|
||||||
|
|
||||||
|
//#endif
|
Loading…
Reference in New Issue