[Cairo] another set of Python bindings
James Henstridge
james at daa.com.au
Thu Sep 11 18:26:50 PDT 2003
On 12/09/03 00:20, Carl Worth wrote:
>I'm afraid I didn't understand your comment here. Is the deficiency
>here in Cairo itself or in the pycairo bindings? If there's something
>that Cairo could do differently that would make your job easier,
>please let me know.
>
>
I'll try and explain the issue again:
For languages like Python where garbage collection is available, it is
nice to hide the details of memory management from the user. I do this
by making the wrapper for the cairo_t object own the reference. When
Python calls the destructor for the wrapper, my code calls
cairo_destroy() on the cairo_t. This works fairly well in isolation.
On gtk-devel-list, Owen posted some information about how he might
integrate Cairo with GTK:
>There are no definite plans currently, but hope is to use the Cairo
>API natively. That is, you'd have something like:
>
> void my_widget_expose (GtkWidget *widget, GdkEventExpose *expose)
> {
> cairo_t context = gdk_drawable_get_cairo (widget->window);
>
> /* draw with cairo commands */
> }
>
If I were to wrap this hypothetical gdk_drawable_get_cairo() routine for
PyGTK, how would I handle the returned cairo_t? The cairo_t object
would belong to the GdkDrawable in this bit of code, so it would be
wrong for the Python wrapper to destroy it.
One option is to copy the object, but this has the disadvantage that
Python code wouldn't be able to modify the state of the cairo_t
belonging to the GdkDrawable (in this particular case, this wouldn't be
a problem, but I can think of other cases where it would be).
By exposing reference counting operations on cairo_t objects, this
particular case would be easy to handle, so that neither the Python code
or C code destroy the cairo_t object until both are finished with it.
A similar argument goes for surfaces. I didn't consider matrices to be
a problem because it seems sensible to treat them as plain values as far
as the Cairo API is concerned.
James.
--
Email: james at daa.com.au
WWW: http://www.daa.com.au/~james/
More information about the cairo
mailing list