[cairo] How to use clipping?
Carl Worth
cworth at east.isi.edu
Tue Aug 3 09:41:57 PDT 2004
On Tue, 3 Aug 2004 11:58:39 -0400 (EDT), Sebastien Lemieux wrote:
> I've just started to use Cairo to produce png graphics and everything
> seems just perfect! I'd like to use the clipping functions. Could
> someone just summarize the use of:
>
> cairo_init_clip()
> cairo_clip()
Sure.
Within the cairo graphics state, there is a notion of a current clipping
path. Initially, this path is infinitely large, (eg. no clipping is
performed).
Calling cairo_clip computes a new clipping path by intersecting the
current clipping path with the current path, (ie. the path formed with
things like cairo_move_to/line_to/curve_to). After that, the effect of
all subsequent drawing operations will be restricted to the area within
the current clipping path.
It is important to note that cairo_clip does not consume the current
path like cairo_stroke and cairo_fill do. This allows you to retain the
current path for subsequent drawing options, since a cairo_save/restore
cannot be used for this purpose as that would eliminate the effect of
cairo_clip. If the path is no longer needed, the user should call
cairo_new_path after cairo_clip to avoid unexpected behavior.
Calling cairo_clip can only shrink the current clipping region. There
are two ways to expand the clip region:
1) Call cairo_init_clip which restores the clip path to its
original infinite size.
2) Call cairo_restore to restore a graphics state where a larger
clip path was earlier saved with cairo_save.
NOTE: In the current implementation, things slow down quite a bit after
calling cairo_clip. Keith thinks this should be pretty easy to fix if
someone just goes and implements a more optimized version of the IN
operator for us.
> Will they apply to a cairo_show_surface() call?
Yes, the clipping should apply to all drawing operations. If not, it's a
bug, and you should let us know about it.
I hope that helps,
-Carl
More information about the cairo
mailing list