Thanks carl. i found the the solution in the mailing list using WINDING/EVEN_ODD with A and C (intersect of A and B), for that i had to compute the intersect rect C. with the two clips suggested, computing C would not be required.<br>
<br>&gt;Note that the B rectange is carefully constructed to wind in the<br>
&gt;opposite direction as the A rectangle. The result of the above is that<br>
&gt;all drawing will be clipped to the union of A and B but with the<br>
&gt;intersection C masked out, just as you want.<br>This and the documentation on the fill rule behavior (&quot;The ray can be in any direction,
as long as it doesn&#39;t pass through the end point of a segment
or have a tricky intersection such as intersecting tangent to the path.&quot;) requires some graphics theory to understand it. I cant at this moment.<br><br>thanks,<br>Zaheer<br><br><div class="gmail_quote">On Wed, Sep 9, 2009 at 10:33 PM, Carl Worth <span dir="ltr">&lt;<a href="mailto:cworth@cworth.org">cworth@cworth.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Excerpts from zaheer ahmad&#39;s message of Tue Sep 08 00:18:20 -0700 2009:<br>
&gt; hi,<br>
<br>
Hi Zaheer!<br>
<div><div></div><div class="h5"><br>
&gt; i have two rectangles A and B that may or may not intersect. If they do<br>
&gt; intersect (lets say C), i would like a cairo clip on A such that only C is<br>
&gt; masked out from the drawing and the rest of A gets drawn. how can i do that.<br>
&gt; i dont seem to find a reverse of cairo_clip, something like<br>
&gt; cairo_set_source_surface(A), cairo_rev_clip(B). Appreciate any pointers.<br>
<br>
</div></div>This is possible to do, but it takes a couple of calls to cairo_clip,<br>
(at least the way I&#39;ve come up with so far).<br>
<br>
The first thing to understand is that cairo_clip respects the fill<br>
rule[*] as set by cairo_set_fill_rule. The default FILL_RULE_WINDING<br>
means that you can make one rectangle &quot;subtract&quot; from another by<br>
defining it in the opposite direction as the other.<br>
<br>
So you might start with the following:<br>
<br>
        cairo_rectangle (cr, A.x, A.y, A.width, A.height);<br>
        cairo_rectangle (cr, B.x + B.width, B.y, - B.width, B.height);<br>
        cairo_clip (cr);<br>
<br>
Note that the B rectange is carefully constructed to wind in the<br>
opposite direction as the A rectangle. The result of the above is that<br>
all drawing will be clipped to the union of A and B but with the<br>
intersection C masked out, just as you want.<br>
<br>
What you don&#39;t want, though, (as I understand the question), is for<br>
the drawing to also appear within B. So you can follow the above with<br>
a straightforward clip to A:<br>
<br>
        cairo_rectangle (cr, A.x, A.y, A.width, A.height);<br>
        cairo_clip (cr);<br>
<br>
and hopefully you know have exactly what you want.<br>
<br>
I hope that helps. Please let us know if you need anything more, and<br>
have fun with cairo!<br>
<br>
-Carl<br>
<br>
[*] <a href="http://cairographics.org/manual/cairo-context.html#cairo-fill-rule-t" target="_blank">http://cairographics.org/manual/cairo-context.html#cairo-fill-rule-t</a><br>
</blockquote></div><br>