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

Reply via email to