[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: [ANN] Lua Cario binding
- From: Don Hopkins <dhopkins@...>
- Date: Fri, 25 May 2007 17:48:04 -0700
Hakki Dogusan wrote:
Don Hopkins wrote:
There are some other useful libraries that plug together with Cairo,
that you might be interested in integrating with Lua:
[snipped about Cairo related libraries]
Those need a group work, IMHO. I want to implement core API first. It
seems easy to get/compile your mentioned libraries in Linux, but not
for Windows. I Google'd for a prebuild Cairo dll before compiling
mine. The ones I found had other dependencies.
It's worth checking out pycairo, the Python cairo module, which is
designed so other people can write their own modules that use Cairo.
It has some good ideas that you could adopt, which will make it easy for
other people to build on top of your work.
Cairo is used by so many other libraries, and people are writing new
libraries that use it, and integrating them with various scripting
So pycairo has defined a formal way for other Python extensions that
want to use Cairo to extract and wrap a Cairo context (and other Cairo
objects) from the Python wrappers that the pycairo module creates.
There's a pycairo.h include file that gets installs in the system (so
other modules can include it without violating privacy), so other
modules can include pycairo.h and use a macro to get the Cairo context,
without worrying about how it's represented.
For example, I wrote a cellular automata machine and a tile engine that
draws with Cairo, which includes the pycairo.h header file, so it can be
passed a cairo_t * context from Python to draw with.
When the tile engine module initializes, it uses the PyCairo_IMPORT
macro to get a Pycairo_CAPI_t structure (which calls
PyCObject_Import("cairo", "CAPI") to get the shared structure), which
has references to all the Cairo types (as wrapped by Python types),
conversion utility functions, etc.
Then I wrote a SWIG typemap (pycairo.i) for functions taking a cairo_t *
and cairo_surface_t *, that automatically converts between the cairo
objects and Python wrappers, by using the PycairoContext_GET and
PycairoContext_FromContext macros, and using the PycairoContext_Type to
do parameter type checking.
SWIG can painlessly wrap functions that pass Cairo types in and out of
other Python modules that depend on Cairo, and the right stuff just
happens automatically and safely, with proper error checking!