diff --git a/configure.ac b/configure.ac index 6ab4e8761..c40bc2f31 100644 --- a/configure.ac +++ b/configure.ac @@ -822,6 +822,17 @@ define([CHECK_MODULE_WL_FB], ]) AM_CONDITIONAL([HAVE_WL_FB], [test "x${WL_FB}" = "xtrue"]) +WL_EGLFS=false +define([CHECK_MODULE_WL_EGLFS], +[ + if test "x${have_wayland}" = "xyes" ; then + AC_E_CHECK_PKG(WL_EGLFS, [ ecore-fb >= $efl_version ecore >= $efl_version eina >= $efl_version ], [WL_EGLFS=true], [WL_EGLFS=false]) + else + WL_EGLFS=false + fi +]) +AM_CONDITIONAL([HAVE_WL_EGLFS], [test "x${WL_EGLFS}" = "xtrue"]) + WL_DRM=false define([CHECK_MODULE_WL_DRM], [ @@ -918,6 +929,7 @@ AC_E_OPTIONAL_MODULE([wl_desktop_shell], $have_wayland, [CHECK_MODULE_WL_DESKTOP AC_E_OPTIONAL_MODULE([wl_x11], $have_wayland, [CHECK_MODULE_WL_X11]) AC_E_OPTIONAL_MODULE([wl_wl], $have_wayland, [CHECK_MODULE_WL_WL]) #AC_E_OPTIONAL_MODULE([wl_fb], $have_wayland, [CHECK_MODULE_WL_FB]) +AC_E_OPTIONAL_MODULE([wl_eglfs], $have_wayland, [CHECK_MODULE_WL_EGLFS]) AC_E_OPTIONAL_MODULE([wl_drm], $have_wayland, [CHECK_MODULE_WL_DRM]) AC_E_OPTIONAL_MODULE([wl_text_input], $have_wayland, [CHECK_MODULE_WL_TEXT_INPUT]) AC_E_OPTIONAL_MODULE([wl_weekeyboard], $have_wayland, [CHECK_MODULE_WL_WEEKEYBOARD]) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index ce2d1e577..98a8a8d45 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1098,6 +1098,9 @@ e_comp_init(void) #ifdef HAVE_WL_DRM "wl_drm", #endif +#ifdef HAVE_WL_EGLFS + "wl_eglfs", +#endif /* probably add other engines here; fb should be last? */ #ifdef HAVE_WL_FB "wl_fb", diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 7e1a61a44..ba78cbf2b 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -2687,6 +2687,7 @@ e_comp_wl_init(void) { /* set gl available if we have ecore_evas support */ if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_WAYLAND_EGL) || + ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_EGLFS) || ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_DRM)) e_comp_gl_set(EINA_TRUE); diff --git a/src/bin/e_module.c b/src/bin/e_module.c index 2e1648f46..32f2ab360 100644 --- a/src/bin/e_module.c +++ b/src/bin/e_module.c @@ -1008,6 +1008,7 @@ _e_module_whitelist_check(void) "wl_x11", "wl_wl", "wl_drm", + "wl_eglfs", "wl_shell", "wl_desktop_shell", "xkbswitch", diff --git a/src/modules/Makefile.mk b/src/modules/Makefile.mk index 3ea314881..74d281baa 100644 --- a/src/modules/Makefile.mk +++ b/src/modules/Makefile.mk @@ -111,6 +111,8 @@ include src/modules/Makefile_wl_drm.mk include src/modules/Makefile_wl_wl.mk +include src/modules/Makefile_wl_eglfs.mk + include src/modules/Makefile_wl_desktop_shell.mk include src/modules/Makefile_wl_x11.mk diff --git a/src/modules/Makefile_wl_eglfs.mk b/src/modules/Makefile_wl_eglfs.mk new file mode 100644 index 000000000..a29b97f63 --- /dev/null +++ b/src/modules/Makefile_wl_eglfs.mk @@ -0,0 +1,17 @@ +if USE_MODULE_WL_EGLFS +wl_eglfsdir = $(MDIR)/wl_eglfs + +wl_eglfspkgdir = $(MDIR)/wl_eglfs/$(MODULE_ARCH) +wl_eglfspkg_LTLIBRARIES = src/modules/wl_eglfs/module.la + +src_modules_wl_eglfs_module_la_DEPENDENCIES = $(MDEPENDENCIES) +src_modules_wl_eglfs_module_la_CPPFLAGS = $(MOD_CPPFLAGS) @WL_EGLFS_CFLAGS@ @WAYLAND_CFLAGS@ +src_modules_wl_eglfs_module_la_LIBADD = $(LIBS) @WL_EGLFS_LIBS@ @WAYLAND_LIBS@ +src_modules_wl_eglfs_module_la_LDFLAGS = $(MOD_LDFLAGS) +src_modules_wl_eglfs_module_la_SOURCES = src/modules/wl_eglfs/e_mod_main.c + +# TODO: incomplete +#.PHONY: wl_eglfs install-wl_eglfs +#wl_eglfs: $(wl_eglfspkg_LTLIBRARIES) $(wl_eglfs_DATA) +#install-wl_eglfs: install-wl_eglfsDATA install-wl_eglfspkgLTLIBRARIES +endif diff --git a/src/modules/wl_eglfs/e_mod_main.c b/src/modules/wl_eglfs/e_mod_main.c new file mode 100644 index 000000000..98b10b2d7 --- /dev/null +++ b/src/modules/wl_eglfs/e_mod_main.c @@ -0,0 +1,54 @@ +#include "e.h" +#include +#include + +E_API E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_EGLFS" }; + +E_API void * +e_modapi_init(E_Module *m) +{ + Ecore_Evas *ee; + E_Screen *screen; + int w, h; + + printf("LOAD WL_EGLFS MODULE\n"); + + /* try to init ecore_x */ + if (!ecore_fb_init(NULL)) + { + fprintf(stderr, "Could not initialize ecore_fb"); + return NULL; + } + + ecore_fb_size_get(&w, &h); + ee = ecore_evas_eglfs_new(NULL, 0, w, h); + + e_comp->ee = ee; + + if (!e_xinerama_fake_screens_exist()) + { + screen = E_NEW(E_Screen, 1); + screen->escreen = screen->screen = 0; + screen->x = 0; + screen->y = 0; + screen->w = w; + screen->h = h; + e_xinerama_screens_set(eina_list_append(NULL, screen)); + } + e_comp_wl_init(); + e_comp_canvas_init(w, h); + e_comp->pointer = e_pointer_canvas_new(e_comp->ee, EINA_TRUE); + + ecore_wl_init(NULL); + ecore_wl_server_mode_set(1); + return m; +} + +E_API int +e_modapi_shutdown(E_Module *m EINA_UNUSED) +{ + /* shutdown ecore_fb */ + ecore_fb_shutdown(); + + return 1; +}