[Cairo] Suggestion for replacing cairo_copy with set_gstate.

gjc at inescporto.pt gjc at inescporto.pt
Fri Sep 26 14:53:20 PDT 2003


A Sex, 2003-09-26 às 19:40, Carl Worth escreveu:
> 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);

  Hi, new to this list. :)

  There's prior art for this:
http://developer.gnome.org/doc/API/2.0/gdk/gdk-Graphics-Contexts.html#gdk-gc-copy

  BTW, have you guys looked at libplot?  It is also modeled after
postscript and only has savestate/restorestate, none of this state
copying stuff.
http://www.gnu.org/manual/plotutils-2.2/html_node/plotutils_61.html

  However, one could argue that libplot is primitive and I'd have to
agree.

> 
> 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
> 
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://cairographics.org/cgi-bin/mailman/listinfo/cairo
-- 
Gustavo J. A. M. Carneiro
<gjc at inescporto.pt> <gustavo at users.sourceforge.net>




More information about the cairo mailing list