Adds eglfs to Enlightenment
authorFlorent Revest <revestflo@gmail.com>
Tue, 21 Jul 2015 16:09:04 +0000 (18:09 +0200)
committerNicolas Aguirre <aguirre.nicolas@gmail.com>
Tue, 3 Nov 2015 06:37:41 +0000 (07:37 +0100)
configure.ac
src/bin/e_comp.c
src/bin/e_comp_wl.c
src/bin/e_module.c
src/modules/Makefile.mk
src/modules/Makefile_wl_eglfs.mk [new file with mode: 0644]
src/modules/wl_eglfs/e_mod_main.c [new file with mode: 0644]

index 6ab4e87..c40bc2f 100644 (file)
@@ -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])
index 655186c..09a2989 100644 (file)
@@ -1095,6 +1095,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",
index 5fef8a8..4e2e3d6 100644 (file)
@@ -2673,6 +2673,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);
 
index 2e1648f..32f2ab3 100644 (file)
@@ -1008,6 +1008,7 @@ _e_module_whitelist_check(void)
       "wl_x11",
       "wl_wl",
       "wl_drm",
+      "wl_eglfs",
       "wl_shell",
       "wl_desktop_shell",
       "xkbswitch",
index 3ea3148..74d281b 100644 (file)
@@ -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 (file)
index 0000000..a29b97f
--- /dev/null
@@ -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 (file)
index 0000000..98b10b2
--- /dev/null
@@ -0,0 +1,54 @@
+#include "e.h"
+#include <Ecore_Fb.h>
+#include <Ecore_Wayland.h>
+
+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;
+}