[cairo] [PATCH] Update clipping surface when clipping repeatedly

Kristian Høgsberg krh at bitplanet.net
Fri Jun 3 09:10:52 PDT 2005


Hi,

Here's a patch to make _cairo_gstate_clip() replace the clipping surface 
to a new surface, the size of the intersection of the previous clip 
surface and the extents of the new clip path.  The current approach 
doesn't work when the extents of a new clip path is well contained in 
the current clip surface.  When rasterizing the trapezoids for the new 
clip with the IN operator, libpixman only touches the pixels within the 
bounding box of the trapezoids, which gives us this clipping bug:

   http://freedesktop.org/~krh/cairo/clip-twice-bad.png
   http://freedesktop.org/~krh/cairo/clip-twice-good.png

The attached patch works around the problem by creating a new surface 
the size of the intersection and renders the new mask to that.

cheers,
Kristian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: shrink-clip-surface.patch
Type: text/x-diff
Size: 4517 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050603/62042874/shrink-clip-surface.bin


More information about the cairo mailing list