On Jun 9, 2010, at 11:06, Matej Bukovinski wrote: > The clipping path approach doesn't really help. It turns out that you can > only intersect the current clipping path (initially the view's bounds) with a > new path and the intersected region is the region where drawing is visible. > This means that when you're drawing a larger rectangle over a smaller one, > you would need to set the clipping path to all areas NOT covered by the > smaller rectangle. This is basically the same problem as calculating which > parts of the larger rectangle to draw and just drawing there.
I think you can do it, but it just takes an extra step. For each overlay (front to back): 1. Intersect the rect for the current overlay with the "drawRect" (i.e. the rect passed to drawRect:) producing the effective "tintRect". 1a. If tintRect is empty, nothing to draw, so skip 2-4. 2. Fill the tint rect with the appropriate color. 3. Construct a new bezier compound-path object with one path from drawRect (+[NSBezierPath bezierPathWithRect:]), plus a path from the tintRect (-[NSBezierPath appendBezierPathWithRect:]). That essentially "inverts" the tintRect within drawRect. Set the even-odd winding rule on the path, so that you don't have to be concerned about subpath directions (although I believe creating a compound path in the order I described will give correct results with non-zero winding rule, too). 4. Intersect this compound path with the current clipping path (-[NSBezierPath addClip]). Repeat for each overlay rect. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com