[Cairo] Color transforms

David Forster dforste at arbornet.org
Wed Jul 16 19:12:45 PDT 2003


On Wed, Jul 16, 2003 at 11:25:40AM -0700, Bill Spitzak wrote:
> backends that are compatable with each other, and avoid the overhead
> of the "virtual function call" on many of the Cairo interfaces.

You mean my find-the-non-NULL loop...You still do virtual calls.
Neither, I think, are that expensive.

> First I would design your structures much like a C++ object, so that several 
> instances can share the "vtable", yet have local "instance variables". 

Yeah, totally right. Opps. ;)

> Secondly I would place some (maybe a lot) of Cairo's logic in the 
> device-independent portion:

PostScript/PDF are very capable targets.  I don't think there's going
to be much that's device-independent...

> 
> struct Cairo_Xlib_Engine {
[...]
> };
> 
> struct Cairo_Vtable {
[...]
> };
> 
> struct Cairo_State {
>   Cairo_Engine* engine;
>   Cairo_State* previous;
[...]
> };

I don't see how this works.  Where does Cairo_Xlib_Engine fit into
this?  How do I override functions?  How do you efficiently get each
engine's state to it without doing C++ subclassing, which requires
prior knowledge of what you are subclassing?

> void cairo_setdevice(Cairo_State* state, Cairo_Engine* device) {
>   state->engine = device;
...
>   state->vtable->reset(state);
> }

I assumed just new `mini-engines' would be added at appropriate times.
There's no reason to reset the primary engine unless you're changing
it, which doesn't seem useful.

> The other thing I think should be done is make all the
> transformations, and all path construction that is more complex than
> lineto be device-independent.  This will avoid the need to
> reimplement these for every device, and to design the interface to
> allow the addition of new curve types easily.

PostScript/PDF already do a good job of doing curves, though.  You
want those backends to handle this.  If there's anything you don't
like about a particular PostScript implementation, fixing that is
better left to the backend.

-Dave




More information about the cairo mailing list