[cairo] surfaces and backends

Owen Taylor otaylor at redhat.com
Sat May 21 08:01:22 PDT 2005


On Thu, 2005-05-19 at 16:57 -0700, Carl Worth wrote:
> On Wed, 16 Mar 2005 11:15:53 -0500, Owen Taylor wrote:
> > How do we identify surface types? 
> >  
> >  1. Strings. cairo_surface_get_backend_name()
> > 
> >  2. Boolean predicate. cairo_surface_is_xlib()
> > 
> >  3. Opaque type object
> >     cairo_type_t *cairo_surface_get_type()
> >     cairo_type_t *cairo_xlib_surface_type()
> > 
> >  4. Global #defines
> > 
> >     #define CAIRO_TYPE_XLIB_SURFACE 1
> > 
> > Not clear to me what's right.
> 
> We've started running into the need for this internal to the cairo
> implementation and so far we are using option #2. I see the following
> in the code already:
> 
> 	_cairo_surface_is_image
> 	_cairo_surface_is_win32
> 	_cairo_surface_is_xcb
> 	_cairo_surface_is_xlib
> 
> This seems perfectly workable to me. Anyone have an objection to
> filling this set out more completely and making it public?

I'm not too fond of this... a language binding implementation
of cairo_get_target() would have to do:

 if (cairo_surface_is_image())
 else if (cairo_surface_is_pdf())
 else if (cairo_surface_is_ps())
 else if (cairo_surface_is_xlib())
 [...]

This isn't doesn't really matter for Cairo, since the number of
subclasses of any type is pretty limited. But it's not a scalable
approach, which makes me consider it non-standard.

What if we had:

enum {
   CAIRO_IMAGE_SURFACE_TYPE,
   CAIRO_XLIB_SURFACE_TYPE,
   [...]
   CAIRO_FT_FONT_FACE_TYPE,
} CairoTypeID;

CairoTypeID cairo_surface_get_type (cairo_surface_t *surface);

It looks superficially like the above doesn't work if we ever
add backend types defined outside of the Cairo core, but we can
easily add:

 CairoTypeID cairo_create_type_id ();

Or whatever if the need arises.

Regards,
						Owen

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050521/5bf6f5cf/attachment.pgp


More information about the cairo mailing list