gcompris r3606 - branches/gcomprixogoo/src/boards



Author: bcoudoin
Date: Sun Nov  9 22:22:35 2008
New Revision: 3606
URL: http://svn.gnome.org/viewvc/gcompris?rev=3606&view=rev

Log:
Added support for goocanvas svg in python


Added:
   branches/gcomprixogoo/src/boards/goocanvas.defs
   branches/gcomprixogoo/src/boards/goocanvas.override
Modified:
   branches/gcomprixogoo/src/boards/goocanvas.c
   branches/gcomprixogoo/src/boards/py-mod-utils.c

Modified: branches/gcomprixogoo/src/boards/goocanvas.c
==============================================================================
--- branches/gcomprixogoo/src/boards/goocanvas.c	(original)
+++ branches/gcomprixogoo/src/boards/goocanvas.c	Sun Nov  9 22:22:35 2008
@@ -207,8 +207,6 @@
 #define PyGtkContainer_Type (*_PyGtkContainer_Type)
 static PyTypeObject *_PyGtkAdjustment_Type;
 #define PyGtkAdjustment_Type (*_PyGtkAdjustment_Type)
-static PyTypeObject *_PyGdkCairoContext_Type;
-#define PyGdkCairoContext_Type (*_PyGdkCairoContext_Type)
 
 
 /* ---------- forward type declarations ---------- */
@@ -221,6 +219,7 @@
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasEllipseModel_Type;
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasItemSimple_Type;
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasImage_Type;
+PyTypeObject G_GNUC_INTERNAL PyGooCanvasSvg_Type;
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasGroup_Type;
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasEllipse_Type;
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasPath_Type;
@@ -290,7 +289,7 @@
 }
 
 
-#line 294 "goocanvas.c"
+#line 293 "goocanvas.c"
 
 
 
@@ -304,11 +303,11 @@
     PyObject *py_data;
     gint i, n_data;
     GooCanvasPoints *points;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                 "O!:GooCanvasPoints.__init__",
-                                kwlist, &PyList_Type, &py_data)) 
-        return -1; 
+                                kwlist, &PyList_Type, &py_data))
+        return -1;
     n_data = PyList_Size(py_data);
     points = goo_canvas_points_new(n_data);
     for (i = 0; i < n_data; i ++) {
@@ -323,52 +322,9 @@
     self->gtype = GOO_TYPE_CANVAS_POINTS;
     return 0;
 }
-#line 327 "goocanvas.c"
-
-
-#line 1880 "goocanvas.override"
-
-static PyObject *
-_wrap_goo_canvas_points__get_coords(PyObject *self, void *closure)
-{
-    gdouble     *coords;
-    int         num_points, i;
-    PyObject    *ret = Py_None;
-    
-    num_points = pyg_boxed_get(self, GooCanvasPoints)->num_points;
-    coords = pyg_boxed_get(self, GooCanvasPoints)->coords;
-    
-    if (num_points > 0) {
-        ret = PyList_New(num_points);
-        
-        for (i = 0; i < num_points; i ++) {
-            PyObject *py_temp = Py_BuildValue("dd", coords[2*i], coords[2*i + 1]);
-            PyList_SetItem(ret, i, py_temp);
-        }
-        return ret;
-    }
-    Py_INCREF(ret);    
-    return ret;
-}
-
-#line 355 "goocanvas.c"
+#line 326 "goocanvas.c"
 
 
-static PyObject *
-_wrap_goo_canvas_points__get_num_points(PyObject *self, void *closure)
-{
-    int ret;
-
-    ret = pyg_boxed_get(self, GooCanvasPoints)->num_points;
-    return PyInt_FromLong(ret);
-}
-
-static const PyGetSetDef goo_canvas_points_getsets[] = {
-    { "coords", (getter)_wrap_goo_canvas_points__get_coords, (setter)0 },
-    { "num_points", (getter)_wrap_goo_canvas_points__get_num_points, (setter)0 },
-    { NULL, (getter)0, (setter)0 },
-};
-
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasPoints_Type = {
     PyObject_HEAD_INIT(NULL)
     0,                                 /* ob_size */
@@ -401,7 +357,7 @@
     (iternextfunc)0,     /* tp_iternext */
     (struct PyMethodDef*)NULL, /* tp_methods */
     (struct PyMemberDef*)0,              /* tp_members */
-    (struct PyGetSetDef*)goo_canvas_points_getsets,  /* tp_getset */
+    (struct PyGetSetDef*)0,  /* tp_getset */
     NULL,                              /* tp_base */
     NULL,                              /* tp_dict */
     (descrgetfunc)0,    /* tp_descr_get */
@@ -455,7 +411,7 @@
     self->free_on_dealloc = TRUE;
     return 0;
 }
-#line 459 "goocanvas.c"
+#line 415 "goocanvas.c"
 
 
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasLineDash_Type = {
@@ -623,29 +579,29 @@
     gdouble         x, y;
     GList           *item_list;
     gboolean        is_pointer_event;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                      "ddO:get_items_at",
                                      kwlist,
                                      &x, &y, &point_event))
         return NULL;
-    
+
     is_pointer_event = (PyObject_IsTrue(point_event)) ? TRUE : FALSE;
-    
+
     item_list = goo_canvas_get_items_at(GOO_CANVAS(self->obj),
                                         x, y, is_pointer_event);
-    
+
     if (!item_list) {
         Py_INCREF (Py_None);
         return Py_None;
     }
-    
+
     ret = _glist_to_pylist_objs(item_list);
     g_list_free(item_list);
     return ret;
 }
 
-#line 649 "goocanvas.c"
+#line 605 "goocanvas.c"
 
 
 #line 1469 "goocanvas.override"
@@ -658,7 +614,7 @@
     PyObject        *area;
     GList           *item_list;
     gboolean        inside, include_cont, include_over;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                      "O!OOO:get_items_at",
                                      kwlist,
@@ -669,7 +625,7 @@
     inside = (PyObject_IsTrue(inside_area)) ? TRUE : FALSE;
     include_cont = (PyObject_IsTrue(include_containers)) ? TRUE : FALSE;
     include_over = (PyObject_IsTrue(include_overlaps)) ? TRUE : FALSE;
-    
+
     item_list = goo_canvas_get_items_in_area (GOO_CANVAS(self->obj),
                                               &((PyGooCanvasBounds *) area)->bounds,
                                               inside,
@@ -679,14 +635,14 @@
         Py_INCREF (Py_None);
         return Py_None;
     }
-    
-    
+
+
     ret = _glist_to_pylist_objs(item_list);
     g_list_free(item_list);
     return ret;
 }
 
-#line 690 "goocanvas.c"
+#line 646 "goocanvas.c"
 
 
 static PyObject *
@@ -720,13 +676,13 @@
 _wrap_goo_canvas_get_bounds(PyGObject *self)
 {
     gdouble left, right, top, bottom;
-    
+
     goo_canvas_get_bounds(GOO_CANVAS(self->obj), &left, &right, &top, &bottom);
-    
+
     return Py_BuildValue("dddd", left, right, top, bottom);
 }
 
-#line 730 "goocanvas.c"
+#line 686 "goocanvas.c"
 
 
 static PyObject *
@@ -805,13 +761,13 @@
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dd:GooCanvas.convert_to_pixels", kwlist, &x, &y))
         return NULL;
-    
+
     goo_canvas_convert_to_pixels(GOO_CANVAS(self->obj), &x, &y);
-    
+
     return Py_BuildValue("dd", x, y);
 }
 
-#line 815 "goocanvas.c"
+#line 771 "goocanvas.c"
 
 
 #line 556 "goocanvas.override"
@@ -823,13 +779,13 @@
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dd:GooCanvas.convert_from_pixels", kwlist, &x, &y))
         return NULL;
-    
+
     goo_canvas_convert_from_pixels(GOO_CANVAS(self->obj), &x, &y);
-    
+
     return Py_BuildValue("dd", x, y);
 }
 
-#line 833 "goocanvas.c"
+#line 789 "goocanvas.c"
 
 
 #line 572 "goocanvas.override"
@@ -840,15 +796,15 @@
     gdouble x, y;
     PyGObject *item;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_to_item_space", 
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_to_item_space",
                                      kwlist, &PyGooCanvasItem_Type, &item, &x, &y))
         return NULL;
-    
+
     goo_canvas_convert_to_item_space(GOO_CANVAS(self->obj), GOO_CANVAS_ITEM(item->obj), &x, &y);
-    
+
     return Py_BuildValue("dd", x, y);
 }
-#line 852 "goocanvas.c"
+#line 808 "goocanvas.c"
 
 
 #line 589 "goocanvas.override"
@@ -859,15 +815,15 @@
     gdouble x, y;
     PyGObject *item;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_from_item_space", 
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_from_item_space",
                                      kwlist, &PyGooCanvasItem_Type, &item, &x, &y))
         return NULL;
-    
+
     goo_canvas_convert_from_item_space(GOO_CANVAS(self->obj), GOO_CANVAS_ITEM(item->obj), &x, &y);
 
     return Py_BuildValue("dd", x, y);
 }
-#line 871 "goocanvas.c"
+#line 827 "goocanvas.c"
 
 
 static PyObject *
@@ -946,19 +902,17 @@
     return Py_None;
 }
 
-#line 2029 "goocanvas.override"
 static PyObject *
 _wrap_goo_canvas_create_cairo_context(PyGObject *self)
 {
     cairo_t *ret;
 
+    
     ret = goo_canvas_create_cairo_context(GOO_CANVAS(self->obj));
     
     cairo_reference(ret);
-    return PycairoContext_FromContext(ret, &PyGdkCairoContext_Type, NULL);
+    return PycairoContext_FromContext(ret, NULL, NULL);
 }
-#line 961 "goocanvas.c"
-
 
 static PyObject *
 _wrap_goo_canvas_create_item(PyGObject *self, PyObject *args, PyObject *kwargs)
@@ -1730,20 +1684,20 @@
     PycairoContext *cr;
     GooCanvasBounds bounds = {0,};
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:get_path_bounds", 
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:get_path_bounds",
         kwlist, &PycairoContext_Type, &cr))
         return NULL;
-    
+
     GooCanvasItemSimple *simple = (GooCanvasItemSimple*) self->obj;
-    
+
     goo_canvas_item_simple_get_path_bounds (simple, cr->ctx, &bounds);
-    
+
     py_bounds = pygoo_canvas_bounds_new(&bounds);
-    
-    return py_bounds;    
+
+    return py_bounds;
 }
 
-#line 1747 "goocanvas.c"
+#line 1701 "goocanvas.c"
 
 
 static PyObject *
@@ -2003,7 +1957,7 @@
     return 0;
 }
 
-#line 2007 "goocanvas.c"
+#line 1961 "goocanvas.c"
 
 
 static PyObject *
@@ -2028,7 +1982,7 @@
     return 0;
 }
 
-#line 2032 "goocanvas.c"
+#line 1986 "goocanvas.c"
 
 
 static PyObject *
@@ -2053,7 +2007,7 @@
     return 0;
 }
 
-#line 2057 "goocanvas.c"
+#line 2011 "goocanvas.c"
 
 
 static PyObject *
@@ -2078,7 +2032,7 @@
     return 0;
 }
 
-#line 2082 "goocanvas.c"
+#line 2036 "goocanvas.c"
 
 
 static PyObject *
@@ -2108,8 +2062,7 @@
 {
     return pygoo_canvas_bounds_new(&GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds);
 }
-
-#line 2113 "goocanvas.c"
+#line 2066 "goocanvas.c"
 
 
 static const PyGetSetDef goo_canvas_item_simple_getsets[] = {
@@ -2184,7 +2137,7 @@
         pyg_gil_state_release(__py_state);
         return;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     
     py_args = PyTuple_New(1);
     PyTuple_SET_ITEM(py_args, 0, py_cr);
@@ -2245,7 +2198,7 @@
         pyg_gil_state_release(__py_state);
         return;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     
     py_args = PyTuple_New(1);
     PyTuple_SET_ITEM(py_args, 0, py_cr);
@@ -2307,7 +2260,7 @@
         pyg_gil_state_release(__py_state);
         return;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_bounds = pygoo_canvas_bounds_new(bounds);
     
     py_args = PyTuple_New(2);
@@ -2377,7 +2330,7 @@
     }
     py_x = PyFloat_FromDouble(x);
     py_y = PyFloat_FromDouble(y);
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_is_pointer_event = is_pointer_event? Py_True : Py_False;
     
     py_args = PyTuple_New(4);
@@ -2529,6 +2482,55 @@
 
 
 
+/* ----------- GooCanvasSvg ----------- */
+
+PyTypeObject G_GNUC_INTERNAL PyGooCanvasSvg_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                 /* ob_size */
+    "goocanvas.Svg",                   /* tp_name */
+    sizeof(PyGObject),          /* tp_basicsize */
+    0,                                 /* tp_itemsize */
+    /* methods */
+    (destructor)0,        /* tp_dealloc */
+    (printfunc)0,                      /* tp_print */
+    (getattrfunc)0,       /* tp_getattr */
+    (setattrfunc)0,       /* tp_setattr */
+    (cmpfunc)0,           /* tp_compare */
+    (reprfunc)0,             /* tp_repr */
+    (PyNumberMethods*)0,     /* tp_as_number */
+    (PySequenceMethods*)0, /* tp_as_sequence */
+    (PyMappingMethods*)0,   /* tp_as_mapping */
+    (hashfunc)0,             /* tp_hash */
+    (ternaryfunc)0,          /* tp_call */
+    (reprfunc)0,              /* tp_str */
+    (getattrofunc)0,     /* tp_getattro */
+    (setattrofunc)0,     /* tp_setattro */
+    (PyBufferProcs*)0,  /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,                      /* tp_flags */
+    NULL,                        /* Documentation string */
+    (traverseproc)0,     /* tp_traverse */
+    (inquiry)0,             /* tp_clear */
+    (richcmpfunc)0,   /* tp_richcompare */
+    offsetof(PyGObject, weakreflist),             /* tp_weaklistoffset */
+    (getiterfunc)0,          /* tp_iter */
+    (iternextfunc)0,     /* tp_iternext */
+    (struct PyMethodDef*)NULL, /* tp_methods */
+    (struct PyMemberDef*)0,              /* tp_members */
+    (struct PyGetSetDef*)0,  /* tp_getset */
+    NULL,                              /* tp_base */
+    NULL,                              /* tp_dict */
+    (descrgetfunc)0,    /* tp_descr_get */
+    (descrsetfunc)0,    /* tp_descr_set */
+    offsetof(PyGObject, inst_dict),                 /* tp_dictoffset */
+    (initproc)0,             /* tp_init */
+    (allocfunc)0,           /* tp_alloc */
+    (newfunc)0,               /* tp_new */
+    (freefunc)0,             /* tp_free */
+    (inquiry)0              /* tp_is_gc */
+};
+
+
+
 /* ----------- GooCanvasGroup ----------- */
 
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasGroup_Type = {
@@ -2969,13 +2971,13 @@
     static char *kwlist[] = { "name", NULL };
     char *name;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"s:goocanvas.Style.get_property", 
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"s:goocanvas.Style.get_property",
     				     kwlist, &name))
         return NULL;
     return _py_canvas_style_get_property(GOO_CANVAS_STYLE(self->obj), name);
 }
 
-#line 2979 "goocanvas.c"
+#line 2981 "goocanvas.c"
 
 
 #line 730 "goocanvas.override"
@@ -2986,7 +2988,7 @@
     char *name;
     PyObject *py_value;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sO:goocanvas.Style.set_property", 
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sO:goocanvas.Style.set_property",
     				     kwlist, &name, &py_value))
         return NULL;
     if (_py_goo_canvas_style_set_property(GOO_CANVAS_STYLE(self->obj), name, py_value))
@@ -2995,7 +2997,7 @@
     return Py_None;
 }
 
-#line 2999 "goocanvas.c"
+#line 3001 "goocanvas.c"
 
 
 static PyObject *
@@ -3082,7 +3084,7 @@
     (objobjargproc) _wrap_goo_canvas_style_ass_subscript, /* objobjargproc mp_ass_subscript; */
 };
 
-#line 3086 "goocanvas.c"
+#line 3088 "goocanvas.c"
 
 
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasStyle_Type = {
@@ -3232,31 +3234,6 @@
 
 /* ----------- GooCanvasText ----------- */
 
-#line 1607 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_text_get_natural_extents(PyGObject *self)
-{
-    PangoRectangle ink_rect, logical_rect;
-
-    goo_canvas_text_get_natural_extents(GOO_CANVAS_TEXT(self->obj), &ink_rect,
-                                        &logical_rect);
-    
-    return Py_BuildValue("((iiii)(iiii))",
-			 ink_rect.x, ink_rect.y,
-			 ink_rect.width, ink_rect.height,
-			 logical_rect.x, logical_rect.y,
-			 logical_rect.width, logical_rect.height);
-}
-
-#line 3252 "goocanvas.c"
-
-
-static const PyMethodDef _PyGooCanvasText_methods[] = {
-    { "get_natural_extents", (PyCFunction)_wrap_goo_canvas_text_get_natural_extents, METH_NOARGS,
-      NULL },
-    { NULL, NULL, 0, NULL }
-};
-
 PyTypeObject G_GNUC_INTERNAL PyGooCanvasText_Type = {
     PyObject_HEAD_INIT(NULL)
     0,                                 /* ob_size */
@@ -3287,7 +3264,7 @@
     offsetof(PyGObject, weakreflist),             /* tp_weaklistoffset */
     (getiterfunc)0,          /* tp_iter */
     (iternextfunc)0,     /* tp_iternext */
-    (struct PyMethodDef*)_PyGooCanvasText_methods, /* tp_methods */
+    (struct PyMethodDef*)NULL, /* tp_methods */
     (struct PyMemberDef*)0,              /* tp_members */
     (struct PyGetSetDef*)0,  /* tp_getset */
     NULL,                              /* tp_base */
@@ -3502,130 +3479,11 @@
         }
     }
     goo_canvas_item_remove_child(GOO_CANVAS_ITEM(self->obj), child_num);
-    
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-#line 3510 "goocanvas.c"
-
-
-#line 1708 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_get_child_property(PyGObject *self,
-                                         PyObject *args,
-                                         PyObject *kwargs)
-{
-    static char    *kwlist[] = { "child", "property", NULL };
-    PyGObject *pychild;
-    gchar *property_name;
-    GooCanvasItem *item, *child;
-    GObjectClass *class;
-    GParamSpec *pspec;
-    GValue value = { 0, } ;
-    PyObject *ret;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O!s:GooCanvasItem.get_child_property",
-                                     kwlist, &PyGooCanvasItem_Type, &pychild,
-                                     &property_name)) {
-        return NULL;
-    }
-
-    item = GOO_CANVAS_ITEM(self->obj);
-    child = GOO_CANVAS_ITEM(pychild->obj);
-
-    if (goo_canvas_item_find_child(item, child) == -1) {
-        PyErr_SetString(PyExc_TypeError,
-                        "first argument must be a child");
-        return NULL;
-    }
-
-    class = G_OBJECT_GET_CLASS(item);
-    pspec = goo_canvas_item_class_find_child_property(class, property_name);
-    if (!pspec) {
-        gchar buf[512];
-        g_snprintf(buf, sizeof(buf),
-                   "item does not support property `%s'",
-                   property_name);
-
-        PyErr_SetString(PyExc_TypeError, buf);
-        return NULL;
-    }
-
-    g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-
-    goo_canvas_item_get_child_property(item,
-                                       child,
-                                       property_name,
-                                       &value);
 
-    ret = pyg_value_as_pyobject(&value, TRUE);
-    g_value_unset(&value);
-
-    return ret;
-}
-
-#line 3569 "goocanvas.c"
-
-
-#line 1650 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_set_child_property(PyGObject *self,
-                                         PyObject *args,
-                                         PyObject *kwargs)
-{
-    static char    *kwlist[] = { "child", "property", "value", NULL };
-    gchar *property_name;
-    PyGObject *pychild;
-    GooCanvasItem *item, *child;
-    PyGObject *pyvalue;
-    GObjectClass *class;
-    GParamSpec *pspec;
-    GValue value = { 0, } ;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O!sO:GooCanvasItem.set_child_property",
-                                     kwlist,
-                                    &PyGooCanvasItem_Type, &pychild,
-                                    &property_name, &pyvalue)) {
-        return NULL;
-    }
-    
-    item = GOO_CANVAS_ITEM(self->obj);
-    child = GOO_CANVAS_ITEM(pychild->obj);
-
-    if (goo_canvas_item_find_child(item, child) == -1) {
-        PyErr_SetString(PyExc_TypeError,
-                        "first argument must be a child");
-        return NULL;
-    }
-
-    class = G_OBJECT_GET_CLASS(self->obj);
-    pspec = goo_canvas_item_class_find_child_property(class, property_name);
-    if (!pspec) {
-        gchar buf[512];
-        g_snprintf(buf, sizeof(buf),
-                   "item does not support property `%s'",
-                   property_name);
-        PyErr_SetString(PyExc_TypeError, buf);
-
-        return NULL;
-    }
-
-    g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-
-    pyg_value_from_pyobject(&value, (PyObject*)pyvalue);
-
-    goo_canvas_item_set_child_property(item,
-                                       child,
-                                       property_name,
-                                       &value);
-    g_value_unset(&value);
     Py_INCREF(Py_None);
     return Py_None;
 }
-
-#line 3629 "goocanvas.c"
+#line 3487 "goocanvas.c"
 
 
 #line 921 "goocanvas.override"
@@ -3638,23 +3496,23 @@
     int             i, len;
     gint            c_pos;
     PyObject        *tuple;
-    
+
     if ((len = PyTuple_Size(args)) < 1) {
         PyErr_SetString(PyExc_TypeError, "requires at least one argument");
         return NULL;
     }
-    
+
     pychild = (PyGObject*)PyTuple_GetItem(args, 0);
-    
+
     if (!pygobject_check(pychild, &PyGooCanvasItem_Type)) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument should be a GooCanvasItem");
         return NULL;
     }
-    
+
     parent = GOO_CANVAS_ITEM(self->obj);
     child = GOO_CANVAS_ITEM(pychild->obj);
-    
+
     c_pos = goo_canvas_item_find_child(parent, child);
     if (c_pos == -1) {
         PyErr_SetString(PyExc_TypeError,
@@ -3663,9 +3521,9 @@
     }
 
     tuple = PyTuple_New(len-1);
-    
+
     class = G_OBJECT_GET_CLASS(self->obj);
-    
+
     for (i = 1; i < len; i++) {
         PyObject *py_property = PyTuple_GetItem(args, i);
         gchar *property_name;
@@ -3709,7 +3567,7 @@
     return tuple;
 }
 
-#line 3713 "goocanvas.c"
+#line 3571 "goocanvas.c"
 
 
 #line 839 "goocanvas.override"
@@ -3724,31 +3582,31 @@
     gint            c_pos;
     PyObject        *value;
     PyObject        *key;
-    
+
     if ((len = PyTuple_Size(args)) < 1) {
         PyErr_SetString(PyExc_TypeError, "requires at least one argument");
         return NULL;
     }
     pychild = (PyGObject*)PyTuple_GetItem(args, 0);
-    
+
     if (!pygobject_check(pychild, &PyGooCanvasItem_Type)) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument should be a GooCanvasItem");
         return NULL;
     }
-    
+
     parent = GOO_CANVAS_ITEM(self->obj);
     child = GOO_CANVAS_ITEM(pychild->obj);
-    
+
     c_pos = goo_canvas_item_find_child(parent, child);
     if (c_pos == -1) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument must be a child");
         return NULL;
     }
-    
+
     class = G_OBJECT_GET_CLASS(self->obj);
-    
+
     g_object_freeze_notify (G_OBJECT(self->obj));
     pos = 0;
 
@@ -3783,7 +3641,7 @@
 	iface->set_child_property ((GooCanvasItem*) parent,
 	                           (GooCanvasItem*) child,
 	                           pspec->param_id, &gvalue, pspec);
-	
+
 	g_value_unset(&gvalue);
     }
 
@@ -3793,38 +3651,27 @@
     return Py_None;
 }
 
-#line 3797 "goocanvas.c"
+#line 3655 "goocanvas.c"
 
 
-#line 1950 "goocanvas.override"
 static PyObject *
-_wrap_goo_canvas_item_get_transform_for_child(PyGObject *self,
-                                              PyObject *args,
-                                              PyObject *kwargs)
+_wrap_goo_canvas_item_get_transform_for_child(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-    static char *kwlist[] = { "child", NULL };
+    static char *kwlist[] = { "child", "transform", NULL };
     PyGObject *child;
+    PyObject *py_transform;
     int ret;
-    cairo_matrix_t *transform = NULL;
+    cairo_matrix_t *transform;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O!:GooCanvasItem.get_transform_for_child",
-                                     kwlist, &PyGooCanvasItem_Type, &child))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O:GooCanvasItem.get_transform_for_child", kwlist, &PyGooCanvasItem_Type, &child, &py_transform))
         return NULL;
+    transform = &((PycairoMatrix*)(py_transform))->matrix;
     
-    ret = goo_canvas_item_get_transform_for_child(GOO_CANVAS_ITEM(self->obj),
-                                                  GOO_CANVAS_ITEM(child->obj),
-                                                  transform);
+    ret = goo_canvas_item_get_transform_for_child(GOO_CANVAS_ITEM(self->obj), GOO_CANVAS_ITEM(child->obj), transform);
     
-    if (ret)
-        return PycairoMatrix_FromMatrix(transform);
-    else
-        Py_INCREF(Py_None);
-        return Py_None;
-}
-
-#line 3827 "goocanvas.c"
+    return PyBool_FromLong(ret);
 
+}
 
 static PyObject *
 _wrap_goo_canvas_item_get_canvas(PyGObject *self)
@@ -3953,38 +3800,31 @@
     PyObject        *matrix;
     cairo_matrix_t  transform = {0,};
     gboolean        res;
-    
+
     res = goo_canvas_item_get_transform(GOO_CANVAS_ITEM(self->obj), &transform);
-    
+
     if (!res) {
         Py_INCREF(Py_None);
         return Py_None;
     }
-    
+
     matrix = PycairoMatrix_FromMatrix(&transform);
     return matrix;
 }
 
-#line 3969 "goocanvas.c"
+#line 3816 "goocanvas.c"
 
 
-#line 1978 "goocanvas.override"
 static PyObject *
-_wrap_goo_canvas_item_set_transform(PyGObject *self,
-                                    PyObject *args,
-                                    PyObject *kwargs)
+_wrap_goo_canvas_item_set_transform(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
     static char *kwlist[] = { "matrix", NULL };
     PyObject *py_matrix;
-    cairo_matrix_t *matrix = NULL;
+    cairo_matrix_t *matrix;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O:GooCanvasItem.set_transform",
-                                     kwlist, &py_matrix))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GooCanvasItem.set_transform", kwlist, &py_matrix))
         return NULL;
-    
-    if (py_matrix && (py_matrix != Py_None))
-        matrix = &((PycairoMatrix*)(py_matrix))->matrix;
+    matrix = &((PycairoMatrix*)(py_matrix))->matrix;
     
     goo_canvas_item_set_transform(GOO_CANVAS_ITEM(self->obj), matrix);
     
@@ -3992,24 +3832,6 @@
     return Py_None;
 }
 
-#line 3996 "goocanvas.c"
-
-
-#line 1624 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_get_simple_transform(PyGObject *self)
-{
-    gdouble x, y, scale, rotation;
-    
-    goo_canvas_item_get_simple_transform(GOO_CANVAS_ITEM(self->obj), &x, &y,
-                                         &scale, &rotation);
-    
-    return Py_BuildValue("dddd", x, y, scale, rotation);
-}
-
-#line 4011 "goocanvas.c"
-
-
 static PyObject *
 _wrap_goo_canvas_item_set_simple_transform(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
@@ -4163,7 +3985,7 @@
 {
     PyObject        *py_bounds;
     GooCanvasBounds bounds = {0,};
-        
+
     goo_canvas_item_get_bounds(GOO_CANVAS_ITEM(self->obj), &bounds);
 
     py_bounds = pygoo_canvas_bounds_new(&bounds);
@@ -4171,7 +3993,7 @@
     return py_bounds;
 }
 
-#line 4175 "goocanvas.c"
+#line 3997 "goocanvas.c"
 
 
 #line 1508 "goocanvas.override"
@@ -4186,32 +4008,32 @@
     gboolean        is_pointer_event;
     gboolean        parent_is_visible;
     PycairoContext  *cr;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                      "ddOOO:get_items_at",
                                      kwlist,
                                      &x, &y, &cr, &point_event,
                                      &parent_visible))
         return NULL;
-    
+
     is_pointer_event = (PyObject_IsTrue(point_event)) ? TRUE : FALSE;
     parent_is_visible = (PyObject_IsTrue(parent_visible)) ? TRUE : FALSE;
-    
+
     item_list = goo_canvas_item_get_items_at(GOO_CANVAS_ITEM(self->obj),
                                              x, y, cr->ctx, is_pointer_event,
                                              parent_is_visible, NULL);
-    
+
     if (!item_list) {
         Py_INCREF (Py_None);
         return Py_None;
     }
-    
+
     ret = _glist_to_pylist_objs(item_list);
     g_list_free(item_list);
     return ret;
 }
 
-#line 4215 "goocanvas.c"
+#line 4037 "goocanvas.c"
 
 
 static PyObject *
@@ -4273,29 +4095,23 @@
     return Py_None;
 }
 
-#line 1929 "goocanvas.override"
 static PyObject *
 _wrap_goo_canvas_item_update(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-    static char *kwlist[] = { "entire_tree", "cr", NULL };
-    int             entire_tree;
-    PycairoContext  *cr;
-    GooCanvasBounds bounds;
+    static char *kwlist[] = { "entire_tree", "cr", "bounds", NULL };
+    int entire_tree;
+    PyObject *py_bounds;
+    PycairoContext *cr;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"iO!:GooCanvasItem.update",
-                                     kwlist, &entire_tree,
-                                     &PycairoContext_Type, &cr))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"iO!O!:GooCanvasItem.update", kwlist, &entire_tree, &PycairoContext_Type, &cr, &PyGooCanvasBounds_Type, &py_bounds))
         return NULL;
     
-    goo_canvas_item_update(GOO_CANVAS_ITEM(self->obj), entire_tree,
-                           cr->ctx, &bounds);
+    goo_canvas_item_update(GOO_CANVAS_ITEM(self->obj), entire_tree, cr->ctx, (py_bounds == NULL)? NULL : &((PyGooCanvasBounds *) py_bounds)->bounds);
     
-    return pygoo_canvas_bounds_new(&bounds);
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
-#line 4297 "goocanvas.c"
-
-
 static PyObject *
 _wrap_goo_canvas_item_paint(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
@@ -4318,30 +4134,22 @@
     return Py_None;
 }
 
-#line 1906 "goocanvas.override"
 static PyObject *
-_wrap_goo_canvas_item_get_requested_area(PyGObject *self,
-                                         PyObject *args,
-                                         PyObject *kwargs)
-{
-    static char     *kwlist[] = { "cr", NULL };
-    int             ret;
-    GooCanvasBounds bounds;
-    PycairoContext  *cr;
+_wrap_goo_canvas_item_get_requested_area(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "cr", "requested_area", NULL };
+    PyObject *py_requested_area;
+    int ret;
+    PycairoContext *cr;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O!:GooCanvasItem.get_requested_area",
-                                     kwlist, &PycairoContext_Type, &cr))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!:GooCanvasItem.get_requested_area", kwlist, &PycairoContext_Type, &cr, &PyGooCanvasBounds_Type, &py_requested_area))
         return NULL;
     
-    ret = goo_canvas_item_get_requested_area(GOO_CANVAS_ITEM(self->obj),
-                                             cr->ctx, &bounds);
+    ret = goo_canvas_item_get_requested_area(GOO_CANVAS_ITEM(self->obj), cr->ctx, (py_requested_area == NULL)? NULL : &((PyGooCanvasBounds *) py_requested_area)->bounds);
     
-    return pygoo_canvas_bounds_new(&bounds);
-}
-
-#line 4344 "goocanvas.c"
+    return PyBool_FromLong(ret);
 
+}
 
 static PyObject *
 _wrap_goo_canvas_item_get_requested_height(PyGObject *self, PyObject *args, PyObject *kwargs)
@@ -4386,26 +4194,26 @@
     GType               itype;
     const gchar         *prop_name;
     GParamSpec          *pspec;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                      "s:item_class_find_child_property",
                                      kwlist,
                                      &prop_name))
         return NULL;
-    
+
     if ((itype = pyg_type_from_object(cls)) == 0)
 	return NULL;
-    
+
     klass = g_type_class_ref(itype);
-    
+
     if (!klass) {
 	PyErr_SetString(PyExc_RuntimeError,
 			"could not get a reference to type class");
 	return NULL;
     }
-    
+
     pspec = goo_canvas_item_class_find_child_property (klass, prop_name);
-    
+
     if(!pspec){
         PyErr_Format(PyExc_KeyError,
                         "object %s does not support property %s",
@@ -4415,7 +4223,7 @@
     return pyg_param_spec_new(pspec);
 }
 
-#line 4419 "goocanvas.c"
+#line 4227 "goocanvas.c"
 
 
 #line 1291 "goocanvas.override"
@@ -4430,7 +4238,7 @@
     GObjectClass    *klass;
     guint           nprops;
     guint           i;
-    
+
     if ((itype = pyg_type_from_object(cls)) == 0)
 	return NULL;
 
@@ -4448,18 +4256,18 @@
 	g_type_class_unref(klass);
 	return NULL;
     }
-    
+
     for (i = 0; i < nprops; i++) {
 	PyList_SetItem(list, i, pyg_param_spec_new(specs[i]));
     }
-    
+
     g_free(specs);
     g_type_class_unref(klass);
 
     return list;
 }
 
-#line 4463 "goocanvas.c"
+#line 4271 "goocanvas.c"
 
 
 #line 1385 "goocanvas.override"
@@ -4504,16 +4312,16 @@
 	g_type_class_unref(klass);
 	return NULL;
     }
-    
+
     goo_canvas_item_class_install_child_property(klass, property_id, pspec);
-	
+
     g_type_class_unref(klass);
 
     Py_INCREF(Py_None);
     return Py_None;
 }
 
-#line 4517 "goocanvas.c"
+#line 4325 "goocanvas.c"
 
 
 static PyObject *
@@ -5334,10 +5142,6 @@
       NULL },
     { "remove_child", (PyCFunction)_wrap_goo_canvas_item_remove_child, METH_VARARGS|METH_KEYWORDS,
       NULL },
-    { "get_child_property", (PyCFunction)_wrap_goo_canvas_item_get_child_property, METH_VARARGS,
-      NULL },
-    { "set_child_property", (PyCFunction)_wrap_goo_canvas_item_set_child_property, METH_VARARGS|METH_KEYWORDS,
-      NULL },
     { "get_child_properties", (PyCFunction)_wrap_goo_canvas_item_get_child_properties, METH_VARARGS,
       NULL },
     { "set_child_properties", (PyCFunction)_wrap_goo_canvas_item_set_child_properties, METH_VARARGS|METH_KEYWORDS,
@@ -5364,8 +5168,6 @@
       NULL },
     { "set_transform", (PyCFunction)_wrap_goo_canvas_item_set_transform, METH_VARARGS|METH_KEYWORDS,
       NULL },
-    { "get_simple_transform", (PyCFunction)_wrap_goo_canvas_item_get_simple_transform, METH_NOARGS,
-      NULL },
     { "set_simple_transform", (PyCFunction)_wrap_goo_canvas_item_set_simple_transform, METH_VARARGS|METH_KEYWORDS,
       NULL },
     { "translate", (PyCFunction)_wrap_goo_canvas_item_translate, METH_VARARGS|METH_KEYWORDS,
@@ -6181,7 +5983,7 @@
     PyGILState_STATE __py_state;
     PyObject *py_self;
     PyObject *py_bounds;
-    
+
     __py_state = pyg_gil_state_ensure();
     py_self = pygobject_new((GObject *) self);
     if (!py_self) {
@@ -6200,7 +6002,7 @@
     Py_XDECREF(py_bounds);
     pyg_gil_state_release(__py_state);
 }
-#line 6204 "goocanvas.c"
+#line 6006 "goocanvas.c"
 
 
 #line 633 "goocanvas.override"
@@ -6211,7 +6013,7 @@
     PyGILState_STATE __py_state;
     PyObject *py_self;
     PyObject *py_bounds;
-    
+
     __py_state = pyg_gil_state_ensure();
     py_self = pygobject_new((GObject *) self);
     if (!py_self) {
@@ -6223,7 +6025,7 @@
 
     py_bounds = PyObject_CallMethod(py_self, "do_update", "iN",
                                     entire_tree,
-                                    PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL));
+                                    PycairoContext_FromContext(cairo_reference(cr), NULL, NULL));
     if (py_bounds)
         *bounds = ((PyGooCanvasBounds *) py_bounds)->bounds;
     else
@@ -6233,7 +6035,7 @@
     pyg_gil_state_release(__py_state);
 }
 
-#line 6237 "goocanvas.c"
+#line 6039 "goocanvas.c"
 
 
 static void
@@ -6256,7 +6058,7 @@
         pyg_gil_state_release(__py_state);
         return;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_bounds = pygoo_canvas_bounds_new(bounds);
     py_scale = PyFloat_FromDouble(scale);
     
@@ -6324,7 +6126,7 @@
         pyg_gil_state_release(__py_state);
         return FALSE;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_requested_area = pygoo_canvas_bounds_new(requested_area);
     
     py_args = PyTuple_New(2);
@@ -6395,7 +6197,7 @@
         pyg_gil_state_release(__py_state);
         return;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_requested_area = pygoo_canvas_bounds_new(requested_area);
     py_allocated_area = pygoo_canvas_bounds_new(allocated_area);
     py_x_offset = PyFloat_FromDouble(x_offset);
@@ -6656,7 +6458,7 @@
         pyg_gil_state_release(__py_state);
         return -G_MAXFLOAT;
     }
-    py_cr = PycairoContext_FromContext(cairo_reference(cr), &PyGdkCairoContext_Type, NULL);
+    py_cr = PycairoContext_FromContext(cairo_reference(cr), NULL, NULL);
     py_width = PyFloat_FromDouble(width);
     
     py_args = PyTuple_New(2);
@@ -8003,125 +7805,6 @@
     return PyInt_FromLong(ret);
 }
 
-#line 1823 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_model_get_child_property(PyGObject *self,
-                                         PyObject *args,
-                                         PyObject *kwargs)
-{
-    static char    *kwlist[] = { "child", "property", NULL };
-    PyGObject *pychild;
-    gchar *property_name;
-    GooCanvasItemModel *item, *child;
-    GObjectClass *class;
-    GParamSpec *pspec;
-    GValue value = { 0, } ;
-    PyObject *ret;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                "O!s:GooCanvasItemModel.get_child_property",
-                                kwlist, &PyGooCanvasItemModel_Type, &pychild,
-                                &property_name)) {
-        return NULL;
-    }
-
-    item = GOO_CANVAS_ITEM_MODEL(self->obj);
-    child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
-
-    if (goo_canvas_item_model_find_child(item, child) == -1) {
-        PyErr_SetString(PyExc_TypeError,
-                        "first argument must be a child");
-        return NULL;
-    }
-
-    class = G_OBJECT_GET_CLASS(item);
-    pspec = goo_canvas_item_model_class_find_child_property(class, property_name);
-    if (!pspec) {
-        gchar buf[512];
-        g_snprintf(buf, sizeof(buf),
-                   "item model does not support property `%s'",
-                   property_name);
-
-        PyErr_SetString(PyExc_TypeError, buf);
-        return NULL;
-    }
-
-    g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-
-    goo_canvas_item_model_get_child_property(item,
-                                             child,
-                                             property_name,
-                                             &value);
-
-    ret = pyg_value_as_pyobject(&value, TRUE);
-    g_value_unset(&value);
-
-    return ret;
-}
-
-#line 8063 "goocanvas.c"
-
-
-#line 1765 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_model_set_child_property(PyGObject *self,
-                                         PyObject *args,
-                                         PyObject *kwargs)
-{
-    static char    *kwlist[] = { "child", "property", "value", NULL };
-    gchar *property_name;
-    PyGObject *pychild;
-    GooCanvasItemModel *item, *child;
-    PyGObject *pyvalue;
-    GObjectClass *class;
-    GParamSpec *pspec;
-    GValue value = { 0, } ;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                "O!sO:GooCanvasItemModel.set_child_property",
-                                kwlist,
-                                &PyGooCanvasItemModel_Type, &pychild,
-                                &property_name, &pyvalue)) {
-        return NULL;
-    }
-    
-    item = GOO_CANVAS_ITEM_MODEL(self->obj);
-    child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
-
-    if (goo_canvas_item_model_find_child(item, child) == -1) {
-        PyErr_SetString(PyExc_TypeError,
-                        "first argument must be a child");
-        return NULL;
-    }
-
-    class = G_OBJECT_GET_CLASS(self->obj);
-    pspec = goo_canvas_item_model_class_find_child_property(class, property_name);
-    if (!pspec) {
-        gchar buf[512];
-        g_snprintf(buf, sizeof(buf),
-                   "item model does not support property `%s'",
-                   property_name);
-        PyErr_SetString(PyExc_TypeError, buf);
-
-        return NULL;
-    }
-
-    g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-
-    pyg_value_from_pyobject(&value, (PyObject*)pyvalue);
-
-    goo_canvas_item_model_set_child_property(item,
-                                             child,
-                                             property_name,
-                                             &value);
-    g_value_unset(&value);
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-#line 8123 "goocanvas.c"
-
-
 #line 1084 "goocanvas.override"
 static PyObject *
 _wrap_goo_canvas_item_model_get_child_properties(PyGObject *self, PyObject *args)
@@ -8132,23 +7815,23 @@
     int                 i, len;
     gint                c_pos;
     PyObject            *tuple;
-    
+
     if ((len = PyTuple_Size(args)) < 1) {
         PyErr_SetString(PyExc_TypeError, "requires at least one argument");
         return NULL;
     }
-    
+
     pychild = (PyGObject*)PyTuple_GetItem(args, 0);
-    
+
     if (!pygobject_check(pychild, &PyGooCanvasItemModel_Type)) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument should be a GooCanvasItemModel");
         return NULL;
     }
-    
+
     parent = GOO_CANVAS_ITEM_MODEL(self->obj);
     child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
-    
+
     c_pos = goo_canvas_item_model_find_child(parent, child);
     if (c_pos == -1) {
         PyErr_SetString(PyExc_TypeError,
@@ -8157,9 +7840,9 @@
     }
 
     tuple = PyTuple_New(len-1);
-    
+
     class = G_OBJECT_GET_CLASS(self->obj);
-    
+
     for (i = 1; i < len; i++) {
         PyObject *py_property = PyTuple_GetItem(args, i);
         gchar *property_name;
@@ -8204,7 +7887,7 @@
     return tuple;
 }
 
-#line 8208 "goocanvas.c"
+#line 7891 "goocanvas.c"
 
 
 #line 1003 "goocanvas.override"
@@ -8219,31 +7902,31 @@
     gint                c_pos;
     PyObject            *value;
     PyObject            *key;
-    
+
     if ((len = PyTuple_Size(args)) < 1) {
         PyErr_SetString(PyExc_TypeError, "requires at least one argument");
         return NULL;
     }
     pychild = (PyGObject*)PyTuple_GetItem(args, 0);
-    
+
     if (!pygobject_check(pychild, &PyGooCanvasItemModel_Type)) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument should be a GooCanvasItemModel");
         return NULL;
     }
-    
+
     parent = GOO_CANVAS_ITEM_MODEL(self->obj);
     child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
-    
+
     c_pos = goo_canvas_item_model_find_child(parent, child);
     if (c_pos == -1) {
         PyErr_SetString(PyExc_TypeError,
                         "first argument must be a child");
         return NULL;
     }
-    
+
     class = G_OBJECT_GET_CLASS(self->obj);
-    
+
     g_object_freeze_notify (G_OBJECT(self->obj));
     pos = 0;
 
@@ -8287,7 +7970,7 @@
     return Py_None;
 }
 
-#line 8291 "goocanvas.c"
+#line 7974 "goocanvas.c"
 
 
 static PyObject *
@@ -8376,65 +8059,39 @@
     PyObject        *matrix;
     cairo_matrix_t  transform = {0,};
     gboolean        res;
-    
+
     res = goo_canvas_item_model_get_transform(GOO_CANVAS_ITEM_MODEL(self->obj),
                                               &transform);
-    
+
     if (!res) {
         Py_INCREF(Py_None);
         return Py_None;
     }
-    
+
     matrix = PycairoMatrix_FromMatrix(&transform);
     return matrix;
 }
 
-#line 8393 "goocanvas.c"
+#line 8076 "goocanvas.c"
 
 
-#line 2003 "goocanvas.override"
 static PyObject *
-_wrap_goo_canvas_item_model_set_transform(PyGObject *self,
-                                          PyObject *args,
-                                          PyObject *kwargs)
+_wrap_goo_canvas_item_model_set_transform(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
     static char *kwlist[] = { "matrix", NULL };
     PyObject *py_matrix;
-    cairo_matrix_t *matrix = NULL;
+    cairo_matrix_t *matrix;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-                                     "O:GooCanvasItemModel.set_transform",
-                                     kwlist, &py_matrix))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GooCanvasItemModel.set_transform", kwlist, &py_matrix))
         return NULL;
+    matrix = &((PycairoMatrix*)(py_matrix))->matrix;
     
-    if (py_matrix && (py_matrix != Py_None))
-        matrix = &((PycairoMatrix*)(py_matrix))->matrix;
-    
-    goo_canvas_item_model_set_transform(GOO_CANVAS_ITEM_MODEL(self->obj),
-                                        matrix);
+    goo_canvas_item_model_set_transform(GOO_CANVAS_ITEM_MODEL(self->obj), matrix);
     
     Py_INCREF(Py_None);
     return Py_None;
 }
 
-#line 8421 "goocanvas.c"
-
-
-#line 1637 "goocanvas.override"
-static PyObject *
-_wrap_goo_canvas_item_model_get_simple_transform(PyGObject *self)
-{
-    gdouble x, y, scale, rotation;
-    
-    goo_canvas_item_model_get_simple_transform(GOO_CANVAS_ITEM_MODEL(self->obj),
-                                               &x, &y, &scale, &rotation);
-    
-    return Py_BuildValue("dddd", x, y, scale, rotation);
-}
-
-#line 8436 "goocanvas.c"
-
-
 static PyObject *
 _wrap_goo_canvas_item_model_set_simple_transform(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
@@ -8593,26 +8250,26 @@
     GType               itype;
     const gchar         *prop_name;
     GParamSpec          *pspec;
-    
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
                                      "s:item_model_class_find_child_property",
                                      kwlist,
                                      &prop_name))
         return NULL;
-    
+
     if ((itype = pyg_type_from_object(cls)) == 0)
 	return NULL;
-    
+
     klass = g_type_class_ref(itype);
-    
+
     if (!klass) {
 	PyErr_SetString(PyExc_RuntimeError,
 			"could not get a reference to type class");
 	return NULL;
     }
-    
+
     pspec = goo_canvas_item_model_class_find_child_property (klass, prop_name);
-    
+
     if(!pspec){
         PyErr_Format(PyExc_KeyError,
                         "object %s does not support property %s",
@@ -8622,7 +8279,7 @@
     return pyg_param_spec_new(pspec);
 }
 
-#line 8626 "goocanvas.c"
+#line 8283 "goocanvas.c"
 
 
 #line 1291 "goocanvas.override"
@@ -8637,7 +8294,7 @@
     GObjectClass    *klass;
     guint           nprops;
     guint           i;
-    
+
     if ((itype = pyg_type_from_object(cls)) == 0)
 	return NULL;
 
@@ -8655,18 +8312,18 @@
 	g_type_class_unref(klass);
 	return NULL;
     }
-    
+
     for (i = 0; i < nprops; i++) {
 	PyList_SetItem(list, i, pyg_param_spec_new(specs[i]));
     }
-    
+
     g_free(specs);
     g_type_class_unref(klass);
 
     return list;
 }
 
-#line 8670 "goocanvas.c"
+#line 8327 "goocanvas.c"
 
 
 #line 1385 "goocanvas.override"
@@ -8711,16 +8368,16 @@
 	g_type_class_unref(klass);
 	return NULL;
     }
-    
+
     goo_canvas_item_model_class_install_child_property(klass, property_id, pspec);
-	
+
     g_type_class_unref(klass);
 
     Py_INCREF(Py_None);
     return Py_None;
 }
 
-#line 8724 "goocanvas.c"
+#line 8381 "goocanvas.c"
 
 
 static PyObject *
@@ -9075,10 +8732,6 @@
       NULL },
     { "find_child", (PyCFunction)_wrap_goo_canvas_item_model_find_child, METH_VARARGS|METH_KEYWORDS,
       NULL },
-    { "get_child_property", (PyCFunction)_wrap_goo_canvas_item_model_get_child_property, METH_VARARGS,
-      NULL },
-    { "set_child_property", (PyCFunction)_wrap_goo_canvas_item_model_set_child_property, METH_VARARGS|METH_KEYWORDS,
-      NULL },
     { "get_child_properties", (PyCFunction)_wrap_goo_canvas_item_model_get_child_properties, METH_VARARGS,
       NULL },
     { "set_child_properties", (PyCFunction)_wrap_goo_canvas_item_model_set_child_properties, METH_VARARGS|METH_KEYWORDS,
@@ -9099,8 +8752,6 @@
       NULL },
     { "set_transform", (PyCFunction)_wrap_goo_canvas_item_model_set_transform, METH_VARARGS|METH_KEYWORDS,
       NULL },
-    { "get_simple_transform", (PyCFunction)_wrap_goo_canvas_item_model_get_simple_transform, METH_NOARGS,
-      NULL },
     { "set_simple_transform", (PyCFunction)_wrap_goo_canvas_item_model_set_simple_transform, METH_VARARGS|METH_KEYWORDS,
       NULL },
     { "translate", (PyCFunction)_wrap_goo_canvas_item_model_translate, METH_VARARGS|METH_KEYWORDS,
@@ -10289,7 +9940,7 @@
 static PyObject *
 _wrap_goo_canvas_polyline_new_line(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-    PyGObject       *parent; 
+    PyGObject       *parent;
     double          x1, y1, x2, y2;
     GooCanvasItem   *ret;
     GObjectClass    *class;
@@ -10297,17 +9948,17 @@
     PyObject        *value;
     PyObject        *key;
     GType           type;
-    
-    if (!PyArg_ParseTuple(args, "O!dddd:polyline_new_line", 
-                          &PyGooCanvasItem_Type, &parent, &x1, 
+
+    if (!PyArg_ParseTuple(args, "O!dddd:polyline_new_line",
+                          &PyGooCanvasItem_Type, &parent, &x1,
                           &y1, &x2, &y2))
         return NULL;
-    
-    ret = goo_canvas_polyline_new_line(GOO_CANVAS_ITEM(parent->obj), x1, 
+
+    ret = goo_canvas_polyline_new_line(GOO_CANVAS_ITEM(parent->obj), x1,
                                        y1, x2, y2, NULL);
-    
+
     type = goo_canvas_polyline_get_type();
-    
+
     if (!ret) {
     PyErr_SetString (PyExc_RuntimeError, "could not create canvas item object");
     return NULL;
@@ -10349,17 +10000,17 @@
     }
 
     g_object_thaw_notify (G_OBJECT(ret));
-    
+
     return pygobject_new((GObject *)ret);
 }
-#line 10356 "goocanvas.c"
+#line 10007 "goocanvas.c"
 
 
 #line 376 "goocanvas.override"
 static PyObject *
 _wrap_goo_canvas_polyline_model_new_line(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-    PyGObject           *parent; 
+    PyGObject           *parent;
     double              x1, y1, x2, y2;
     GooCanvasItemModel  *ret;
     GObjectClass        *class;
@@ -10367,17 +10018,17 @@
     PyObject            *value;
     PyObject            *key;
     GType               type;
-    
-    if (!PyArg_ParseTuple(args, "O!dddd:polyline_model_new_line", 
-                          &PyGooCanvasItemModel_Type, &parent, &x1, 
+
+    if (!PyArg_ParseTuple(args, "O!dddd:polyline_model_new_line",
+                          &PyGooCanvasItemModel_Type, &parent, &x1,
                           &y1, &x2, &y2))
         return NULL;
-    
-    ret = goo_canvas_polyline_model_new_line(GOO_CANVAS_ITEM_MODEL(parent->obj), x1, 
+
+    ret = goo_canvas_polyline_model_new_line(GOO_CANVAS_ITEM_MODEL(parent->obj), x1,
                                        y1, x2, y2, NULL);
-    
+
     type = goo_canvas_polyline_model_get_type();
-    
+
     if (!ret) {
     PyErr_SetString (PyExc_RuntimeError, "could not create canvas item model object");
     return NULL;
@@ -10419,11 +10070,11 @@
     }
 
     g_object_thaw_notify (G_OBJECT(ret));
-    
+
     return pygobject_new((GObject *)ret);
 }
 
-#line 10427 "goocanvas.c"
+#line 10078 "goocanvas.c"
 
 
 static PyObject *
@@ -10539,18 +10190,6 @@
             "could not import gtk");
         return ;
     }
-    if ((module = PyImport_ImportModule("gtk.gdk")) != NULL) {
-        _PyGdkCairoContext_Type = (PyTypeObject *)PyObject_GetAttrString(module, "CairoContext");
-        if (_PyGdkCairoContext_Type == NULL) {
-            PyErr_SetString(PyExc_ImportError,
-                "cannot import name CairoContext from gtk.gdk");
-            return ;
-        }
-    } else {
-        PyErr_SetString(PyExc_ImportError,
-            "could not import gtk.gdk");
-        return ;
-    }
 
 
 #line 198 "goocanvas.override"
@@ -10563,7 +10202,7 @@
 
 
 
-#line 10567 "goocanvas.c"
+#line 10206 "goocanvas.c"
     pyg_register_boxed(d, "Points", GOO_TYPE_CANVAS_POINTS, &PyGooCanvasPoints_Type);
     pyg_register_boxed(d, "LineDash", GOO_TYPE_CANVAS_LINE_DASH, &PyGooCanvasLineDash_Type);
     pyg_register_interface(d, "Item", GOO_TYPE_CANVAS_ITEM, &PyGooCanvasItem_Type);
@@ -10586,6 +10225,8 @@
     pyg_register_class_init(GOO_TYPE_CANVAS_ITEM_SIMPLE, __GooCanvasItemSimple_class_init);
     pygobject_register_class(d, "GooCanvasImage", GOO_TYPE_CANVAS_IMAGE, &PyGooCanvasImage_Type, Py_BuildValue("(O)", &PyGooCanvasItemSimple_Type));
     pyg_set_object_has_new_constructor(GOO_TYPE_CANVAS_IMAGE);
+    pygobject_register_class(d, "GooCanvasSvg", GOO_TYPE_CANVAS_SVG, &PyGooCanvasSvg_Type, Py_BuildValue("(O)", &PyGooCanvasItemSimple_Type));
+    pyg_set_object_has_new_constructor(GOO_TYPE_CANVAS_SVG);
     pygobject_register_class(d, "GooCanvasGroup", GOO_TYPE_CANVAS_GROUP, &PyGooCanvasGroup_Type, Py_BuildValue("(O)", &PyGooCanvasItemSimple_Type));
     pyg_set_object_has_new_constructor(GOO_TYPE_CANVAS_GROUP);
     pygobject_register_class(d, "GooCanvasEllipse", GOO_TYPE_CANVAS_ELLIPSE, &PyGooCanvasEllipse_Type, Py_BuildValue("(O)", &PyGooCanvasItemSimple_Type));

Added: branches/gcomprixogoo/src/boards/goocanvas.defs
==============================================================================
--- (empty file)
+++ branches/gcomprixogoo/src/boards/goocanvas.defs	Sun Nov  9 22:22:35 2008
@@ -0,0 +1,2465 @@
+;; -*- scheme -*-
+; object definitions ...
+(define-object Canvas
+  (in-module "Goo")
+  (parent "GtkContainer")
+  (c-name "GooCanvas")
+  (gtype-id "GOO_TYPE_CANVAS")
+)
+
+(define-interface Item
+  (in-module "Goo")
+  (c-name "GooCanvasItem")
+  (gtype-id "GOO_TYPE_CANVAS_ITEM")
+)
+
+(define-interface ItemModel
+  (in-module "Goo")
+  (c-name "GooCanvasItemModel")
+  (gtype-id "GOO_TYPE_CANVAS_ITEM_MODEL")
+)
+
+(define-object ItemModelSimple
+  (in-module "Goo")
+  (parent "GObject")
+  (c-name "GooCanvasItemModelSimple")
+  (gtype-id "GOO_TYPE_CANVAS_ITEM_MODEL_SIMPLE")
+)
+
+(define-object ImageModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasImageModel")
+  (gtype-id "GOO_TYPE_CANVAS_IMAGE_MODEL")
+)
+
+(define-object GroupModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasGroupModel")
+  (gtype-id "GOO_TYPE_CANVAS_GROUP_MODEL")
+)
+
+(define-object EllipseModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasEllipseModel")
+  (gtype-id "GOO_TYPE_CANVAS_ELLIPSE_MODEL")
+)
+
+(define-object ItemSimple
+  (in-module "Goo")
+  (parent "GObject")
+  (c-name "GooCanvasItemSimple")
+  (gtype-id "GOO_TYPE_CANVAS_ITEM_SIMPLE")
+  (fields
+   ("double" "bounds.x1")
+   ("double" "bounds.x2")
+   ("double" "bounds.y1")
+   ("double" "bounds.y2")
+   ("GooCanvasBounds" "bounds"))
+)
+
+(define-object Image
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasImage")
+  (gtype-id "GOO_TYPE_CANVAS_IMAGE")
+)
+
+(define-object Svg
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasSvg")
+  (gtype-id "GOO_TYPE_CANVAS_SVG")
+)
+
+(define-object Group
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasGroup")
+  (gtype-id "GOO_TYPE_CANVAS_GROUP")
+)
+
+(define-object Ellipse
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasEllipse")
+  (gtype-id "GOO_TYPE_CANVAS_ELLIPSE")
+)
+
+(define-object Path
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasPath")
+  (gtype-id "GOO_TYPE_CANVAS_PATH")
+)
+
+(define-object PathModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasPathModel")
+  (gtype-id "GOO_TYPE_CANVAS_PATH_MODEL")
+)
+
+(define-boxed Points
+  (in-module "Goo")
+  (c-name "GooCanvasPoints")
+  (gtype-id "GOO_TYPE_CANVAS_POINTS")
+  (copy-func "goo_canvas_points_ref")
+  (release-func "goo_canvas_points_unref")
+)
+
+(define-object Polyline
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasPolyline")
+  (gtype-id "GOO_TYPE_CANVAS_POLYLINE")
+)
+
+(define-object PolylineModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasPolylineModel")
+  (gtype-id "GOO_TYPE_CANVAS_POLYLINE_MODEL")
+)
+
+(define-object Rect
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasRect")
+  (gtype-id "GOO_TYPE_CANVAS_RECT")
+)
+
+(define-object RectModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasRectModel")
+  (gtype-id "GOO_TYPE_CANVAS_RECT_MODEL")
+)
+
+(define-object Style
+  (in-module "Goo")
+  (parent "GObject")
+  (c-name "GooCanvasStyle")
+  (gtype-id "GOO_TYPE_CANVAS_STYLE")
+)
+
+(define-object Table
+  (in-module "Goo")
+  (parent "GooCanvasGroup")
+  (c-name "GooCanvasTable")
+  (gtype-id "GOO_TYPE_CANVAS_TABLE")
+)
+
+(define-object TableModel
+  (in-module "Goo")
+  (parent "GooCanvasGroupModel")
+  (c-name "GooCanvasTableModel")
+  (gtype-id "GOO_TYPE_CANVAS_TABLE_MODEL")
+)
+
+(define-object Text
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasText")
+  (gtype-id "GOO_TYPE_CANVAS_TEXT")
+)
+
+(define-object TextModel
+  (in-module "Goo")
+  (parent "GooCanvasItemModelSimple")
+  (c-name "GooCanvasTextModel")
+  (gtype-id "GOO_TYPE_CANVAS_TEXT_MODEL")
+)
+
+(define-object Widget
+  (in-module "Goo")
+  (parent "GooCanvasItemSimple")
+  (c-name "GooCanvasWidget")
+  (gtype-id "GOO_TYPE_CANVAS_WIDGET")
+)
+
+;; Enumerations and flags ...
+
+(define-enum AnimateType
+  (in-module "Goo")
+  (c-name "GooCanvasAnimateType")
+  (gtype-id "GOO_TYPE_CANVAS_ANIMATE_TYPE")
+  (values
+    '("freeze" "GOO_CANVAS_ANIMATE_FREEZE")
+    '("reset" "GOO_CANVAS_ANIMATE_RESET")
+    '("restart" "GOO_CANVAS_ANIMATE_RESTART")
+    '("bounce" "GOO_CANVAS_ANIMATE_BOUNCE")
+  )
+)
+(define-enum PathCommandType
+  (in-module "Goo")
+  (c-name "GooCanvasPathCommandType")
+  ;(gtype-id "GOO_TYPE_CANVAS_PATH_COMMAND_TYPE")
+  (values
+    '("move-to" "GOO_CANVAS_PATH_MOVE_TO")
+    '("close-path" "GOO_CANVAS_PATH_CLOSE_PATH")
+    '("line-to" "GOO_CANVAS_PATH_LINE_TO")
+    '("horizontal-line-to" "GOO_CANVAS_PATH_HORIZONTAL_LINE_TO")
+    '("vertical-line-to" "GOO_CANVAS_PATH_VERTICAL_LINE_TO")
+    '("curve-to" "GOO_CANVAS_PATH_CURVE_TO")
+    '("smooth-curve-to" "GOO_CANVAS_PATH_SMOOTH_CURVE_TO")
+    '("quadratic-curve-to" "GOO_CANVAS_PATH_QUADRATIC_CURVE_TO")
+    '("smooth-quadratic-curve-to" "GOO_CANVAS_PATH_SMOOTH_QUADRATIC_CURVE_TO")
+    '("elliptical-arc" "GOO_CANVAS_PATH_ELLIPTICAL_ARC")
+  )
+)
+
+(define-flags PointerEvents
+  (in-module "Goo")
+  (c-name "GooCanvasPointerEvents")
+  (gtype-id "GOO_TYPE_CANVAS_POINTER_EVENTS")
+  (values
+    '("visible-mask" "GOO_CANVAS_EVENTS_VISIBLE_MASK")
+    '("painted-mask" "GOO_CANVAS_EVENTS_PAINTED_MASK")
+    '("fill-mask" "GOO_CANVAS_EVENTS_FILL_MASK")
+    '("stroke-mask" "GOO_CANVAS_EVENTS_STROKE_MASK")
+    '("none" "GOO_CANVAS_EVENTS_NONE")
+    '("visible-painted" "GOO_CANVAS_EVENTS_VISIBLE_PAINTED")
+    '("visible-fill" "GOO_CANVAS_EVENTS_VISIBLE_FILL")
+    '("visible-stroke" "GOO_CANVAS_EVENTS_VISIBLE_STROKE")
+    '("visible" "GOO_CANVAS_EVENTS_VISIBLE")
+    '("painted" "GOO_CANVAS_EVENTS_PAINTED")
+    '("fill" "GOO_CANVAS_EVENTS_FILL")
+    '("stroke" "GOO_CANVAS_EVENTS_STROKE")
+    '("all" "GOO_CANVAS_EVENTS_ALL")
+  )
+)
+
+(define-enum ItemVisibility
+  (in-module "Goo")
+  (c-name "GooCanvasItemVisibility")
+  (gtype-id "GOO_TYPE_CANVAS_ITEM_VISIBILITY")
+  (values
+    '("hidden" "GOO_CANVAS_ITEM_HIDDEN")
+    '("visible" "GOO_CANVAS_ITEM_VISIBLE")
+    '("visible-above-threshold" "GOO_CANVAS_ITEM_VISIBLE_ABOVE_THRESHOLD")
+    '("invisible" "GOO_CANVAS_ITEM_INVISIBLE")
+  )
+)
+
+
+;; From goocanvas.h
+
+(define-function goo_canvas_get_type
+  (c-name "goo_canvas_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_new
+  (c-name "goo_canvas_new")
+  (is-constructor-of "GooCanvas")
+  (return-type "GtkWidget*")
+)
+
+(define-method get_root_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_root_item")
+  (return-type "GooCanvasItem*")
+)
+
+(define-method set_root_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_set_root_item")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+  )
+)
+
+(define-method get_root_item_model
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_root_item_model")
+  (return-type "GooCanvasItemModel*")
+)
+
+(define-method set_root_item_model
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_set_root_item_model")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-method get_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_item")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-method get_item_at
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_item_at")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gboolean" "is_pointer_event")
+  )
+)
+
+(define-method get_items_at
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_items_at")
+  (return-type "GList*")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gboolean" "is_pointer_event")
+  )
+)
+
+(define-method get_items_in_area
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_items_in_area")
+  (return-type "GList*")
+  (parameters
+    '("GooCanvasBounds*" "area")
+    '("gboolean" "inside_area")
+    '("gboolean" "allow_overlaps")
+    '("gboolean" "include_containers")
+  )
+)
+
+(define-method get_scale
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_scale")
+  (return-type "gdouble")
+)
+
+(define-method set_scale
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_set_scale")
+  (return-type "none")
+  (parameters
+    '("gdouble" "pixels_per_unit")
+  )
+)
+
+(define-method get_bounds
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_bounds")
+  (return-type "none")
+  (parameters
+    '("gdouble*" "left")
+    '("gdouble*" "top")
+    '("gdouble*" "right")
+    '("gdouble*" "bottom")
+  )
+)
+
+(define-method set_bounds
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_set_bounds")
+  (return-type "none")
+  (parameters
+    '("gdouble" "left")
+    '("gdouble" "top")
+    '("gdouble" "right")
+    '("gdouble" "bottom")
+  )
+)
+
+(define-method scroll_to
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_scroll_to")
+  (return-type "none")
+  (parameters
+    '("gdouble" "left")
+    '("gdouble" "top")
+  )
+)
+
+(define-method grab_focus
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_grab_focus")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+  )
+)
+
+(define-method render
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_render")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds" (null-ok) (default "NULL"))
+    '("gdouble" "scale"  (default "1.0"))
+  )
+)
+
+(define-method convert_to_pixels
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_convert_to_pixels")
+  (return-type "none")
+  (parameters
+    '("gdouble*" "x")
+    '("gdouble*" "y")
+  )
+)
+
+(define-method convert_from_pixels
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_convert_from_pixels")
+  (return-type "none")
+  (parameters
+    '("gdouble*" "x")
+    '("gdouble*" "y")
+  )
+)
+
+(define-method convert_to_item_space
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_convert_to_item_space")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("gdouble*" "x")
+    '("gdouble*" "y")
+  )
+)
+
+(define-method convert_from_item_space
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_convert_from_item_space")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("gdouble*" "x")
+    '("gdouble*" "y")
+  )
+)
+
+(define-method pointer_grab
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_pointer_grab")
+  (return-type "GdkGrabStatus")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("GdkEventMask" "event_mask")
+    '("GdkCursor*" "cursor" (null-ok))
+    '("guint32" "time")
+  )
+)
+
+(define-method pointer_ungrab
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_pointer_ungrab")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("guint32" "time")
+  )
+)
+
+(define-method keyboard_grab
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_keyboard_grab")
+  (return-type "GdkGrabStatus")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("gboolean" "owner_events")
+    '("guint32" "time")
+  )
+)
+
+(define-method keyboard_ungrab
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_keyboard_ungrab")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("guint32" "time")
+  )
+)
+
+(define-method create_cairo_context
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_create_cairo_context")
+  (return-type "cairo_t*")
+)
+
+(define-method create_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_create_item")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-method unregister_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_unregister_item")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-method update
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_update")
+  (return-type "none")
+)
+
+(define-method request_update
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_request_update")
+  (return-type "none")
+)
+
+(define-method request_redraw
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_request_redraw")
+  (return-type "none")
+  (parameters
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method get_default_line_width
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_get_default_line_width")
+  (return-type "gdouble")
+)
+
+(define-method register_widget_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_register_widget_item")
+  (return-type "none")
+  (parameters
+    '("GooCanvasWidget*" "witem")
+  )
+)
+
+(define-method unregister_widget_item
+  (of-object "GooCanvas")
+  (c-name "goo_canvas_unregister_widget_item")
+  (return-type "none")
+  (parameters
+    '("GooCanvasWidget*" "witem")
+  )
+)
+
+(define-virtual set_scroll_adjustments
+  (of-object "GooCanvas")
+  (return-type "none")
+  (parameters
+    '("GtkAdjustment*" "hadjustment")
+    '("GtkAdjustment*" "vadjustment")
+  )
+)
+(define-virtual create_item
+  (of-object "GooCanvas")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+(define-virtual item_created
+  (of-object "GooCanvas")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "item")
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+
+;; From goocanvasellipse.h
+
+(define-function goo_canvas_ellipse_get_type
+  (c-name "goo_canvas_ellipse_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_ellipse_new
+  (c-name "goo_canvas_ellipse_new")
+  (is-constructor-of "GooCanvasEllipse")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("gdouble" "center_x")
+    '("gdouble" "center_y")
+    '("gdouble" "radius_x")
+    '("gdouble" "radius_y")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_ellipse_model_get_type
+  (c-name "goo_canvas_ellipse_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_ellipse_model_new
+  (c-name "goo_canvas_ellipse_model_new")
+  (is-constructor-of "GooCanvasEllipseModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("gdouble" "center_x")
+    '("gdouble" "center_y")
+    '("gdouble" "radius_x")
+    '("gdouble" "radius_y")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasenumtypes.h
+
+(define-function goo_canvas_animate_type_get_type
+  (c-name "goo_canvas_animate_type_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_path_command_type_get_type
+  (c-name "goo_canvas_path_command_type_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_pointer_events_get_type
+  (c-name "goo_canvas_pointer_events_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_item_visibility_get_type
+  (c-name "goo_canvas_item_visibility_get_type")
+  (return-type "GType")
+)
+
+
+
+;; From goocanvasgroup.h
+
+(define-function goo_canvas_group_get_type
+  (c-name "goo_canvas_group_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_group_new
+  (c-name "goo_canvas_group_new")
+  (is-constructor-of "GooCanvasGroup")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_group_model_get_type
+  (c-name "goo_canvas_group_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_group_model_new
+  (c-name "goo_canvas_group_model_new")
+  (is-constructor-of "GooCanvasGroupModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasimage.h
+
+(define-function goo_canvas_image_get_type
+  (c-name "goo_canvas_image_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_image_new
+  (c-name "goo_canvas_image_new")
+  (is-constructor-of "GooCanvasImage")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("GdkPixbuf*" "pixbuf")
+    '("gdouble" "x")
+    '("gdouble" "y")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_image_model_get_type
+  (c-name "goo_canvas_image_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_image_model_new
+  (c-name "goo_canvas_image_model_new")
+  (is-constructor-of "GooCanvasImageModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("GdkPixbuf*" "pixbuf")
+    '("gdouble" "x")
+    '("gdouble" "y")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvassvg.h
+
+(define-function goo_canvas_svg_get_type
+  (c-name "goo_canvas_svg_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_svg_new
+  (c-name "goo_canvas_svg_new")
+  (is-constructor-of "GooCanvasSvg")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("RsvgHandle*" "svg_handle")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasitem.h
+
+(define-function goo_canvas_item_get_type
+  (c-name "goo_canvas_item_get_type")
+  (return-type "GType")
+)
+
+(define-method get_n_children
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_n_children")
+  (return-type "gint")
+)
+
+(define-method get_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_child")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+
+(define-method find_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_find_child")
+  (return-type "gint")
+  (parameters
+    '("GooCanvasItem*" "child")
+  )
+)
+
+(define-method add_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_add_child")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("gint" "position" (default "-1"))
+  )
+)
+
+(define-method move_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_move_child")
+  (return-type "none")
+  (parameters
+    '("gint" "old_position")
+    '("gint" "new_position")
+  )
+)
+
+(define-method remove_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_remove_child")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+
+(define-method get_child_properties
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_child_properties")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+  )
+  (varargs #t)
+)
+
+(define-method set_child_properties
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_child_properties")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+  )
+  (varargs #t)
+)
+
+(define-method get_child_properties_valist
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_child_properties_valist")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("va_list" "var_args")
+  )
+)
+
+(define-method set_child_properties_valist
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_child_properties_valist")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("va_list" "var_args")
+  )
+)
+
+(define-method get_transform_for_child
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_transform_for_child")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("cairo_matrix_t*" "transform")
+  )
+)
+
+(define-method get_canvas
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_canvas")
+  (return-type "GooCanvas*")
+)
+
+(define-method set_canvas
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_canvas")
+  (return-type "none")
+  (parameters
+    '("GooCanvas*" "canvas")
+  )
+)
+
+(define-method get_parent
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_parent")
+  (return-type "GooCanvasItem*")
+)
+
+(define-method set_parent
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_parent")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "parent")
+  )
+)
+
+(define-method remove
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_remove")
+  (return-type "none")
+)
+
+(define-method is_container
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_is_container")
+  (return-type "gboolean")
+)
+
+(define-method raise
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_raise")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "above" (null-ok))
+  )
+)
+
+(define-method lower
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_lower")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "below" (null-ok))
+  )
+)
+
+(define-method get_transform
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_transform")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_matrix_t*" "transform")
+  )
+)
+
+(define-method set_transform
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_transform")
+  (return-type "none")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+
+(define-method set_simple_transform
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_simple_transform")
+  (return-type "none")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "scale")
+    '("gdouble" "rotation")
+  )
+)
+
+(define-method translate
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_translate")
+  (return-type "none")
+  (parameters
+    '("double" "tx")
+    '("double" "ty")
+  )
+)
+
+(define-method scale
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_scale")
+  (return-type "none")
+  (parameters
+    '("double" "sx")
+    '("double" "sy")
+  )
+)
+
+(define-method rotate
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_rotate")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method skew_x
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_skew_x")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method skew_y
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_skew_y")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method get_style
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_style")
+  (return-type "GooCanvasStyle*")
+)
+
+(define-method set_style
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_style")
+  (return-type "none")
+  (parameters
+    '("GooCanvasStyle*" "style")
+  )
+)
+
+(define-method animate
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_animate")
+  (return-type "none")
+  (parameters
+    '("double" "x")
+    '("double" "y")
+    '("double" "scale")
+    '("double" "degrees")
+    '("gboolean" "absolute")
+    '("gint" "duration")
+    '("gint" "step_time")
+    '("GooCanvasAnimateType" "type")
+  )
+)
+
+(define-method stop_animation
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_stop_animation")
+  (return-type "none")
+)
+
+(define-method get_bounds
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_bounds")
+  (return-type "none")
+  (parameters
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method get_items_at
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_items_at")
+  (return-type "GList*")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("cairo_t*" "cr")
+    '("gboolean" "is_pointer_event")
+    '("gboolean" "parent_is_visible")
+    '("GList*" "found_items")
+  )
+)
+
+(define-method is_visible
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_is_visible")
+  (return-type "gboolean")
+)
+
+(define-method get_model
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_model")
+  (return-type "GooCanvasItemModel*")
+)
+
+(define-method set_model
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_set_model")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-method request_update
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_request_update")
+  (return-type "none")
+)
+
+(define-method ensure_updated
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_ensure_updated")
+  (return-type "none")
+)
+
+(define-method update
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_update")
+  (return-type "none")
+  (parameters
+    '("gboolean" "entire_tree")
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method paint
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_paint")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds" (null-ok) (default "NULL"))
+    '("gdouble" "scale" (default "1.0"))
+  )
+)
+
+(define-method get_requested_area
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_requested_area")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "requested_area")
+  )
+)
+
+(define-method get_requested_height
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_get_requested_height")
+  (return-type "gdouble")
+  (parameters
+    '("cairo_t*" "cr")
+    '("gdouble" "width")
+  )
+)
+
+(define-method allocate_area
+  (of-object "GooCanvasItem")
+  (c-name "goo_canvas_item_allocate_area")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "requested_area")
+    '("GooCanvasBounds*" "allocated_area")
+    '("gdouble" "x_offset")
+    '("gdouble" "y_offset")
+  )
+)
+
+(define-function goo_canvas_item_class_install_child_property
+  (c-name "goo_canvas_item_class_install_child_property")
+  (return-type "none")
+  (parameters
+    '("GObjectClass*" "iclass")
+    '("guint" "property_id")
+    '("GParamSpec*" "pspec")
+  )
+)
+
+(define-function goo_canvas_item_class_find_child_property
+  (c-name "goo_canvas_item_class_find_child_property")
+  (return-type "GParamSpec*")
+  (parameters
+    '("GObjectClass*" "iclass")
+    '("const-gchar*" "property_name")
+  )
+)
+
+(define-function goo_canvas_item_class_list_child_properties
+  (c-name "goo_canvas_item_class_list_child_properties")
+  (return-type "GParamSpec**")
+  (parameters
+    '("GObjectClass*" "iclass")
+    '("guint*" "n_properties")
+  )
+)
+
+
+(define-virtual get_canvas
+  (of-object "GooCanvasItem")
+  (return-type "GooCanvas*")
+)
+(define-virtual set_canvas
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvas*" "canvas")
+  )
+)
+(define-virtual get_n_children
+  (of-object "GooCanvasItem")
+  (return-type "gint")
+)
+(define-virtual get_child
+  (of-object "GooCanvasItem")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual request_update
+  (of-object "GooCanvasItem")
+  (return-type "none")
+)
+(define-virtual add_child
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("gint" "position")
+  )
+)
+(define-virtual move_child
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("gint" "old_position")
+    '("gint" "new_position")
+  )
+)
+(define-virtual remove_child
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual get_child_property
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("guint" "property_id")
+    '("GValue*" "value")
+    '("GParamSpec*" "pspec")
+  )
+)
+(define-virtual set_child_property
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("guint" "property_id")
+    '("const-GValue*" "value")
+    '("GParamSpec*" "pspec")
+  )
+)
+(define-virtual get_transform_for_child
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "child")
+    '("cairo_matrix_t*" "transform")
+  )
+)
+(define-virtual get_parent
+  (of-object "GooCanvasItem")
+  (return-type "GooCanvasItem*")
+)
+(define-virtual set_parent
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItem*" "parent")
+  )
+)
+(define-virtual get_bounds
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+(define-virtual get_items_at
+  (of-object "GooCanvasItem")
+  (return-type "GList*")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("cairo_t*" "cr")
+    '("gboolean" "is_pointer_event")
+    '("gboolean" "parent_is_visible")
+    '("GList*" "found_items")
+  )
+)
+(define-virtual update
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("gboolean" "entire_tree")
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+(define-virtual paint
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("const-GooCanvasBounds*" "bounds")
+    '("gdouble" "scale")
+  )
+)
+(define-virtual get_requested_area
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "requested_area")
+  )
+)
+(define-virtual allocate_area
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("const-GooCanvasBounds*" "requested_area")
+    '("const-GooCanvasBounds*" "allocated_area")
+    '("gdouble" "x_offset")
+    '("gdouble" "y_offset")
+  )
+)
+(define-virtual get_transform
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_matrix_t*" "transform")
+  )
+)
+(define-virtual set_transform
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+(define-virtual get_style
+  (of-object "GooCanvasItem")
+  (return-type "GooCanvasStyle*")
+)
+(define-virtual set_style
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasStyle*" "style")
+  )
+)
+(define-virtual is_visible
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+)
+(define-virtual get_requested_height
+  (of-object "GooCanvasItem")
+  (return-type "gdouble")
+  (parameters
+    '("cairo_t*" "cr")
+    '("gdouble" "width")
+  )
+)
+(define-virtual get_model
+  (of-object "GooCanvasItem")
+  (return-type "GooCanvasItemModel*")
+)
+(define-virtual set_model
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+(define-virtual enter_notify_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventCrossing*" "event")
+  )
+)
+(define-virtual leave_notify_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventCrossing*" "event")
+  )
+)
+(define-virtual motion_notify_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventMotion*" "event")
+  )
+)
+(define-virtual button_press_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventButton*" "event")
+  )
+)
+(define-virtual button_release_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventButton*" "event")
+  )
+)
+(define-virtual focus_in_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventFocus*" "event")
+  )
+)
+(define-virtual focus_out_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventFocus*" "event")
+  )
+)
+(define-virtual key_press_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventKey*" "event")
+  )
+)
+(define-virtual key_release_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventKey*" "event")
+  )
+)
+(define-virtual grab_broken_event
+  (of-object "GooCanvasItem")
+  (return-type "gboolean")
+  (parameters
+    '("GooCanvasItem*" "target")
+    '("GdkEventGrabBroken*" "event")
+  )
+)
+(define-virtual child_notify
+  (of-object "GooCanvasItem")
+  (return-type "none")
+  (parameters
+    '("GParamSpec*" "pspec")
+  )
+)
+
+;; From goocanvasitemmodel.h
+
+(define-function goo_canvas_item_model_get_type
+  (c-name "goo_canvas_item_model_get_type")
+  (return-type "GType")
+)
+
+(define-method get_n_children
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_n_children")
+  (return-type "gint")
+)
+
+(define-method get_child
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_child")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+
+(define-method add_child
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_add_child")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("gint" "position")
+  )
+)
+
+(define-method move_child
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_move_child")
+  (return-type "none")
+  (parameters
+    '("gint" "old_position")
+    '("gint" "new_position")
+  )
+)
+
+(define-method remove_child
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_remove_child")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+
+(define-method find_child
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_find_child")
+  (return-type "gint")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+  )
+)
+
+(define-method get_child_properties
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_child_properties")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+  )
+  (varargs #t)
+)
+
+(define-method set_child_properties
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_child_properties")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+  )
+  (varargs #t)
+)
+
+(define-method get_child_properties_valist
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_child_properties_valist")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("va_list" "var_args")
+  )
+)
+
+(define-method set_child_properties_valist
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_child_properties_valist")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("va_list" "var_args")
+  )
+)
+
+(define-method get_parent
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_parent")
+  (return-type "GooCanvasItemModel*")
+)
+
+(define-method set_parent
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_parent")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+  )
+)
+
+(define-method remove
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_remove")
+  (return-type "none")
+)
+
+(define-method is_container
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_is_container")
+  (return-type "gboolean")
+)
+
+(define-method raise
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_raise")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "above")
+  )
+)
+
+(define-method lower
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_lower")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "below")
+  )
+)
+
+(define-method get_transform
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_transform")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_matrix_t*" "transform")
+  )
+)
+
+(define-method set_transform
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_transform")
+  (return-type "none")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+
+(define-method set_simple_transform
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_simple_transform")
+  (return-type "none")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "scale")
+    '("gdouble" "rotation")
+  )
+)
+
+(define-method translate
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_translate")
+  (return-type "none")
+  (parameters
+    '("double" "tx")
+    '("double" "ty")
+  )
+)
+
+(define-method scale
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_scale")
+  (return-type "none")
+  (parameters
+    '("double" "sx")
+    '("double" "sy")
+  )
+)
+
+(define-method rotate
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_rotate")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method skew_x
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_skew_x")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method skew_y
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_skew_y")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+    '("double" "cx")
+    '("double" "cy")
+  )
+)
+
+(define-method get_style
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_get_style")
+  (return-type "GooCanvasStyle*")
+)
+
+(define-method set_style
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_set_style")
+  (return-type "none")
+  (parameters
+    '("GooCanvasStyle*" "style")
+  )
+)
+
+(define-method animate
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_animate")
+  (return-type "none")
+  (parameters
+    '("double" "x")
+    '("double" "y")
+    '("double" "scale")
+    '("double" "degrees")
+    '("gboolean" "absolute")
+    '("gint" "duration")
+    '("gint" "step_time")
+    '("GooCanvasAnimateType" "type")
+  )
+)
+
+(define-method stop_animation
+  (of-object "GooCanvasItemModel")
+  (c-name "goo_canvas_item_model_stop_animation")
+  (return-type "none")
+)
+
+(define-function goo_canvas_item_model_class_install_child_property
+  (c-name "goo_canvas_item_model_class_install_child_property")
+  (return-type "none")
+  (parameters
+    '("GObjectClass*" "mclass")
+    '("guint" "property_id")
+    '("GParamSpec*" "pspec")
+  )
+)
+
+(define-function goo_canvas_item_model_class_find_child_property
+  (c-name "goo_canvas_item_model_class_find_child_property")
+  (return-type "GParamSpec*")
+  (parameters
+    '("GObjectClass*" "mclass")
+    '("const-gchar*" "property_name")
+  )
+)
+
+(define-function goo_canvas_item_model_class_list_child_properties
+  (c-name "goo_canvas_item_model_class_list_child_properties")
+  (return-type "GParamSpec**")
+  (parameters
+    '("GObjectClass*" "mclass")
+    '("guint*" "n_properties")
+  )
+)
+
+(define-virtual get_n_children
+  (of-object "GooCanvasItemModel")
+  (return-type "gint")
+)
+(define-virtual get_child
+  (of-object "GooCanvasItemModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual add_child
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("gint" "position")
+  )
+)
+(define-virtual move_child
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gint" "old_position")
+    '("gint" "new_position")
+  )
+)
+(define-virtual remove_child
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual get_child_property
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("guint" "property_id")
+    '("GValue*" "value")
+    '("GParamSpec*" "pspec")
+  )
+)
+(define-virtual set_child_property
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "child")
+    '("guint" "property_id")
+    '("const-GValue*" "value")
+    '("GParamSpec*" "pspec")
+  )
+)
+(define-virtual get_parent
+  (of-object "GooCanvasItemModel")
+  (return-type "GooCanvasItemModel*")
+)
+(define-virtual set_parent
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+  )
+)
+(define-virtual get_transform
+  (of-object "GooCanvasItemModel")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_matrix_t*" "transform")
+  )
+)
+(define-virtual set_transform
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+(define-virtual get_style
+  (of-object "GooCanvasItemModel")
+  (return-type "GooCanvasStyle*")
+)
+(define-virtual set_style
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GooCanvasStyle*" "style")
+  )
+)
+(define-virtual create_item
+  (of-object "GooCanvasItemModel")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvas*" "canvas")
+  )
+)
+(define-virtual child_added
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual child_moved
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gint" "old_child_num")
+    '("gint" "new_child_num")
+  )
+)
+(define-virtual child_removed
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gint" "child_num")
+  )
+)
+(define-virtual changed
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("gboolean" "recompute_bounds")
+  )
+)
+(define-virtual child_notify
+  (of-object "GooCanvasItemModel")
+  (return-type "none")
+  (parameters
+    '("GParamSpec*" "pspec")
+  )
+)
+
+
+;; From goocanvasitemsimple.h
+
+(define-function goo_canvas_item_simple_get_type
+  (c-name "goo_canvas_item_simple_get_type")
+  (return-type "GType")
+)
+
+(define-method get_path_bounds
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_get_path_bounds")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method user_bounds_to_device
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_user_bounds_to_device")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method user_bounds_to_parent
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_user_bounds_to_parent")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("GooCanvasBounds*" "bounds")
+  )
+)
+
+(define-method check_in_path
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_check_in_path")
+  (return-type "gboolean")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("cairo_t*" "cr")
+    '("GooCanvasPointerEvents" "pointer_events")
+  )
+)
+
+(define-method paint_path
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_paint_path")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+
+(define-method changed
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_changed")
+  (return-type "none")
+  (parameters
+    '("gboolean" "recompute_bounds")
+  )
+)
+
+(define-method check_style
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_check_style")
+  (return-type "none")
+)
+
+(define-method get_line_width
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_get_line_width")
+  (return-type "gdouble")
+)
+
+(define-method set_model
+  (of-object "GooCanvasItemSimple")
+  (c-name "goo_canvas_item_simple_set_model")
+  (return-type "none")
+  (parameters
+    '("GooCanvasItemModel*" "model")
+  )
+)
+
+(define-function goo_canvas_item_model_simple_get_type
+  (c-name "goo_canvas_item_model_simple_get_type")
+  (return-type "GType")
+)
+
+
+(define-virtual simple_create_path
+  (of-object "GooCanvasItemSimple")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+(define-virtual simple_update
+  (of-object "GooCanvasItemSimple")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+(define-virtual simple_paint
+  (of-object "GooCanvasItemSimple")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("const-GooCanvasBounds*" "bounds")
+  )
+)
+(define-virtual simple_is_item_at
+  (of-object "GooCanvasItemSimple")
+  (return-type "gboolean")
+  (parameters
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("cairo_t*" "cr")
+    '("gboolean" "is_pointer_event")
+  )
+)
+
+;; From goocanvasmarshal.h
+
+
+
+;; From goocanvaspath.h
+
+(define-function goo_canvas_path_get_type
+  (c-name "goo_canvas_path_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_path_new
+  (c-name "goo_canvas_path_new")
+  (is-constructor-of "GooCanvasPath")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("const-gchar*" "path_data")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_path_model_get_type
+  (c-name "goo_canvas_path_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_path_model_new
+  (c-name "goo_canvas_path_model_new")
+  (is-constructor-of "GooCanvasPathModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("const-gchar*" "path_data")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvaspolyline.h
+
+(define-function goo_canvas_points_get_type
+  (c-name "goo_canvas_points_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_points_new
+  (c-name "goo_canvas_points_new")
+  (is-constructor-of "GooCanvasPoints")
+  (return-type "GooCanvasPoints*")
+  (parameters
+    '("int" "num_points")
+  )
+)
+
+(define-method ref
+  (of-object "GooCanvasPoints")
+  (c-name "goo_canvas_points_ref")
+  (return-type "GooCanvasPoints*")
+)
+
+(define-method unref
+  (of-object "GooCanvasPoints")
+  (c-name "goo_canvas_points_unref")
+  (return-type "none")
+)
+
+(define-function goo_canvas_polyline_get_type
+  (c-name "goo_canvas_polyline_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_polyline_new
+  (c-name "goo_canvas_polyline_new")
+  (is-constructor-of "GooCanvasPolyline")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("gboolean" "close_path")
+    '("gint" "num_points")
+  )
+  (varargs #t)
+)
+
+(define-function polyline_new_line
+  (c-name "goo_canvas_polyline_new_line")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("gdouble" "x1")
+    '("gdouble" "y1")
+    '("gdouble" "x2")
+    '("gdouble" "y2")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_polyline_model_get_type
+  (c-name "goo_canvas_polyline_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_polyline_model_new
+  (c-name "goo_canvas_polyline_model_new")
+  (is-constructor-of "GooCanvasPolylineModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("gboolean" "close_path")
+    '("gint" "num_points")
+  )
+  (varargs #t)
+)
+
+(define-function polyline_model_new_line
+  (c-name "goo_canvas_polyline_model_new_line")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("gdouble" "x1")
+    '("gdouble" "y1")
+    '("gdouble" "x2")
+    '("gdouble" "y2")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasrect.h
+
+(define-function goo_canvas_rect_get_type
+  (c-name "goo_canvas_rect_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_rect_new
+  (c-name "goo_canvas_rect_new")
+  (is-constructor-of "GooCanvasRect")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "width")
+    '("gdouble" "height")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_rect_model_get_type
+  (c-name "goo_canvas_rect_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_rect_model_new
+  (c-name "goo_canvas_rect_model_new")
+  (is-constructor-of "GooCanvasRectModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "width")
+    '("gdouble" "height")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasstyle.h
+
+(define-function goo_canvas_style_get_type
+  (c-name "goo_canvas_style_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_style_new
+  (c-name "goo_canvas_style_new")
+  (is-constructor-of "GooCanvasStyle")
+  (return-type "GooCanvasStyle*")
+)
+
+(define-method copy
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_copy")
+  (return-type "GooCanvasStyle*")
+)
+
+(define-method get_parent
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_get_parent")
+  (return-type "GooCanvasStyle*")
+)
+
+(define-method set_parent
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_set_parent")
+  (return-type "none")
+  (parameters
+    '("GooCanvasStyle*" "parent")
+  )
+)
+
+(define-method get_style_property
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_get_property")
+  (return-type "GValue*")
+  (parameters
+    '("GQuark" "property_id")
+  )
+)
+
+(define-method set_style_property
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_set_property")
+  (return-type "none")
+  (parameters
+    '("GQuark" "property_id")
+    '("const-GValue*" "value")
+  )
+)
+
+(define-method set_stroke_options
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_set_stroke_options")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+
+(define-method set_fill_options
+  (of-object "GooCanvasStyle")
+  (c-name "goo_canvas_style_set_fill_options")
+  (return-type "gboolean")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+
+
+
+;; From goocanvastable.h
+
+(define-function goo_canvas_table_get_type
+  (c-name "goo_canvas_table_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_table_new
+  (c-name "goo_canvas_table_new")
+  (is-constructor-of "GooCanvasTable")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_table_model_get_type
+  (c-name "goo_canvas_table_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_table_model_new
+  (c-name "goo_canvas_table_model_new")
+  (is-constructor-of "GooCanvasTableModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvastext.h
+
+(define-function goo_canvas_text_get_type
+  (c-name "goo_canvas_text_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_text_new
+  (c-name "goo_canvas_text_new")
+  (is-constructor-of "GooCanvasText")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("const-char*" "string")
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "width")
+    '("GtkAnchorType" "anchor")
+  )
+  (varargs #t)
+)
+
+(define-function goo_canvas_text_model_get_type
+  (c-name "goo_canvas_text_model_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_text_model_new
+  (c-name "goo_canvas_text_model_new")
+  (is-constructor-of "GooCanvasTextModel")
+  (return-type "GooCanvasItemModel*")
+  (parameters
+    '("GooCanvasItemModel*" "parent")
+    '("const-char*" "string")
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "width")
+    '("GtkAnchorType" "anchor")
+  )
+  (varargs #t)
+)
+
+
+
+;; From goocanvasutils.h
+
+(define-function goo_canvas_parse_path_data
+  (c-name "goo_canvas_parse_path_data")
+  (return-type "GArray*")
+  (parameters
+    '("const-gchar*" "path_data")
+  )
+)
+
+(define-function goo_canvas_create_path
+  (c-name "goo_canvas_create_path")
+  (return-type "none")
+  (parameters
+    '("GArray*" "commands")
+    '("cairo_t*" "cr")
+  )
+)
+
+(define-function goo_canvas_line_dash_get_type
+  (c-name "goo_canvas_line_dash_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_line_dash_new
+  (c-name "goo_canvas_line_dash_new")
+  (is-constructor-of "GooCanvasLineDash")
+  (return-type "GooCanvasLineDash*")
+  (parameters
+    '("gint" "num_dashes")
+  )
+  (varargs #t)
+)
+
+(define-boxed LineDash
+  (in-module "Goo")
+  (c-name "GooCanvasLineDash")
+  (gtype-id "GOO_TYPE_CANVAS_LINE_DASH")
+)
+
+(define-function goo_canvas_line_dash_newv
+  (c-name "goo_canvas_line_dash_newv")
+  (is-constructor-of "GooCanvasLineDash")
+  (return-type "GooCanvasLineDash*")
+  (parameters
+    '("gint" "num_dashes")
+    '("double*" "dashes")
+  )
+)
+
+(define-method ref
+  (of-object "GooCanvasLineDash")
+  (c-name "goo_canvas_line_dash_ref")
+  (return-type "GooCanvasLineDash*")
+)
+
+(define-method unref
+  (of-object "GooCanvasLineDash")
+  (c-name "goo_canvas_line_dash_unref")
+  (return-type "none")
+)
+
+(define-function goo_cairo_matrix_get_type
+  (c-name "goo_cairo_matrix_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_matrix_copy
+  (c-name "goo_cairo_matrix_copy")
+  (return-type "cairo_matrix_t*")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+
+(define-function goo_cairo_matrix_free
+  (c-name "goo_cairo_matrix_free")
+  (return-type "none")
+  (parameters
+    '("cairo_matrix_t*" "matrix")
+  )
+)
+
+(define-function goo_cairo_pattern_get_type
+  (c-name "goo_cairo_pattern_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_fill_rule_get_type
+  (c-name "goo_cairo_fill_rule_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_operator_get_type
+  (c-name "goo_cairo_operator_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_antialias_get_type
+  (c-name "goo_cairo_antialias_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_line_cap_get_type
+  (c-name "goo_cairo_line_cap_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_cairo_line_join_get_type
+  (c-name "goo_cairo_line_join_get_type")
+  (return-type "GType")
+)
+
+
+
+;; From goocanvaswidget.h
+
+(define-function goo_canvas_widget_get_type
+  (c-name "goo_canvas_widget_get_type")
+  (return-type "GType")
+)
+
+(define-function goo_canvas_widget_new
+  (c-name "goo_canvas_widget_new")
+  (is-constructor-of "GooCanvasWidget")
+  (return-type "GooCanvasItem*")
+  (parameters
+    '("GooCanvasItem*" "parent")
+    '("GtkWidget*" "widget")
+    '("gdouble" "x")
+    '("gdouble" "y")
+    '("gdouble" "width")
+    '("gdouble" "height")
+  )
+  (varargs #t)
+)

Added: branches/gcomprixogoo/src/boards/goocanvas.override
==============================================================================
--- (empty file)
+++ branches/gcomprixogoo/src/boards/goocanvas.override	Sun Nov  9 22:22:35 2008
@@ -0,0 +1,1603 @@
+/* -*- Mode: C; c-basic-offset: 4 -*- */
+%%
+headers
+#define NO_IMPORT_PYGOBJECT
+#include "pygobject.h"
+#include <goocanvas.h>
+#include <pygtk/pygtk.h>
+
+#include <pycairo.h>
+
+#include "config.h"
+
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;
+#endif
+
+extern Pycairo_CAPI_t *Pycairo_CAPI;
+extern PyTypeObject PyGooCanvasBounds_Type;
+
+static PyObject *
+_glist_to_pylist_objs (GList *source)
+{
+    GList *iter;
+    PyObject *dest = PyList_New (0);
+    for (iter = source; iter != NULL; iter = iter->next)
+    {
+        PyObject *item = pygobject_new ((GObject *)iter->data);
+        PyList_Append (dest, item);
+        Py_DECREF (item);
+    }
+    return dest;
+}
+
+#if 0
+
+static PyObject *
+_gslist_to_pylist_objs (GSList *source)
+{
+    GSList *iter;
+    PyObject *dest = PyList_New (0);
+    for (iter = source; iter != NULL; iter = iter->next)
+    {
+        PyObject *item = pygobject_new ((GObject *)iter->data);
+        PyList_Append (dest, item);
+        Py_DECREF (item);
+    }
+    return dest;
+}
+
+static PyObject *
+_gslist_to_pylist_strs (GSList *source)
+{
+    GSList *iter;
+    PyObject *dest = PyList_New (0);
+    for (iter = source; iter != NULL; iter = iter->next)
+    {
+        PyObject *item = PyString_FromString ((char *)iter->data);
+        PyList_Append (dest, item);
+        Py_DECREF (item);
+    }
+    return dest;
+}
+
+#endif
+
+typedef struct {
+    PyObject_HEAD
+    GooCanvasBounds bounds;
+} PyGooCanvasBounds;
+
+#define bounds_getter(field)                                                    \
+static PyObject *                                                               \
+_pygoo_canvas_bounds_get_##field(PyGooCanvasBounds *self, void *closure)        \
+{                                                                               \
+    return PyFloat_FromDouble(self->bounds.field);                              \
+}
+
+#define bounds_setter(field)                                                                    \
+static int                                                                                      \
+_pygoo_canvas_bounds_set_##field(PyGooCanvasBounds *self, PyObject *value, void *closure)       \
+{                                                                                               \
+    if (!PyFloat_Check(value)) {                                                                \
+        PyErr_SetString(PyExc_TypeError, #field" must be a float");                             \
+        return -1;                                                                              \
+    }                                                                                           \
+    self->bounds.field = PyFloat_AsDouble(value);                                               \
+    return 0;                                                                                   \
+}
+
+bounds_getter(x1);
+bounds_setter(x1);
+bounds_getter(y1);
+bounds_setter(y1);
+bounds_getter(x2);
+bounds_setter(x2);
+bounds_getter(y2);
+bounds_setter(y2);
+
+
+static PyGetSetDef _PyGooCanvasBounds_getsets[] = {
+    { "x1", (getter)_pygoo_canvas_bounds_get_x1, (setter)_pygoo_canvas_bounds_set_x1 },
+    { "y1", (getter)_pygoo_canvas_bounds_get_y1, (setter)_pygoo_canvas_bounds_set_y1 },
+    { "x2", (getter)_pygoo_canvas_bounds_get_x2, (setter)_pygoo_canvas_bounds_set_x2 },
+    { "y2", (getter)_pygoo_canvas_bounds_get_y2, (setter)_pygoo_canvas_bounds_set_y2 },
+    { NULL, (getter)0, (setter)0 }
+};
+
+static PyObject *
+pygoo_canvas_bounds_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "x1", "y1", "x2", "y2", NULL };
+    PyGooCanvasBounds *self;
+    GooCanvasBounds bounds = {0,};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "|dddd:goocanvas.Bounds.__init__", kwlist,
+                                     &bounds.x1, &bounds.y1, &bounds.x2, &bounds.y2))
+        return NULL;
+
+    self = (PyGooCanvasBounds *) PyObject_NEW(PyGooCanvasBounds,
+                                              &PyGooCanvasBounds_Type);
+    self->bounds = bounds;
+    return (PyObject *) self;
+}
+
+static void
+pygoo_canvas_bounds_dealloc(PyGooCanvasBounds *self)
+{
+    PyObject_DEL(self);
+}
+
+static PyMethodDef _PyGooCanvasBounds_methods[] = {
+    { NULL,  0, 0 }
+};
+
+PyTypeObject PyGooCanvasBounds_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                  /* ob_size */
+    "goocanvas.Bounds",                 /* tp_name */
+    sizeof(PyGooCanvasBounds),		/* tp_basicsize */
+    0,                                  /* tp_itemsize */
+    /* methods */
+    (destructor)pygoo_canvas_bounds_dealloc, /* tp_dealloc */
+    (printfunc)0,                       /* tp_print */
+    (getattrfunc)0,                     /* tp_getattr */
+    (setattrfunc)0,                     /* tp_setattr */
+    (cmpfunc)0,                         /* tp_compare */
+    (reprfunc)0,                        /* tp_repr */
+    0,                                  /* tp_as_number */
+    0,                                  /* tp_as_sequence */
+    0,                                  /* tp_as_mapping */
+    (hashfunc)0,                        /* tp_hash */
+    (ternaryfunc)0,                     /* tp_call */
+    (reprfunc)0,                        /* tp_str */
+    (getattrofunc)0,                    /* tp_getattro */
+    (setattrofunc)0,                    /* tp_setattro */
+    0,                                  /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,   		/* tp_flags */
+    "Holds bounding box coordinates",   /* Documentation string */
+    (traverseproc)0,                    /* tp_traverse */
+    (inquiry)0,                         /* tp_clear */
+    (richcmpfunc)0,                     /* tp_richcompare */
+    0,                                  /* tp_weaklistoffset */
+    (getiterfunc)0,                     /* tp_iter */
+    (iternextfunc)0,                    /* tp_iternext */
+    _PyGooCanvasBounds_methods,         /* tp_methods */
+    0,                                  /* tp_members */
+    _PyGooCanvasBounds_getsets,         /* tp_getset */
+    (PyTypeObject *)0,                  /* tp_base */
+    (PyObject *)0,                      /* tp_dict */
+    0,                                  /* tp_descr_get */
+    0,                                  /* tp_descr_set */
+    0,                                  /* tp_dictoffset */
+    (initproc)0,                        /* tp_init */
+    0,                			/* tp_alloc */
+    pygoo_canvas_bounds_tp_new,         /* tp_new */
+    0,                                  /* tp_free */
+    (inquiry)0,                         /* tp_is_gc */
+    (PyObject *)0,                      /* tp_bases */
+};
+
+PyObject*
+pygoo_canvas_bounds_new(const GooCanvasBounds *bounds)
+{
+    PyGooCanvasBounds *self;
+
+    self = (PyGooCanvasBounds *)PyObject_NEW(PyGooCanvasBounds,
+                                             &PyGooCanvasBounds_Type);
+    if (G_UNLIKELY(self == NULL))
+	return NULL;
+    if (bounds)
+        self->bounds = *bounds;
+    return (PyObject *)self;
+}
+
+%%
+init
+    if (PyType_Ready(&PyGooCanvasBounds_Type) < 0) {
+        g_return_if_reached();
+    }
+    if (PyDict_SetItemString(d, "Bounds", (PyObject *)&PyGooCanvasBounds_Type) < 0) {
+        g_return_if_reached();
+    }
+
+
+%%
+modulename goocanvas
+
+%%
+import gobject.GObject as PyGObject_Type
+import gtk.Container as PyGtkContainer_Type
+import gtk.Adjustment as PyGtkAdjustment_Type
+
+%%
+ignore
+goo_canvas_ellipse_new
+goo_canvas_ellipse_model_new
+goo_canvas_group_new
+goo_canvas_group_model_new
+goo_canvas_svg_new
+goo_canvas_image_new
+goo_canvas_image_model_new
+goo_canvas_path_new
+goo_canvas_path_model_new
+goo_canvas_polyline_new
+goo_canvas_polyline_model_new
+goo_canvas_rect_new
+goo_canvas_rect_model_new
+goo_canvas_text_new
+goo_canvas_text_model_new
+goo_canvas_item_new
+goo_canvas_item_model_new
+goo_canvas_line_dash_new
+goo_canvas_style_new
+goo_canvas_table_new
+goo_canvas_table_model_new
+goo_canvas_widget_new
+goo_canvas_item_get_child_properties_valist
+goo_canvas_item_set_child_properties_valist
+goo_canvas_item_model_get_child_properties_valist
+goo_canvas_item_model_set_child_properties_valist
+goo_canvas_item_class_find_child_property
+goo_canvas_item_model_class_find_child_property
+goo_canvas_item_class_list_child_properties
+goo_canvas_item_model_class_list_child_properties
+goo_canvas_item_class_install_child_property
+goo_canvas_item_model_class_install_child_property
+%%
+ignore-glob
+    *_get_type
+    _*
+    *_ref
+    *_unref
+
+%%
+override goo_canvas_item_simple_get_path_bounds kwargs
+static PyObject *
+_wrap_goo_canvas_item_simple_get_path_bounds(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "cr", NULL };
+    PyObject *py_bounds;
+    PycairoContext *cr;
+    GooCanvasBounds bounds = {0,};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:get_path_bounds",
+        kwlist, &PycairoContext_Type, &cr))
+        return NULL;
+
+    GooCanvasItemSimple *simple = (GooCanvasItemSimple*) self->obj;
+
+    goo_canvas_item_simple_get_path_bounds (simple, cr->ctx, &bounds);
+
+    py_bounds = pygoo_canvas_bounds_new(&bounds);
+
+    return py_bounds;
+}
+
+%%
+override goo_canvas_points_new kwargs
+static int
+_wrap_goo_canvas_points_new(PyGBoxed *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "data", NULL };
+    PyObject *py_data;
+    gint i, n_data;
+    GooCanvasPoints *points;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                "O!:GooCanvasPoints.__init__",
+                                kwlist, &PyList_Type, &py_data))
+        return -1;
+    n_data = PyList_Size(py_data);
+    points = goo_canvas_points_new(n_data);
+    for (i = 0; i < n_data; i ++) {
+        PyObject *item = PyList_GetItem(py_data, i);
+        if (!PyArg_ParseTuple(item, "dd", &points->coords[2*i], &points->coords[2*i + 1])) {
+            goo_canvas_points_unref(points);
+            return -1;
+        }
+    }
+    self->boxed = points;
+    self->free_on_dealloc = TRUE;
+    self->gtype = GOO_TYPE_CANVAS_POINTS;
+    return 0;
+}
+%%
+override goo_canvas_polyline_new_line kwargs
+static PyObject *
+_wrap_goo_canvas_polyline_new_line(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    PyGObject       *parent;
+    double          x1, y1, x2, y2;
+    GooCanvasItem   *ret;
+    GObjectClass    *class;
+    Py_ssize_t      pos;
+    PyObject        *value;
+    PyObject        *key;
+    GType           type;
+
+    if (!PyArg_ParseTuple(args, "O!dddd:polyline_new_line",
+                          &PyGooCanvasItem_Type, &parent, &x1,
+                          &y1, &x2, &y2))
+        return NULL;
+
+    ret = goo_canvas_polyline_new_line(GOO_CANVAS_ITEM(parent->obj), x1,
+                                       y1, x2, y2, NULL);
+
+    type = goo_canvas_polyline_get_type();
+
+    if (!ret) {
+    PyErr_SetString (PyExc_RuntimeError, "could not create canvas item object");
+    return NULL;
+    }
+
+    class = G_OBJECT_GET_CLASS(ret);
+    g_object_freeze_notify (G_OBJECT(ret));
+    pos = 0;
+
+    while (kwargs && PyDict_Next (kwargs, &pos, &key, &value)) {
+    gchar *key_str = PyString_AsString (key);
+    GParamSpec *pspec;
+    GValue gvalue ={ 0, };
+
+    pspec = g_object_class_find_property (class, key_str);
+    if (!pspec) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "canvas item `%s' doesn't support property `%s'",
+		       g_type_name(type), key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    gtk_object_destroy(GTK_OBJECT(ret));
+	    return NULL;
+	}
+
+	g_value_init(&gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec));
+	if (pyg_value_from_pyobject(&gvalue, value)) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "could not convert value for property `%s'", key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    gtk_object_destroy(GTK_OBJECT(ret));
+	    return NULL;
+	}
+	g_object_set_property(G_OBJECT(ret), key_str, &gvalue);
+	g_value_unset(&gvalue);
+    }
+
+    g_object_thaw_notify (G_OBJECT(ret));
+
+    return pygobject_new((GObject *)ret);
+}
+%%
+override goo_canvas_polyline_model_new_line kwargs
+static PyObject *
+_wrap_goo_canvas_polyline_model_new_line(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    PyGObject           *parent;
+    double              x1, y1, x2, y2;
+    GooCanvasItemModel  *ret;
+    GObjectClass        *class;
+    Py_ssize_t          pos;
+    PyObject            *value;
+    PyObject            *key;
+    GType               type;
+
+    if (!PyArg_ParseTuple(args, "O!dddd:polyline_model_new_line",
+                          &PyGooCanvasItemModel_Type, &parent, &x1,
+                          &y1, &x2, &y2))
+        return NULL;
+
+    ret = goo_canvas_polyline_model_new_line(GOO_CANVAS_ITEM_MODEL(parent->obj), x1,
+                                       y1, x2, y2, NULL);
+
+    type = goo_canvas_polyline_model_get_type();
+
+    if (!ret) {
+    PyErr_SetString (PyExc_RuntimeError, "could not create canvas item model object");
+    return NULL;
+    }
+
+    class = G_OBJECT_GET_CLASS(ret);
+    g_object_freeze_notify (G_OBJECT(ret));
+    pos = 0;
+
+    while (kwargs && PyDict_Next (kwargs, &pos, &key, &value)) {
+    gchar *key_str = PyString_AsString (key);
+    GParamSpec *pspec;
+    GValue gvalue ={ 0, };
+
+    pspec = g_object_class_find_property (class, key_str);
+    if (!pspec) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "canvas item model `%s' doesn't support property `%s'",
+		       g_type_name(type), key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    gtk_object_destroy(GTK_OBJECT(ret));
+	    return NULL;
+	}
+
+	g_value_init(&gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec));
+	if (pyg_value_from_pyobject(&gvalue, value)) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "could not convert value for property `%s'", key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    gtk_object_destroy(GTK_OBJECT(ret));
+	    return NULL;
+	}
+	g_object_set_property(G_OBJECT(ret), key_str, &gvalue);
+	g_value_unset(&gvalue);
+    }
+
+    g_object_thaw_notify (G_OBJECT(ret));
+
+    return pygobject_new((GObject *)ret);
+}
+
+%%
+override goo_canvas_line_dash_newv kwargs
+static int
+_wrap_goo_canvas_line_dash_newv(PyGBoxed *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "dashes", NULL };
+    int num_dashes, i;
+    double *dashes;
+    PyObject *py_dashes;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:GooCanvasLineDash.__init__", kwlist,
+                                     &PyList_Type, &py_dashes))
+        return -1;
+
+    num_dashes = PyList_Size(py_dashes);
+    dashes = g_new(double, num_dashes);
+    for (i = 0; i < num_dashes; ++i) {
+        PyObject *item = PyList_GET_ITEM(py_dashes, i);
+        if (!PyFloat_Check(item)) {
+            g_free(dashes);
+            PyErr_SetString(PyExc_TypeError, "parameter must be a list of floats");
+            return -1;
+        }
+        dashes[i] = PyFloat_AsDouble(item);
+    }
+
+    self->gtype = GOO_TYPE_CANVAS_LINE_DASH;
+    self->free_on_dealloc = FALSE;
+    self->boxed = goo_canvas_line_dash_newv(num_dashes, dashes);
+
+    if (!self->boxed) {
+        g_free(dashes);
+        PyErr_SetString(PyExc_RuntimeError, "could not create GooCanvasLineDash object");
+        return -1;
+    }
+    self->free_on_dealloc = TRUE;
+    return 0;
+}
+%%
+override goo_canvas_item_remove_child kwargs
+static PyObject *
+_wrap_goo_canvas_item_remove_child(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "child", NULL };
+    int child_num;
+    PyObject *py_child;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GooCanvasItem.remove_child", kwlist, &py_child))
+        return NULL;
+
+    if (PyInt_Check(py_child))
+        child_num = PyInt_AsLong(py_child);
+    else {
+        if (!PyObject_IsInstance(py_child, (PyObject *) &PyGooCanvasItem_Type)) {
+            PyErr_SetString(PyExc_TypeError, "argument must be integer or goocanvas.Item");
+            return NULL;
+        }
+        child_num = goo_canvas_item_find_child(GOO_CANVAS_ITEM(self->obj), GOO_CANVAS_ITEM(pygobject_get(py_child)));
+        if (child_num == -1) {
+            PyErr_SetString(PyExc_ValueError, "child not found");
+            return NULL;
+        }
+    }
+    goo_canvas_item_remove_child(GOO_CANVAS_ITEM(self->obj), child_num);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+%%
+override goo_canvas_get_bounds noargs
+static PyObject *
+_wrap_goo_canvas_get_bounds(PyGObject *self)
+{
+    gdouble left, right, top, bottom;
+
+    goo_canvas_get_bounds(GOO_CANVAS(self->obj), &left, &right, &top, &bottom);
+
+    return Py_BuildValue("dddd", left, right, top, bottom);
+}
+
+%%
+override goo_canvas_item_get_bounds noargs
+static PyObject *
+_wrap_goo_canvas_item_get_bounds(PyGObject *self)
+{
+    PyObject        *py_bounds;
+    GooCanvasBounds bounds = {0,};
+
+    goo_canvas_item_get_bounds(GOO_CANVAS_ITEM(self->obj), &bounds);
+
+    py_bounds = pygoo_canvas_bounds_new(&bounds);
+
+    return py_bounds;
+}
+
+%%
+override goo_canvas_convert_to_pixels kwargs
+static PyObject *
+_wrap_goo_canvas_convert_to_pixels(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "x", "y", NULL };
+    gdouble x, y;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dd:GooCanvas.convert_to_pixels", kwlist, &x, &y))
+        return NULL;
+
+    goo_canvas_convert_to_pixels(GOO_CANVAS(self->obj), &x, &y);
+
+    return Py_BuildValue("dd", x, y);
+}
+
+%%
+override goo_canvas_convert_from_pixels kwargs
+static PyObject *
+_wrap_goo_canvas_convert_from_pixels(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "x", "y", NULL };
+    gdouble x, y;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dd:GooCanvas.convert_from_pixels", kwlist, &x, &y))
+        return NULL;
+
+    goo_canvas_convert_from_pixels(GOO_CANVAS(self->obj), &x, &y);
+
+    return Py_BuildValue("dd", x, y);
+}
+
+%%
+override goo_canvas_convert_to_item_space kwargs
+static PyObject *
+_wrap_goo_canvas_convert_to_item_space(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "item", "x", "y", NULL };
+    gdouble x, y;
+    PyGObject *item;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_to_item_space",
+                                     kwlist, &PyGooCanvasItem_Type, &item, &x, &y))
+        return NULL;
+
+    goo_canvas_convert_to_item_space(GOO_CANVAS(self->obj), GOO_CANVAS_ITEM(item->obj), &x, &y);
+
+    return Py_BuildValue("dd", x, y);
+}
+%%
+override goo_canvas_convert_from_item_space kwargs
+static PyObject *
+_wrap_goo_canvas_convert_from_item_space(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "item", "x", "y", NULL };
+    gdouble x, y;
+    PyGObject *item;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!dd:GooCanvas.convert_from_item_space",
+                                     kwlist, &PyGooCanvasItem_Type, &item, &x, &y))
+        return NULL;
+
+    goo_canvas_convert_from_item_space(GOO_CANVAS(self->obj), GOO_CANVAS_ITEM(item->obj), &x, &y);
+
+    return Py_BuildValue("dd", x, y);
+}
+%%
+override GooCanvasItem__proxy_do_get_bounds
+static void
+_wrap_GooCanvasItem__proxy_do_get_bounds(GooCanvasItem *self, GooCanvasBounds *bounds)
+{
+    PyGILState_STATE __py_state;
+    PyObject *py_self;
+    PyObject *py_bounds;
+
+    __py_state = pyg_gil_state_ensure();
+    py_self = pygobject_new((GObject *) self);
+    if (!py_self) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        pyg_gil_state_release(__py_state);
+        return;
+    }
+
+    py_bounds = PyObject_CallMethod(py_self, "do_get_bounds", "");
+    if (py_bounds)
+        *bounds = ((PyGooCanvasBounds *) py_bounds)->bounds;
+    else
+        PyErr_Print();
+    Py_DECREF(py_self);
+    Py_XDECREF(py_bounds);
+    pyg_gil_state_release(__py_state);
+}
+%%
+override GooCanvasItem__proxy_do_update
+static void
+_wrap_GooCanvasItem__proxy_do_update(GooCanvasItem *self, gboolean entire_tree,
+                                     cairo_t *cr, GooCanvasBounds *bounds)
+{
+    PyGILState_STATE __py_state;
+    PyObject *py_self;
+    PyObject *py_bounds;
+
+    __py_state = pyg_gil_state_ensure();
+    py_self = pygobject_new((GObject *) self);
+    if (!py_self) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        pyg_gil_state_release(__py_state);
+        return;
+    }
+
+    py_bounds = PyObject_CallMethod(py_self, "do_update", "iN",
+                                    entire_tree,
+                                    PycairoContext_FromContext(cairo_reference(cr), NULL, NULL));
+    if (py_bounds)
+        *bounds = ((PyGooCanvasBounds *) py_bounds)->bounds;
+    else
+        PyErr_Print();
+    Py_DECREF(py_self);
+    Py_XDECREF(py_bounds);
+    pyg_gil_state_release(__py_state);
+}
+
+%%
+body
+
+static PyObject *
+_py_canvas_style_get_property(GooCanvasStyle *style,
+                              const char *name)
+{
+    const GValue *value;
+
+    value = goo_canvas_style_get_property(style, g_quark_from_string(name));
+    if (!value) {
+        PyErr_Format(PyExc_KeyError, "goocanvas.Style object has no property named '%s'",
+                     name);
+        return NULL;
+    }
+    return pyg_value_as_pyobject(value, TRUE);
+}
+
+static int
+_py_goo_canvas_style_set_property(GooCanvasStyle *style,
+                                  const char *name,
+                                  PyObject *py_value)
+{
+    GValue value = {0,};
+
+    if (py_value == Py_None) {
+        goo_canvas_style_set_property(style, g_quark_from_string(name), NULL);
+    } else {
+        GType gtype = pyg_type_from_object((PyObject *) py_value->ob_type);
+        if (gtype == 0) {
+              /* check to see if it is one of our specially supported types */
+            if (PyObject_IsInstance(py_value, (PyObject *) &PycairoMatrix_Type)) {
+                PyErr_Clear();
+                gtype = GOO_TYPE_CAIRO_MATRIX;
+            } else if (PyObject_IsInstance(py_value, (PyObject *) &PycairoPattern_Type)) {
+                PyErr_Clear();
+                gtype = GOO_TYPE_CAIRO_PATTERN;
+            } else /* give up; we really don't support this type */
+                return -1;
+        }
+        g_value_init(&value, gtype);
+        if (pyg_value_from_pyobject(&value, py_value)) {
+            PyErr_SetString(PyExc_TypeError, "unable to convert value");
+            return -1;
+        }
+        goo_canvas_style_set_property(style, g_quark_from_string(name), &value);
+        g_value_unset(&value);
+    }
+    return 0;
+}
+
+
+%%
+override goo_canvas_style_get_property kwargs
+static PyObject *
+_wrap_goo_canvas_style_get_property(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "name", NULL };
+    char *name;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"s:goocanvas.Style.get_property",
+    				     kwlist, &name))
+        return NULL;
+    return _py_canvas_style_get_property(GOO_CANVAS_STYLE(self->obj), name);
+}
+
+%%
+override goo_canvas_style_set_property kwargs
+static PyObject *
+_wrap_goo_canvas_style_set_property(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "name", "value", NULL };
+    char *name;
+    PyObject *py_value;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sO:goocanvas.Style.set_property",
+    				     kwlist, &name, &py_value))
+        return NULL;
+    if (_py_goo_canvas_style_set_property(GOO_CANVAS_STYLE(self->obj), name, py_value))
+        return NULL;
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+%%
+override-slot GooCanvasStyle.tp_as_mapping
+
+static PyObject *
+goo_canvas_style_subscript(PyGObject *self, PyObject *arg)
+{
+    const char *name;
+    if (!PyString_Check(arg)) {
+        PyErr_SetString(PyExc_TypeError, "key must be a string");
+        return NULL;
+    }
+    name = PyString_AsString(arg);
+    return _py_canvas_style_get_property(GOO_CANVAS_STYLE(self->obj), name);
+}
+
+static int
+_wrap_goo_canvas_style_ass_subscript(PyGObject *self, PyObject *key, PyObject *py_value)
+{
+    char *name;
+
+    if (!PyString_Check(key)) {
+        PyErr_SetString(PyExc_TypeError, "key must be a string");
+        return -1;
+    }
+    name = PyString_AsString(key);
+    return _py_goo_canvas_style_set_property(GOO_CANVAS_STYLE(self->obj), name, py_value);
+}
+
+
+static PyMappingMethods _wrap_goo_canvas_style_tp_as_mapping = {
+    NULL, /* inquiry mp_length; */
+    (binaryfunc) goo_canvas_style_subscript, /* mp_subscript; */
+    (objobjargproc) _wrap_goo_canvas_style_ass_subscript, /* objobjargproc mp_ass_subscript; */
+};
+
+%%
+override-attr GooCanvasItemSimple.bounds_x1
+
+static int
+_wrap_goo_canvas_item_simple__set_bounds_x1(PyGObject *self, PyObject *py_value, void *closure)
+{
+    if (!PyFloat_Check(py_value)) {
+        PyErr_SetString(PyExc_TypeError, "value must be a float");
+        return -1;
+    }
+    GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds.x1 = PyFloat_AsDouble(py_value);
+    return 0;
+}
+
+%%
+override-attr GooCanvasItemSimple.bounds_x2
+
+static int
+_wrap_goo_canvas_item_simple__set_bounds_x2(PyGObject *self, PyObject *py_value, void *closure)
+{
+    if (!PyFloat_Check(py_value)) {
+        PyErr_SetString(PyExc_TypeError, "value must be a float");
+        return -1;
+    }
+    GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds.x2 = PyFloat_AsDouble(py_value);
+    return 0;
+}
+
+%%
+override-attr GooCanvasItemSimple.bounds_y1
+
+static int
+_wrap_goo_canvas_item_simple__set_bounds_y1(PyGObject *self, PyObject *py_value, void *closure)
+{
+    if (!PyFloat_Check(py_value)) {
+        PyErr_SetString(PyExc_TypeError, "value must be a float");
+        return -1;
+    }
+    GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds.y1 = PyFloat_AsDouble(py_value);
+    return 0;
+}
+
+%%
+override-attr GooCanvasItemSimple.bounds_y2
+
+static int
+_wrap_goo_canvas_item_simple__set_bounds_y2(PyGObject *self, PyObject *py_value, void *closure)
+{
+    if (!PyFloat_Check(py_value)) {
+        PyErr_SetString(PyExc_TypeError, "value must be a float");
+        return -1;
+    }
+    GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds.y2 = PyFloat_AsDouble(py_value);
+    return 0;
+}
+
+%%
+override goo_canvas_item_set_child_properties kwargs
+static PyObject *
+_wrap_goo_canvas_item_set_child_properties(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    PyGObject       *pychild;
+    GObjectClass    *class;
+    GooCanvasItem   *parent, *child;
+    Py_ssize_t      pos;
+    int             len;
+    gint            c_pos;
+    PyObject        *value;
+    PyObject        *key;
+
+    if ((len = PyTuple_Size(args)) < 1) {
+        PyErr_SetString(PyExc_TypeError, "requires at least one argument");
+        return NULL;
+    }
+    pychild = (PyGObject*)PyTuple_GetItem(args, 0);
+
+    if (!pygobject_check(pychild, &PyGooCanvasItem_Type)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument should be a GooCanvasItem");
+        return NULL;
+    }
+
+    parent = GOO_CANVAS_ITEM(self->obj);
+    child = GOO_CANVAS_ITEM(pychild->obj);
+
+    c_pos = goo_canvas_item_find_child(parent, child);
+    if (c_pos == -1) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument must be a child");
+        return NULL;
+    }
+
+    class = G_OBJECT_GET_CLASS(self->obj);
+
+    g_object_freeze_notify (G_OBJECT(self->obj));
+    pos = 0;
+
+    while (kwargs && PyDict_Next (kwargs, &pos, &key, &value)) {
+    gchar *key_str = PyString_AsString (key);
+    GParamSpec *pspec;
+    GValue gvalue ={ 0, };
+
+    pspec = goo_canvas_item_class_find_child_property (class, key_str);
+    if (!pspec) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "object `%s' doesn't support child property `%s'",
+		       g_type_name(G_OBJECT_TYPE(pychild->obj)), key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    return NULL;
+	}
+
+	g_value_init(&gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec));
+	if (pyg_value_from_pyobject(&gvalue, value)) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "could not convert value for property `%s'", key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    return NULL;
+	}
+	GooCanvasItemIface *iface;
+
+	iface = g_type_interface_peek (class, GOO_TYPE_CANVAS_ITEM);
+	iface->set_child_property ((GooCanvasItem*) parent,
+	                           (GooCanvasItem*) child,
+	                           pspec->param_id, &gvalue, pspec);
+
+	g_value_unset(&gvalue);
+    }
+
+    g_object_thaw_notify (G_OBJECT(self->obj));
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+%%
+override goo_canvas_item_get_child_properties args
+static PyObject *
+_wrap_goo_canvas_item_get_child_properties(PyGObject *self, PyObject *args)
+{
+    GObjectClass    *class;
+    GooCanvasItem   *parent, *child;
+    PyGObject       *pychild;
+    int             i, len;
+    gint            c_pos;
+    PyObject        *tuple;
+
+    if ((len = PyTuple_Size(args)) < 1) {
+        PyErr_SetString(PyExc_TypeError, "requires at least one argument");
+        return NULL;
+    }
+
+    pychild = (PyGObject*)PyTuple_GetItem(args, 0);
+
+    if (!pygobject_check(pychild, &PyGooCanvasItem_Type)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument should be a GooCanvasItem");
+        return NULL;
+    }
+
+    parent = GOO_CANVAS_ITEM(self->obj);
+    child = GOO_CANVAS_ITEM(pychild->obj);
+
+    c_pos = goo_canvas_item_find_child(parent, child);
+    if (c_pos == -1) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument must be a child");
+        return NULL;
+    }
+
+    tuple = PyTuple_New(len-1);
+
+    class = G_OBJECT_GET_CLASS(self->obj);
+
+    for (i = 1; i < len; i++) {
+        PyObject *py_property = PyTuple_GetItem(args, i);
+        gchar *property_name;
+        GParamSpec *pspec;
+        GValue value = { 0 };
+        PyObject *item;
+
+        if (!PyString_Check(py_property)) {
+            PyErr_SetString(PyExc_TypeError,
+                            "Expected string argument for property.");
+            return NULL;
+        }
+
+        property_name = PyString_AsString(py_property);
+
+        pspec = goo_canvas_item_class_find_child_property (class, property_name);
+        if (!pspec) {
+	    PyErr_Format(PyExc_TypeError,
+		    "object of type `%s' does not have child property `%s'",
+		    g_type_name(G_OBJECT_TYPE(self->obj)), property_name);
+    	    return NULL;
+        }
+        if (!(pspec->flags & G_PARAM_READABLE)) {
+            PyErr_Format(PyExc_TypeError, "property %s is not readable", property_name);
+            return NULL;
+        }
+        g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
+        GooCanvasItemIface *iface;
+
+	    iface = g_type_interface_peek (class, GOO_TYPE_CANVAS_ITEM);
+	    iface->get_child_property ((GooCanvasItem*) parent,
+		                           (GooCanvasItem*) child,
+                                    pspec->param_id, &value, pspec);
+
+        item = pyg_value_as_pyobject(&value, TRUE);
+        PyTuple_SetItem(tuple, i-1, item);
+
+        g_value_unset(&value);
+    }
+
+    return tuple;
+}
+
+%%
+override goo_canvas_item_model_set_child_properties kwargs
+static PyObject *
+_wrap_goo_canvas_item_model_set_child_properties(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    PyGObject           *pychild;
+    GObjectClass        *class;
+    GooCanvasItemModel  *parent, *child;
+    Py_ssize_t          pos;
+    int                 len;
+    gint                c_pos;
+    PyObject            *value;
+    PyObject            *key;
+
+    if ((len = PyTuple_Size(args)) < 1) {
+        PyErr_SetString(PyExc_TypeError, "requires at least one argument");
+        return NULL;
+    }
+    pychild = (PyGObject*)PyTuple_GetItem(args, 0);
+
+    if (!pygobject_check(pychild, &PyGooCanvasItemModel_Type)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument should be a GooCanvasItemModel");
+        return NULL;
+    }
+
+    parent = GOO_CANVAS_ITEM_MODEL(self->obj);
+    child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
+
+    c_pos = goo_canvas_item_model_find_child(parent, child);
+    if (c_pos == -1) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument must be a child");
+        return NULL;
+    }
+
+    class = G_OBJECT_GET_CLASS(self->obj);
+
+    g_object_freeze_notify (G_OBJECT(self->obj));
+    pos = 0;
+
+    while (kwargs && PyDict_Next (kwargs, &pos, &key, &value)) {
+    gchar *key_str = PyString_AsString (key);
+    GParamSpec *pspec;
+    GValue gvalue ={ 0, };
+
+    pspec = goo_canvas_item_model_class_find_child_property (class, key_str);
+    if (!pspec) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "object `%s' doesn't support child property `%s'",
+		       g_type_name(G_OBJECT_TYPE(pychild->obj)), key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    return NULL;
+	}
+
+	g_value_init(&gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec));
+	if (pyg_value_from_pyobject(&gvalue, value)) {
+	    gchar buf[512];
+
+	    g_snprintf(buf, sizeof(buf),
+		       "could not convert value for property `%s'", key_str);
+	    PyErr_SetString(PyExc_TypeError, buf);
+	    return NULL;
+	}
+	GooCanvasItemModelIface *iface;
+
+	iface = g_type_interface_peek (class, GOO_TYPE_CANVAS_ITEM_MODEL);
+	iface->set_child_property ((GooCanvasItemModel*) parent,
+	                           (GooCanvasItemModel*) child,
+	                           pspec->param_id, &gvalue, pspec);
+	g_value_unset(&gvalue);
+    }
+
+    g_object_thaw_notify (G_OBJECT(self->obj));
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+%%
+override goo_canvas_item_model_get_child_properties args
+static PyObject *
+_wrap_goo_canvas_item_model_get_child_properties(PyGObject *self, PyObject *args)
+{
+    GObjectClass        *class;
+    GooCanvasItemModel  *parent, *child;
+    PyGObject           *pychild;
+    int                 i, len;
+    gint                c_pos;
+    PyObject            *tuple;
+
+    if ((len = PyTuple_Size(args)) < 1) {
+        PyErr_SetString(PyExc_TypeError, "requires at least one argument");
+        return NULL;
+    }
+
+    pychild = (PyGObject*)PyTuple_GetItem(args, 0);
+
+    if (!pygobject_check(pychild, &PyGooCanvasItemModel_Type)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument should be a GooCanvasItemModel");
+        return NULL;
+    }
+
+    parent = GOO_CANVAS_ITEM_MODEL(self->obj);
+    child = GOO_CANVAS_ITEM_MODEL(pychild->obj);
+
+    c_pos = goo_canvas_item_model_find_child(parent, child);
+    if (c_pos == -1) {
+        PyErr_SetString(PyExc_TypeError,
+                        "first argument must be a child");
+        return NULL;
+    }
+
+    tuple = PyTuple_New(len-1);
+
+    class = G_OBJECT_GET_CLASS(self->obj);
+
+    for (i = 1; i < len; i++) {
+        PyObject *py_property = PyTuple_GetItem(args, i);
+        gchar *property_name;
+        GParamSpec *pspec;
+        GValue value = { 0 };
+        PyObject *item;
+
+        if (!PyString_Check(py_property)) {
+            PyErr_SetString(PyExc_TypeError,
+                            "Expected string argument for property.");
+            return NULL;
+        }
+
+        property_name = PyString_AsString(py_property);
+        pspec = goo_canvas_item_model_class_find_child_property (class, property_name);
+
+        if (!pspec) {
+	    PyErr_Format(PyExc_TypeError,
+		         "object of type `%s' does not have child property `%s'",
+		         g_type_name(G_OBJECT_TYPE(self->obj)), property_name);
+    	return NULL;
+        }
+        if (!(pspec->flags & G_PARAM_READABLE)) {
+	    PyErr_Format(PyExc_TypeError, "property %s is not readable",
+		        property_name);
+	    return NULL;
+        }
+        g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
+        GooCanvasItemModelIface *iface;
+
+	    iface = g_type_interface_peek (class, GOO_TYPE_CANVAS_ITEM_MODEL);
+	    iface->get_child_property ((GooCanvasItemModel*) parent,
+		                           (GooCanvasItemModel*) child,
+                                    pspec->param_id, &value, pspec);
+
+        item = pyg_value_as_pyobject(&value, TRUE);
+        PyTuple_SetItem(tuple, i-1, item);
+
+        g_value_unset(&value);
+    }
+
+    return tuple;
+}
+
+%%
+define GooCanvasItem.find_child_property kwargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_find_child_property (PyObject *cls,
+                                           PyObject *args,
+                                           PyObject *kwargs)
+{
+    static char         *kwlist[] = { "property", NULL };
+    GObjectClass        *klass;
+    GType               itype;
+    const gchar         *prop_name;
+    GParamSpec          *pspec;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "s:item_class_find_child_property",
+                                     kwlist,
+                                     &prop_name))
+        return NULL;
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    pspec = goo_canvas_item_class_find_child_property (klass, prop_name);
+
+    if(!pspec){
+        PyErr_Format(PyExc_KeyError,
+                        "object %s does not support property %s",
+                        g_type_name(itype), prop_name);
+	return NULL;
+    }
+    return pyg_param_spec_new(pspec);
+}
+
+%%
+define GooCanvasItemModel.find_child_property kwargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_model_find_child_property (PyObject *cls,
+                                                 PyObject *args,
+                                                 PyObject *kwargs)
+{
+    static char         *kwlist[] = { "property", NULL };
+    GObjectClass        *klass;
+    GType               itype;
+    const gchar         *prop_name;
+    GParamSpec          *pspec;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "s:item_model_class_find_child_property",
+                                     kwlist,
+                                     &prop_name))
+        return NULL;
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    pspec = goo_canvas_item_model_class_find_child_property (klass, prop_name);
+
+    if(!pspec){
+        PyErr_Format(PyExc_KeyError,
+                        "object %s does not support property %s",
+                        g_type_name(itype), prop_name);
+	return NULL;
+    }
+    return pyg_param_spec_new(pspec);
+}
+
+%%
+define GooCanvasItem.list_child_properties noargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_list_child_properties (PyObject *cls,
+                                             PyObject *args,
+                                             PyObject *kwargs)
+{
+    GParamSpec      **specs;
+    PyObject        *list;
+    GType           itype;
+    GObjectClass    *klass;
+    guint           nprops;
+    guint           i;
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    specs = goo_canvas_item_class_list_child_properties(klass, &nprops);
+    list = PyList_New(nprops);
+    if (list == NULL) {
+	g_free(specs);
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    for (i = 0; i < nprops; i++) {
+	PyList_SetItem(list, i, pyg_param_spec_new(specs[i]));
+    }
+
+    g_free(specs);
+    g_type_class_unref(klass);
+
+    return list;
+}
+
+%%
+define GooCanvasItemModel.list_child_properties noargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_model_list_child_properties (PyObject *cls,
+                                                   PyObject *args,
+                                                   PyObject *kwargs)
+{
+    GParamSpec      **specs;
+    PyObject        *list;
+    GType           itype;
+    GObjectClass    *klass;
+    guint           nprops;
+    guint           i;
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    specs = goo_canvas_item_model_class_list_child_properties(klass, &nprops);
+    list = PyList_New(nprops);
+    if (list == NULL) {
+	g_free(specs);
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    for (i = 0; i < nprops; i++) {
+	PyList_SetItem(list, i, pyg_param_spec_new(specs[i]));
+    }
+
+    g_free(specs);
+    g_type_class_unref(klass);
+
+    return list;
+}
+
+%%
+define GooCanvasItem.install_child_property kwargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_install_child_property (PyObject *cls,
+                                              PyObject *args,
+                                              PyObject* kwargs)
+{
+    static char         *kwlist[] = { "property_id", "pspec", NULL };
+    PyObject            *property;
+    GType               itype;
+    GObjectClass        *klass;
+    guint               property_id;
+    GParamSpec          *pspec;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+				     "iO:item_class_install_child_property",
+				     kwlist,
+				     &property_id, &property))
+	return NULL;
+
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    pspec = pyg_param_spec_from_object(property);
+    if(!pspec) {
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    if (goo_canvas_item_class_find_child_property(G_OBJECT_CLASS(klass), pspec->name)) {
+	PyErr_Format(PyExc_TypeError,
+		     "there is already a '%s' property installed", pspec->name);
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    goo_canvas_item_class_install_child_property(klass, property_id, pspec);
+
+    g_type_class_unref(klass);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+%%
+define GooCanvasItemModel.install_child_property kwargs classmethod
+static PyObject *
+_wrap_goo_canvas_item_model_install_child_property (PyObject *cls,
+                                                    PyObject *args,
+                                                    PyObject* kwargs)
+{
+    static char         *kwlist[] = { "property_id", "pspec", NULL };
+    PyObject            *property;
+    GType               itype;
+    GObjectClass        *klass;
+    guint               property_id;
+    GParamSpec          *pspec;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+				     "iO:item_model_class_install_child_property",
+				     kwlist,
+				     &property_id, &property))
+	return NULL;
+
+
+    if ((itype = pyg_type_from_object(cls)) == 0)
+	return NULL;
+
+    klass = g_type_class_ref(itype);
+    if (!klass) {
+	PyErr_SetString(PyExc_RuntimeError,
+			"could not get a reference to type class");
+	return NULL;
+    }
+
+    pspec = pyg_param_spec_from_object(property);
+    if(!pspec) {
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    if (goo_canvas_item_model_class_find_child_property(G_OBJECT_CLASS(klass), pspec->name)) {
+	PyErr_Format(PyExc_TypeError,
+		     "there is already a '%s' property installed", pspec->name);
+	g_type_class_unref(klass);
+	return NULL;
+    }
+
+    goo_canvas_item_model_class_install_child_property(klass, property_id, pspec);
+
+    g_type_class_unref(klass);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+%%
+override goo_canvas_get_items_at kwargs
+static PyObject *
+_wrap_goo_canvas_get_items_at(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char     *kwlist[] = { "x", "y", "is_pointer_event", NULL };
+    PyObject        *point_event, *ret;
+    gdouble         x, y;
+    GList           *item_list;
+    gboolean        is_pointer_event;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "ddO:get_items_at",
+                                     kwlist,
+                                     &x, &y, &point_event))
+        return NULL;
+
+    is_pointer_event = (PyObject_IsTrue(point_event)) ? TRUE : FALSE;
+
+    item_list = goo_canvas_get_items_at(GOO_CANVAS(self->obj),
+                                        x, y, is_pointer_event);
+
+    if (!item_list) {
+        Py_INCREF (Py_None);
+        return Py_None;
+    }
+
+    ret = _glist_to_pylist_objs(item_list);
+    g_list_free(item_list);
+    return ret;
+}
+
+%%
+override goo_canvas_get_items_in_area kwargs
+static PyObject *
+_wrap_goo_canvas_get_items_in_area(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char     *kwlist[] = { "area", "inside_area", "include_overlaps",
+                                  "include_containers",  NULL };
+    PyObject        *inside_area, *include_containers, *include_overlaps, *ret;
+    PyObject        *area;
+    GList           *item_list;
+    gboolean        inside, include_cont, include_over;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "O!OOO:get_items_at",
+                                     kwlist,
+                                     &PyGooCanvasBounds_Type, &area, &inside_area,
+                                     &include_overlaps, &include_containers))
+        return NULL;
+
+    inside = (PyObject_IsTrue(inside_area)) ? TRUE : FALSE;
+    include_cont = (PyObject_IsTrue(include_containers)) ? TRUE : FALSE;
+    include_over = (PyObject_IsTrue(include_overlaps)) ? TRUE : FALSE;
+
+    item_list = goo_canvas_get_items_in_area (GOO_CANVAS(self->obj),
+                                              &((PyGooCanvasBounds *) area)->bounds,
+                                              inside,
+                                              include_over,
+                                              include_cont);
+    if (!item_list) {
+        Py_INCREF (Py_None);
+        return Py_None;
+    }
+
+
+    ret = _glist_to_pylist_objs(item_list);
+    g_list_free(item_list);
+    return ret;
+}
+
+%%
+override goo_canvas_item_get_items_at kwargs
+static PyObject *
+_wrap_goo_canvas_item_get_items_at(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char     *kwlist[] = { "x", "y", "cr", "is_pointer_event",
+                                  "parent_is_visible", NULL };
+    PyObject        *point_event, *ret, *parent_visible;
+    gdouble         x, y;
+    GList           *item_list;
+    gboolean        is_pointer_event;
+    gboolean        parent_is_visible;
+    PycairoContext  *cr;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+                                     "ddOOO:get_items_at",
+                                     kwlist,
+                                     &x, &y, &cr, &point_event,
+                                     &parent_visible))
+        return NULL;
+
+    is_pointer_event = (PyObject_IsTrue(point_event)) ? TRUE : FALSE;
+    parent_is_visible = (PyObject_IsTrue(parent_visible)) ? TRUE : FALSE;
+
+    item_list = goo_canvas_item_get_items_at(GOO_CANVAS_ITEM(self->obj),
+                                             x, y, cr->ctx, is_pointer_event,
+                                             parent_is_visible, NULL);
+
+    if (!item_list) {
+        Py_INCREF (Py_None);
+        return Py_None;
+    }
+
+    ret = _glist_to_pylist_objs(item_list);
+    g_list_free(item_list);
+    return ret;
+}
+
+%%
+override goo_canvas_item_get_transform noargs
+static PyObject *
+_wrap_goo_canvas_item_get_transform(PyGObject *self)
+{
+    PyObject        *matrix;
+    cairo_matrix_t  transform = {0,};
+    gboolean        res;
+
+    res = goo_canvas_item_get_transform(GOO_CANVAS_ITEM(self->obj), &transform);
+
+    if (!res) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    matrix = PycairoMatrix_FromMatrix(&transform);
+    return matrix;
+}
+
+%%
+override goo_canvas_item_model_get_transform noargs
+static PyObject *
+_wrap_goo_canvas_item_model_get_transform(PyGObject *self)
+{
+    PyObject        *matrix;
+    cairo_matrix_t  transform = {0,};
+    gboolean        res;
+
+    res = goo_canvas_item_model_get_transform(GOO_CANVAS_ITEM_MODEL(self->obj),
+                                              &transform);
+
+    if (!res) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    matrix = PycairoMatrix_FromMatrix(&transform);
+    return matrix;
+}
+
+%%
+override-attr GooCanvasItemSimple.bounds
+
+static int
+_wrap_goo_canvas_item_simple__set_bounds(PyGObject *self, PyObject *py_value, void *closure)
+{
+    if (!PyObject_IsInstance(py_value, (PyObject*) &PyGooCanvasBounds_Type)) {
+        PyErr_SetString(PyExc_TypeError, "value must be goocanvas.Bounds");
+        return -1;
+    }
+    GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds = ((PyGooCanvasBounds*) py_value)->bounds;
+    return 0;
+}
+
+static PyObject*
+_wrap_goo_canvas_item_simple__get_bounds(PyGObject *self, void *closure)
+{
+    return pygoo_canvas_bounds_new(&GOO_CANVAS_ITEM_SIMPLE(pygobject_get(self))->bounds);
+}

Modified: branches/gcomprixogoo/src/boards/py-mod-utils.c
==============================================================================
--- branches/gcomprixogoo/src/boards/py-mod-utils.c	(original)
+++ branches/gcomprixogoo/src/boards/py-mod-utils.c	Sun Nov  9 22:22:35 2008
@@ -53,6 +53,31 @@
 
 }
 
+/* RsvgHandle *gc_svg_load(char *pixmapfile); */
+static PyObject*
+py_gc_svg_load(PyObject* self, PyObject* args)
+{
+  char* pixmapfile;
+  RsvgHandle* result;
+  PyObject* pyresult;
+
+  /* Parse arguments */
+
+  if(!PyArg_ParseTuple(args, "s:gc_svg_load", &pixmapfile))
+    return NULL;
+
+  /* Call the corresponding C function */
+  result = gc_rsvg_load(pixmapfile);
+
+  /* Create and return the result */
+  pyresult = (PyObject*) pygobject_new((GObject*) result);
+
+  rsvg_handle_free(result);
+
+  return(pyresult);
+
+}
+
 /* gchar *gc_file_find_absolute(gchar *file); */
 static PyObject*
 py_gc_file_find_absolute(PyObject* self, PyObject* args)
@@ -364,6 +389,7 @@
 
 static PyMethodDef PythonGcomprisUtilsModule[] = {
   { "load_pixmap",  py_gc_pixmap_load, METH_VARARGS, "gc_pixmap_load" },
+  { "load_svg",  py_gc_svg_load, METH_VARARGS, "gc_svg_load" },
   { "find_file_absolute",  py_gc_file_find_absolute, METH_VARARGS, "gc_file_find_absolute" },
   { "item_focus_init",  py_gc_item_focus_init, METH_VARARGS, "gc_item_focus_init" },
   { "item_absolute_move",  py_gc_item_absolute_move, METH_VARARGS, "gc_item_absolute_move" },



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]