Enlightenment CVS committal Author : ulisses Project : e17 Module : proto/python-efl
Dir : e17/proto/python-efl/python-evas/evas Modified Files: evas.c_evas.pyx evas.c_evas_object.pxi evas.c_evas_object_gradient.pxi evas.c_evas_object_image.pxi evas.c_evas_object_line.pxi evas.c_evas_object_polygon.pxi evas.c_evas_object_rectangle.pxi evas.c_evas_object_smart.pxi evas.c_evas_object_text.pxi Log Message: More metaclass work. - changed EvasMeta to EvasObjectMeta to better describe it - removed specific functions to install metaclass (we just need one) - added metaclass for smart objects to optimize the lookup of Evas_Smart =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas.pyx,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- evas.c_evas.pyx 8 Oct 2007 00:02:18 -0000 1.12 +++ evas.c_evas.pyx 8 Oct 2007 15:09:01 -0000 1.13 @@ -286,21 +286,7 @@ ctype.ob_type = <python.PyTypeObject*>metaclass -include "evas.c_evas_rect.pxi" -include "evas.c_evas_canvas.pxi" -include "evas.c_evas_object_events.pxi" -include "evas.c_evas_object_callbacks.pxi" -include "evas.c_evas_object.pxi" -include "evas.c_evas_object_smart.pxi" -include "evas.c_evas_object_rectangle.pxi" -include "evas.c_evas_object_line.pxi" -include "evas.c_evas_object_image.pxi" -include "evas.c_evas_object_gradient.pxi" -include "evas.c_evas_object_polygon.pxi" -include "evas.c_evas_object_text.pxi" - - -class EvasMeta(type): +class EvasObjectMeta(type): def __init__(cls, name, bases, dict_): type.__init__(cls, name, bases, dict_) cls._fetch_evt_callbacks() @@ -320,14 +306,15 @@ append((name, evt)) -# installing metaclass for all extension types -_object_install_metaclass(EvasMeta) -_smartobj_install_metaclass(EvasMeta) -_clippedsmartobj_install_metaclass(EvasMeta) -_rectangle_install_metaclass(EvasMeta) -_line_install_metaclass(EvasMeta) -_image_install_metaclass(EvasMeta) -_filledimage_install_metaclass(EvasMeta) -_gradient_install_metaclass(EvasMeta) -_polygon_install_metaclass(EvasMeta) -_text_install_metaclass(EvasMeta) +include "evas.c_evas_rect.pxi" +include "evas.c_evas_canvas.pxi" +include "evas.c_evas_object_events.pxi" +include "evas.c_evas_object_callbacks.pxi" +include "evas.c_evas_object.pxi" +include "evas.c_evas_object_smart.pxi" +include "evas.c_evas_object_rectangle.pxi" +include "evas.c_evas_object_line.pxi" +include "evas.c_evas_object_image.pxi" +include "evas.c_evas_object_gradient.pxi" +include "evas.c_evas_object_polygon.pxi" +include "evas.c_evas_object_text.pxi" =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object.pxi,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- evas.c_evas_object.pxi 8 Oct 2007 00:02:18 -0000 1.19 +++ evas.c_evas_object.pxi 8 Oct 2007 15:09:01 -0000 1.20 @@ -1201,5 +1201,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasObject_Type # hack to install metaclass -cdef void _object_install_metaclass(object metaclass): - _install_metaclass(&PyEvasObject_Type, metaclass) +_install_metaclass(&PyEvasObject_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_gradient.pxi,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evas.c_evas_object_gradient.pxi 8 Oct 2007 00:02:18 -0000 1.5 +++ evas.c_evas_object_gradient.pxi 8 Oct 2007 15:09:01 -0000 1.6 @@ -226,5 +226,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasGradient_Type # hack to install metaclass -cdef void _gradient_install_metaclass(object metaclass): - _install_metaclass(&PyEvasGradient_Type, metaclass) +_install_metaclass(&PyEvasGradient_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_image.pxi,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- evas.c_evas_object_image.pxi 8 Oct 2007 00:02:18 -0000 1.9 +++ evas.c_evas_object_image.pxi 8 Oct 2007 15:09:01 -0000 1.10 @@ -347,8 +347,7 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasImage_Type # hack to install metaclass -cdef void _image_install_metaclass(object metaclass): - _install_metaclass(&PyEvasImage_Type, metaclass) +_install_metaclass(&PyEvasImage_Type, EvasObjectMeta) cdef void _cb_on_filled_image_resize(void *data, Evas *e, @@ -378,5 +377,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasFilledImage_Type # hack to install metaclass -cdef void _filledimage_install_metaclass(object metaclass): - _install_metaclass(&PyEvasFilledImage_Type, metaclass) +_install_metaclass(&PyEvasFilledImage_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_line.pxi,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evas.c_evas_object_line.pxi 8 Oct 2007 00:02:18 -0000 1.5 +++ evas.c_evas_object_line.pxi 8 Oct 2007 15:09:01 -0000 1.6 @@ -121,5 +121,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasLine_Type # hack to install metaclass -cdef void _line_install_metaclass(object metaclass): - _install_metaclass(&PyEvasLine_Type, metaclass) +_install_metaclass(&PyEvasLine_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_polygon.pxi,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- evas.c_evas_object_polygon.pxi 8 Oct 2007 00:02:18 -0000 1.4 +++ evas.c_evas_object_polygon.pxi 8 Oct 2007 15:09:01 -0000 1.5 @@ -28,5 +28,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasPolygon_Type # hack to install metaclass -cdef void _polygon_install_metaclass(object metaclass): - _install_metaclass(&PyEvasPolygon_Type, metaclass) +_install_metaclass(&PyEvasPolygon_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_rectangle.pxi,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- evas.c_evas_object_rectangle.pxi 8 Oct 2007 00:02:18 -0000 1.4 +++ evas.c_evas_object_rectangle.pxi 8 Oct 2007 15:09:01 -0000 1.5 @@ -12,5 +12,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasRectangle_Type # hack to install metaclass -cdef void _rectangle_install_metaclass(object metaclass): - _install_metaclass(&PyEvasRectangle_Type, metaclass) +_install_metaclass(&PyEvasRectangle_Type, EvasObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_smart.pxi,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- evas.c_evas_object_smart.pxi 8 Oct 2007 00:02:18 -0000 1.20 +++ evas.c_evas_object_smart.pxi 8 Oct 2007 15:09:01 -0000 1.21 @@ -1,7 +1,5 @@ # This file is included verbatim by c_evas.pyx -cdef object _smart_objects -_smart_objects = dict() cdef object _smart_classes _smart_classes = list() @@ -180,18 +178,18 @@ return <long>cls -cdef Evas_Smart *_smart_class_from_name(char *name) except NULL: - cdef long addr - key = name - # XXX: for optimizations this should be a try-except KeyError, - # XXX: but it just don't work, I'm getting non-released objects - # XXX: due pending references (Pyrex 0.9.5.1a). - if key in _smart_objects: - addr = _smart_objects[key] - else: - addr = _smart_object_class_new(name) - _smart_objects[key] = addr - return <Evas_Smart*>addr +class EvasSmartObjectMeta(EvasObjectMeta): + def __init__(cls, name, bases, dict_): + EvasObjectMeta.__init__(cls, name, bases, dict_) + cls._setup_smart_class() + + def _setup_smart_class(cls): + if "__evas_smart_class__" in cls.__dict__: + return + + cdef long addr + addr = _smart_object_class_new(cls.__name__) + cls.__evas_smart_class__ = addr cdef object _smart_class_get_impl_method(object cls, char *name): @@ -296,13 +294,14 @@ self._smart_callbacks = None def __init__(self, Canvas canvas not None, **kargs): - cdef Evas_Smart *cls + cdef long addr if type(self) is SmartObject: raise TypeError("Must not instantiate SmartObject, but subclasses") Object.__init__(self, canvas) if self.obj == NULL: - cls = _smart_class_from_name(self.__class__.__name__) - self._set_obj(evas_object_smart_add(self.evas.obj, cls)) + addr = self.__evas_smart_class__ + self._set_obj(evas_object_smart_add(self.evas.obj, + <Evas_Smart*>addr)) self._set_common_params(**kargs) def member_add(self, Object child): @@ -526,8 +525,7 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasSmartObject_Type # hack to install metaclass -cdef void _smartobj_install_metaclass(object metaclass): - _install_metaclass(&PyEvasSmartObject_Type, metaclass) +_install_metaclass(&PyEvasSmartObject_Type, EvasSmartObjectMeta) cdef public class ClippedSmartObject(SmartObject) \ @@ -602,5 +600,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasClippedSmartObject_Type # hack to install metaclass -cdef void _clippedsmartobj_install_metaclass(object metaclass): - _install_metaclass(&PyEvasClippedSmartObject_Type, metaclass) +_install_metaclass(&PyEvasClippedSmartObject_Type, EvasSmartObjectMeta) =================================================================== RCS file: /cvs/e/e17/proto/python-efl/python-evas/evas/evas.c_evas_object_text.pxi,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evas.c_evas_object_text.pxi 8 Oct 2007 00:02:18 -0000 1.5 +++ evas.c_evas_object_text.pxi 8 Oct 2007 15:09:01 -0000 1.6 @@ -335,5 +335,4 @@ cdef extern from "Python.h": cdef python.PyTypeObject PyEvasText_Type # hack to install metaclass -cdef void _text_install_metaclass(object metaclass): - _install_metaclass(&PyEvasText_Type, metaclass) +_install_metaclass(&PyEvasText_Type, EvasObjectMeta) ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs