From: Dirk M. <di...@fr...> - 2008-11-30 19:36:50
|
Author: dmeyer Date: Sun Nov 30 14:36:42 2008 New Revision: 3680 Log: Remove evas and DirectFB support. The evas support is outdated and may not even work with the latest version of evas, kaa.candy is based on clutter and not on evas anymore. The DirectFB support only worked when using evas, so no need for it anymore. This leaves X11, Framebuffer, and SDL support based on imlib2 and basic X11 window handling. Removed: trunk/display/src/dfb.c trunk/display/src/dfb.py trunk/display/test/evas.py Modified: trunk/display/README trunk/display/TODO trunk/display/setup.py trunk/display/src/__init__.py trunk/display/src/common.h trunk/display/src/fb.c trunk/display/src/fb.py trunk/display/src/x11.c trunk/display/src/x11.py Modified: trunk/display/README ============================================================================== --- trunk/display/README (original) +++ trunk/display/README Sun Nov 30 14:36:42 2008 @@ -1,7 +1,6 @@ Low level support for various displays, such as X11 or framebuffer. Provides X11Display and X11Window classes for managing X11 windows, with optional support for Imlib2 (render Imlib2 images to -X11 windows), Evas (both software and OpenGL canvases), and pygame -(render Imlib2 images to pygame surfaces). +X11 windows), and pygame (render Imlib2 images to pygame surfaces). See http://www.freevo.org/kaa for more information Modified: trunk/display/TODO ============================================================================== --- trunk/display/TODO (original) +++ trunk/display/TODO Sun Nov 30 14:36:42 2008 @@ -2,20 +2,8 @@ file should only import some other stuff without too much defining inside. -Better opengl check. If EvasGL is used but the device is broken or the -user has no permission, the code will use the GL software renderer -which is _much_ slower than the evas x11 software render. - Maybe remove that bad pygame hack -Add more (evas based) displays like streaming the display as mpeg -stream. This could be done by using a buffer output and convert it to -mpeg2. This display can also be used to make it work with a DXR3 or -other mpeg decoder based cards. - -Fix DirectFB Evas display. Please check if there is still a bug in -evas and help fixing it. - Create a REAME Every file needs a header and inline docs. Also correct the header to Modified: trunk/display/setup.py ============================================================================== --- trunk/display/setup.py (original) +++ trunk/display/setup.py Sun Nov 30 14:36:42 2008 @@ -6,7 +6,7 @@ # # ----------------------------------------------------------------------------- # kaa.display - Display module -# Copyright (C) 2005, 2006 Dirk Meyer, Jason Tackaberry +# Copyright (C) 2005, 2006, 2008 Dirk Meyer, Jason Tackaberry # # First Edition: Dirk Meyer <dm...@tz...> # Maintainer: Dirk Meyer <dm...@tz...> @@ -54,8 +54,6 @@ check_library('X11', ['<X11/Xlib.h>'], '') check_library('imlib2', '1.1.1') -evas = check_library('evas', '0.9.9.010') -check_library('directfb', '0.9.20') print 'checking for pygame', '...', sys.__stdout__.flush() @@ -68,7 +66,6 @@ pygame.__path__[0]).replace("site-packages/", "") if not os.path.isdir(inc): raise ImportError - print 'ok' check_library('sdl', '1.2.5') pygame = inc @@ -81,8 +78,6 @@ if get_library('imlib2'): config.define('USE_IMLIB2') -if get_library('evas'): - config.define('USE_EVAS') if get_library('X11'): @@ -98,14 +93,13 @@ config.define('HAVE_X11_COMPOSITE') x11.add_library('XComposite') - features = { 'with': [], 'without': [] } imlib2 = get_library('imlib2') if 'imlib2-x11' in disable or 'imlib2' in disable: - features['without'].append('imlib2') + print '+ X11 (no imlib2)' elif imlib2 and imlib2.compile(['<Imlib2.h>'], 'imlib_context_set_display(NULL);'): config.define('USE_IMLIB2_X11') x11.add_library('imlib2') - features['with'].append('imlib2') + print '+ X11 (imlib2)' elif imlib2: print print 'Imlib2 was compiled without X11 support. Therefore Imlib2 for the' @@ -120,23 +114,6 @@ print 'parameter.' print sys.exit(1) - if evas and evas.compile(['<Evas.h>', '<Evas_Engine_Software_X11.h>']): - features['with'].append('evas') - x11.add_library('evas') - config.define('ENABLE_ENGINE_SOFTWARE_X11') - else: - features['without'].append('evas') - - if evas and evas.compile(['<Evas.h>', '<Evas_Engine_GL_X11.h>']): - features['with'].append('evasGL') - x11.add_library('evas') - x11.libraries.append("GL") - config.define('ENABLE_ENGINE_GL_X11') - else: - features['without'].append('evasGL') - - features = ', '.join(features['with'] + [ 'no %s' % x for x in features['without'] ]) - print '+ X11 (%s)' % features modules.append(x11) else: print '- X11' @@ -146,33 +123,12 @@ # the framebuffer so module fb = Extension('kaa.display._FBmodule', [ 'src/fb.c', 'src/common.c']) fb.add_library('imlib2') - if evas and evas.compile(['<Evas.h>', '<Evas_Engine_FB.h>']): - fb.add_library('evas') - config.define('ENABLE_ENGINE_FB') - print "+ Framebuffer (imlib2, evas)" - else: - print "+ Framebuffer (imlib2, no evas)" + print "+ Framebuffer (imlib2)" modules.append(fb) else: print "- Framebuffer" -if get_library('directfb'): - - # the dfb so module - dfb = Extension('kaa.display._DFBmodule', [ 'src/dfb.c', 'src/common.c'] ) - dfb.add_library('directfb') - if evas and evas.compile(['<Evas.h>', '<Evas_Engine_DirectFB.h>'], extra_libraries = ['directfb']): - print "+ DirectFB (evas)" - dfb.add_library('evas') - config.define('ENABLE_ENGINE_DIRECTFB') - else: - print "+ DirectFB" - modules.append(dfb) -else: - print "- DirectFB" - - if pygame and get_library('sdl') and get_library('imlib2') and not 'imlib2' in disable: # pygame module @@ -187,9 +143,9 @@ requires_common = 'python-kaa-base >= 0.1.2, pygame >= 1.6.0, python-kaa-imlib2 >= 0.2.0,' \ - 'imlib2 >= 1.2.1, python-kaa-evas >= 0.1.0, evas >= 0.9.9.032' + 'imlib2 >= 1.2.1' build_requires_common = 'python-kaa-base >= 0.1.2, pygame-devel >= 1.6.0, python-kaa-imlib2 >= 0.2.0,' \ - 'imlib2-devel >= 1.2.1, python-kaa-evas >= 0.1.0, evas-devel >= 0.9.9.032' + 'imlib2-devel >= 1.2.1' setup(module = 'display', version = '0.1.0', Modified: trunk/display/src/__init__.py ============================================================================== --- trunk/display/src/__init__.py (original) +++ trunk/display/src/__init__.py Sun Nov 30 14:36:42 2008 @@ -42,10 +42,10 @@ # import X11 support try: - from x11 import X11Display, X11Window, EvasX11Window + from x11 import X11Display, X11Window displays.append('x11') except ImportError, e: - X11Display = X11Window = EvasX11Window = ImportErrorWrapper('X11') + X11Display = X11Window = ImportErrorWrapper('X11') # import GTK support try: @@ -56,18 +56,11 @@ # import Framebuffer support try: - from fb import Framebuffer, EvasFramebuffer, PAL_768x576, PAL_800x600, \ + from fb import Framebuffer, PAL_768x576, PAL_800x600, \ NTSC_640x480, NTSC_768x576, NTSC_800x600 displays.append('framebuffer') except ImportError, e: - Framebuffer = EvasFramebuffer = ImportErrorWrapper('framebuffer') - -# import DirectFB support -try: - from dfb import DirectFB, EvasDirectFB - displays.append('directfb') -except ImportError, e: - DirectFB = EvasDirectFB = ImportErrorWrapper('directfb') + Framebuffer = ImportErrorWrapper('framebuffer') # import SDL support try: Modified: trunk/display/src/common.h ============================================================================== --- trunk/display/src/common.h (original) +++ trunk/display/src/common.h Sun Nov 30 14:36:42 2008 @@ -31,13 +31,6 @@ void **get_module_api(char *module); -#define CHECK_EVAS_PYOBJECT \ - if (!Evas_PyObject_Type) { \ - PyErr_Format(PyExc_SystemError, "kaa.evas is required but is not available."); \ - return NULL; \ - } - - #define CHECK_IMAGE_PYOBJECT \ if (!Image_PyObject_Type) { \ PyErr_Format(PyExc_SystemError, "kaa.imlib2 is required but is not available."); \ Modified: trunk/display/src/fb.c ============================================================================== --- trunk/display/src/fb.c (original) +++ trunk/display/src/fb.c Sun Nov 30 14:36:42 2008 @@ -53,13 +53,6 @@ PyTypeObject *Image_PyObject_Type = NULL; -#ifdef ENABLE_ENGINE_FB -#include <Evas.h> -#include <Evas_Engine_FB.h> -PyTypeObject *Evas_PyObject_Type = NULL; -Evas *(*evas_object_from_pyobject)(PyObject *pyevas); -#endif - int fb_fd = 0; int *fb_mem = 0; @@ -245,42 +238,6 @@ } -#ifdef ENABLE_ENGINE_FB -PyObject * -new_evas_fb(PyObject *self, PyObject *args, PyObject *kwargs) -{ - Evas_Engine_Info_FB *einfo; - PyObject *evas_pyobject; - Evas *evas; - - CHECK_EVAS_PYOBJECT - - if (!PyArg_ParseTuple(args, "O!", Evas_PyObject_Type, &evas_pyobject)) - return NULL; - - evas = evas_object_from_pyobject(evas_pyobject); - - evas_output_method_set(evas, evas_render_method_lookup("fb")); - einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(evas); - if (!einfo) { - PyErr_Format(PyExc_SystemError, "Evas is not built with FB support."); - return NULL; - } - - /* the following is specific to the engine */ - einfo->info.virtual_terminal = 0; - einfo->info.device_number = 0; - einfo->info.refresh = 0; - einfo->info.rotation = 0; - - evas_output_size_set(evas, fb_var.xres, fb_var.yres); - evas_output_viewport_set(evas, 0, 0, fb_var.xres, fb_var.yres); - - evas_engine_info_set(evas, (Evas_Engine_Info *) einfo); - Py_INCREF(Py_None); - return Py_None; -} -#endif // ENABLE_ENGINE_FB PyMethodDef fb_methods[] = { { "open", (PyCFunction) fb_open, METH_VARARGS }, @@ -289,9 +246,6 @@ { "size", (PyCFunction) fb_size, METH_VARARGS }, { "depth", (PyCFunction) fb_depth, METH_VARARGS }, { "info", (PyCFunction) fb_info, METH_VARARGS }, -#ifdef ENABLE_ENGINE_FB - { "new_evas_fb", (PyCFunction) new_evas_fb, METH_VARARGS | METH_KEYWORDS }, -#endif { NULL } }; @@ -307,18 +261,4 @@ Image_PyObject_Type = imlib2_api_ptrs[1]; } else PyErr_Clear(); - -#ifdef ENABLE_ENGINE_FB -{ - // Import kaa-evas's C api - void **evas_api_ptrs = get_module_api("kaa.evas._evas"); - if (evas_api_ptrs != NULL) { - evas_object_from_pyobject = evas_api_ptrs[0]; - Evas_PyObject_Type = evas_api_ptrs[1]; - } else - PyErr_Clear(); -} - -#endif - } Modified: trunk/display/src/fb.py ============================================================================== --- trunk/display/src/fb.py (original) +++ trunk/display/src/fb.py Sun Nov 30 14:36:42 2008 @@ -30,7 +30,7 @@ # ----------------------------------------------------------------------------- __all__ = [ 'PAL_768x576', 'PAL_800x600', 'NTSC_640x480', 'NTSC_768x576', - 'NTSC_800x600', 'Framebuffer', 'EvasFramebuffer' ] + 'NTSC_800x600', 'Framebuffer' ] import _FBmodule as fb @@ -137,24 +137,3 @@ Update the framebuffer. """ fb.update(self.image._image) - - -class EvasFramebuffer(_Framebuffer): - """ - Frambuffer using evas for drawing - The 'mode' argument can either be a size (width, height) matching one of - the specified framebuffer resolutions, a list for fbset or None. If set to - None, the current framebuffer size will be used. - """ - def __init__(self, mode=None): - _Framebuffer.__init__(self, mode) - import kaa.evas - self._evas = kaa.evas.Evas() - fb.new_evas_fb(self._evas._evas) - - - def get_evas(self): - """ - Return evas object. - """ - return self._evas Modified: trunk/display/src/x11.c ============================================================================== --- trunk/display/src/x11.c (original) +++ trunk/display/src/x11.c Sun Nov 30 14:36:42 2008 @@ -37,22 +37,6 @@ #include "common.h" -#if defined(ENABLE_ENGINE_SOFTWARE_X11) || defined(ENABLE_ENGINE_GL_X11) -#include <Evas.h> -Evas *(*evas_object_from_pyobject)(PyObject *pyevas); -PyTypeObject *Evas_PyObject_Type = NULL; -#endif - -#ifdef ENABLE_ENGINE_SOFTWARE_X11 -#include <Evas_Engine_Software_X11.h> -#endif - -#ifdef ENABLE_ENGINE_GL_X11 -#include <Evas_Engine_GL_X11.h> -#include <GL/gl.h> -#include <GL/glx.h> -#endif - #if defined(USE_IMLIB2_X11) && !defined(X_DISPLAY_MISSING) #include <X11/Xlib.h> #include <Imlib2.h> @@ -61,141 +45,6 @@ #endif - -#if defined(ENABLE_ENGINE_SOFTWARE_X11) || defined(ENABLE_ENGINE_GL_X11) -X11Window_PyObject * -engine_common_x11_setup(Evas *evas, PyObject *kwargs, - X11Display_PyObject *disp, - Visual *(*best_visual_get)(Display *, int), - Colormap (*best_colormap_get)(Display *, int), - int (*best_depth_get)(Display *, int), - Display **ei_display, Drawable *ei_drawable, Visual **ei_visual, - Colormap *ei_colormap, int *ei_depth) -{ - X11Window_PyObject *win_object, *py_parent; - Window win, parent; - XSetWindowAttributes attr; - int screen, w, h; - char *title = NULL; - - if (!PyArg_ParseTuple(PyDict_GetItemString(kwargs, "size"), "ii", &w, &h)) - return NULL; - py_parent = (X11Window_PyObject *)PyDict_GetItemString(kwargs, "parent"); - if (PyMapping_HasKeyString(kwargs, "title")) - title = PyString_AsString(PyDict_GetItemString(kwargs, "title")); - - if (py_parent) { - parent = py_parent->window; - } - else - parent = DefaultRootWindow(disp->display); - - attr.backing_store = NotUseful; - attr.border_pixel = 0; - attr.background_pixmap = None; - attr.event_mask = ExposureMask | ButtonPressMask | ButtonReleaseMask | - StructureNotifyMask | PointerMotionMask | KeyPressMask | FocusChangeMask; - attr.bit_gravity = ForgetGravity; - - *ei_display = disp->display; - XLockDisplay(*ei_display); - screen = DefaultScreen(*ei_display); - - *ei_visual = best_visual_get(*ei_display, screen); - *ei_colormap = attr.colormap = best_colormap_get(*ei_display, screen); - *ei_depth = best_depth_get(*ei_display, screen); - - win = XCreateWindow(*ei_display, parent, 0, 0, - w, h, 0, *ei_depth, InputOutput, *ei_visual, - CWBackingStore | CWColormap | CWBackPixmap | - CWBitGravity | CWEventMask, &attr); - - *ei_drawable = win; - if (title) - XStoreName(*ei_display, win, title); - XUnlockDisplay(*ei_display); - - win_object = X11Window_PyObject__wrap((PyObject *)disp, win); - return win_object; -} - -#define ENGINE_COMMON_X11_SETUP(evas, kwargs, display, func, info) \ - engine_common_x11_setup(evas, kwargs, display, \ - func.best_visual_get, func.best_colormap_get, func.best_depth_get, \ - &info.display, &info.drawable, &info.visual, &info.colormap, \ - &info.depth); - - -#ifdef ENABLE_ENGINE_SOFTWARE_X11 -X11Window_PyObject * -new_evas_software_x11(PyObject *self, PyObject *args, PyObject *kwargs) -{ - Evas_Engine_Info_Software_X11 *einfo; - X11Window_PyObject *x11; - X11Display_PyObject *display; - PyObject *evas_pyobject; - Evas *evas; - - CHECK_EVAS_PYOBJECT - - if (!PyArg_ParseTuple(args, "O!O!", Evas_PyObject_Type, &evas_pyobject, - &X11Display_PyObject_Type, &display)) - return NULL; - - evas = evas_object_from_pyobject(evas_pyobject); - evas_output_method_set(evas, evas_render_method_lookup("software_x11")); - einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas); - if (!einfo) { - PyErr_Format(PyExc_SystemError, "Evas is not built with Software X11 support."); - return NULL; - } - - x11 = ENGINE_COMMON_X11_SETUP(evas, kwargs, display, einfo->func, - einfo->info); - - einfo->info.rotation = 0; - einfo->info.debug = 0; - - evas_engine_info_set(evas, (Evas_Engine_Info *) einfo); - return x11; -} -#endif - -#ifdef ENABLE_ENGINE_GL_X11 -X11Window_PyObject * -new_evas_gl_x11(PyObject *self, PyObject *args, PyObject *kwargs) -{ - Evas_Engine_Info_GL_X11 *einfo; - X11Window_PyObject *x11; - X11Display_PyObject *display; - PyObject *evas_pyobject; - Evas *evas; - - CHECK_EVAS_PYOBJECT - - if (!PyArg_ParseTuple(args, "O!O!", Evas_PyObject_Type, &evas_pyobject, - &X11Display_PyObject_Type, &display)) - return NULL; - - evas = evas_object_from_pyobject(evas_pyobject); - - evas_output_method_set(evas, evas_render_method_lookup("gl_x11")); - einfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(evas); - if (!einfo) { - PyErr_Format(PyExc_SystemError, "Evas is not built with GLX support."); - return NULL; - } - - x11 = ENGINE_COMMON_X11_SETUP(evas, kwargs, display, einfo->func, einfo->info); - evas_engine_info_set(evas, (Evas_Engine_Info *) einfo); - return x11; -} -#endif - -#endif /* defined(ENABLE_ENGINE_GL_X11) || - defined (ENABLE_ENGINE_SOFTWARE_X11) */ - - PyObject *render_imlib2_image(PyObject *self, PyObject *args) { #if defined(USE_IMLIB2_X11) && !defined(X_DISPLAY_MISSING) @@ -292,12 +141,6 @@ PyMethodDef display_methods[] = { { "render_imlib2_image", (PyCFunction) render_imlib2_image, METH_VARARGS }, { "set_shape_mask_from_imlib2_image", (PyCFunction) set_shape_mask_from_imlib2_image, METH_VARARGS }, -#ifdef ENABLE_ENGINE_SOFTWARE_X11 - { "new_evas_software_x11", (PyCFunction) new_evas_software_x11, METH_VARARGS | METH_KEYWORDS }, -#endif -#ifdef ENABLE_ENGINE_GL_X11 - { "new_evas_gl_x11", (PyCFunction) new_evas_gl_x11, METH_VARARGS | METH_KEYWORDS }, -#endif { NULL } }; @@ -338,18 +181,6 @@ } #endif -#if defined(ENABLE_ENGINE_SOFTWARE_X11) || defined(ENABLE_ENGINE_GL_X11) -{ - // Import kaa-evas's C api - void **evas_api_ptrs = get_module_api("kaa.evas._evas"); - if (evas_api_ptrs != NULL) { - evas_object_from_pyobject = evas_api_ptrs[0]; - Evas_PyObject_Type = evas_api_ptrs[1]; - } else - PyErr_Clear(); -} -#endif - if (!XInitThreads()) PyErr_Format(PyExc_SystemError, "Unable to initialize X11 threads."); } Modified: trunk/display/src/x11.py ============================================================================== --- trunk/display/src/x11.py (original) +++ trunk/display/src/x11.py Sun Nov 30 14:36:42 2008 @@ -522,58 +522,3 @@ @param setting: True if the window should be decorated, false if not. """ self._window.set_decorated(setting) - - -class EvasX11Window(X11Window): - def __init__(self, gl = False, display = None, size = (640, 480), - title = "Evas", **kwargs): - import kaa.evas - - if not gl: - f = _X11.new_evas_software_x11 - else: - f = _X11.new_evas_gl_x11 - - if "parent" in kwargs: - assert(isinstance(kwargs["parent"], X11Window)) - kwargs["parent"] = kwargs["parent"]._window - - assert(type(size) in (list, tuple)) - display = _get_display(display) - self._evas = kaa.evas.Evas() - window = f(self._evas._evas, display._display, size = size, - title = title, **kwargs) - self._evas.output_size_set(size) - self._evas.viewport_set((0, 0), size) - - # Ensures the display remains alive until after Evas gets deallocated - # during garbage collection. - self._evas._dependencies.append(display._display) - self._evas._dependencies.append(window) - if "parent" in kwargs: - self._evas._dependencies.append(kwargs["parent"]) - super(EvasX11Window, self).__init__(display, window) - - - def handle_events(self, events): - needs_render = False - for event, data in events: - if event == X11Display.XEVENT_EXPOSE: - self._evas.damage_rectangle_add((data["pos"], data["size"])) - needs_render = True - #elif event == X11Display.XEVENT_CONFIGURE_NOTIFY: - # if data["size"] != self._evas.output_size_get(): - # # This doesn't act right for gl. - # self._evas.output_size_set(data["size"]) - # #self._evas.viewport_set((0, 0), data["size"]) - # needs_render = True - - super(EvasX11Window, self).handle_events(events) - - if needs_render: - self._evas.render() - self._display.handle_events() - - - def get_evas(self): - return self._evas |