[Cairo] Suggestion for replacing cairo_copy with set_gstate.
Carl Worth
cworth at east.isi.edu
Fri Sep 26 11:40:18 PDT 2003
On Sep 26, Bill Spitzak wrote:
> My recomendation:
Hi Bill,
The first 4 points in your recommendation match the status quo
precisely.
The issue is that there is no way to replace en masse the contents of
the current graphics state inside a cairo_t. This deficiency has
already forced one user to ignore the stack inside cairo_t and
resort to maintaining a private stack of cairo_t objects created via
cairo_copy. That doesn't seem ideal.
The latest proposal eliminates cairo_copy, but if we look at its
potential equivalent:
cairo_t *copy = cairo_create ();
cairo_gstate_t *gstate = cairo_get_gstate (cr);
cairo_set_gstate (copy, gstate);
we see that there's a memory management issue with the cairo_gstate_t
object. We could add:
cairo_gstate_destroy (gstate);
But I don't like that as this would be the sole cairo_gstate function,
and I also don't want to require any of the object-based APIs to be
used for any core functionality, (and this seems like a core
operation).
Perhaps instead we just want a single function to copy the graphics
state from one cairo_t to another. Perhaps drop cairo_copy and add
something like:
cairo_set_graphics_state (cr, copy);
And then if the user wants to hold on to just the graphics state, they
can just use a proxy cairo_t for that.
Does that make any sense? Hopefully I'm not talking in circles.
> cairo_pop (or whatever it is called) will do nothing if the pop pointer is
> zero.
This goes to the issue of error handling. See my future email. ;-)
-Carl
More information about the cairo
mailing list