Web lists-archives.com

Re: GObject introspection for cairo

Cairo-GObject provides access to enums, but it won't automatically get you great cairo bindings. It might actually get you 90% of the way there, though, and I'd be interested seeing how far you can run with just that, and be happy to merge patches that make it easier.

Why? cairo has a subtype system where you have subtypes of cairo_surface_t (e.g. cairo_image_surface_t) or cairo_pattern_t (e.g. cairo_gradient_pattern_t) where some objects have special methods. You determine which type this is by calling cairo_surface_get_type(); and matching it against a closed enum (cairo_surface_type_t).

It might be enough to do 90% of the work with GObject-Introspection and write some small by-hand functions when you need to "cast" to a specific type in your binding, but you do always need some small native glue code that calls cairo_surface_get_type();

On Thu, Jan 22, 2015 at 9:39 AM, Nicola Fontana <ntd@xxxxxxxxx> wrote:
Il Thu, 22 Jan 2015 16:28:19 +0000 Emmanuele Bassi <ebassi@xxxxxxxxx> scrisse:

> Cairo is not a GObject library, so introspection is fairly useless.

Hi Emmanuele,

the cairo source tree includes cairo-gobject [1] that already wraps
enums and structs in GObject style. I just browsed the code and added
the missing types to the gir file.

> for Cairo, you should always prefer native bindings — like pycairo, or
> the cairo GJS module.

I'm using LGI [2] which provides automatic bindings based on GObject
introspection. This gives me the ability to access all the libraries I
need (cairo is only one of them) through the same interface.

One of my API needs the cairo_surface_type_t enum, so adding a new
dependency only for that is not an option. If the patches are rejected
I'll wrap the enum on my side instead (or drop that particular feature).

> if you have patches, please attach them on Bugzilla.

Sorry, my bad. I had really hard time trying to figure out how to submit
bugs to gobject-introspection. I just discovered (10 mins ago) I need to
select GLib as product first.


[1] http://cgit.freedesktop.org/cairo/tree/util/cairo-gobject
[2] https://github.com/pavouk/lgi
gtk-devel-list mailing list

gtk-devel-list mailing list