[cairo] Re: new clipping change patch

Keith Packard keithp at keithp.com
Wed May 25 10:56:45 PDT 2005

Sorry, I hit some key and my previous message was sent before I was

Evolution is not my favorite program today.

On Wed, 2005-05-25 at 09:49 -0400, Owen Taylor wrote:

> What the function does is gets the extents of the mask operation.
> (mask in the name is a verb, not a noun.) The mask argument isn't 
> currently used, but would be needed for the useful optimization:
>  - If the mask is a surface pattern, with extend=NONE and the 
>    operator does nothing for transparent source (OVER, say)
>    then the size of the intermediate surface is bounded by the
>    size of the (transformed mask)

Ok, so the function is just incomplete.
> (This optimization can be done for the source as well)
> Yes, your patch doesn't change the end result of the function, my
> comment was that with the patch we end up doing:

I think the patch just demonstrates how silly the original code was.  If
you have a suggestion for what it should look like, I'd love to see it.
Otherwise, I'll attempt to figure out the intended algorithm and
implemen that.
> > The clip serial number is relative to a specific surface; change the
> > surface, and you need to get a number relative to the new surface.  In
> > particular, the clip serial starts at 0 and until a surface is
> > associated, it will remain at 0.  If a clip region is applied before the
> > surface is associated, this 0 clip serial will inadvertantly match the
> > surface clip serial if that surface has no clip.
> Could do with a comment :-). 
>  /* allocate a new serial to represent our current state. Each 
>     surface has its own set of serials */


> say. I think my suggestion above with surface_set_clip_serial() does
> come out a bit better here, since you can just reset to 
> (unsigned int)-1.

See previous message as to why this isn't the best plan.

> > Given that we don't actually support changing surfaces, it might be
> > better to rework the gstate initialization code to include the surface
> > from the start...
> Maybe leave the set_target_surface() code around until we see if we
> need it for groups or not.

Oh, good point.

> > >  * _cairo_xlib_surface_ensure_picture (surface, &surface->&src_picture);
> > > 
> > >   Maybe just split that into ensure_src_picture() and 
> > >   ensure_dst_picture()?
> > 
> > I suppose; this did save a function.  Would you accept a pair of macros?
> > Or is that too 80s?
> I think GCC is going to do better with the pair of functions... if
> inlining makes sense, it has the power to do it.

Ok, I'll just do it right then.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050525/7c802fe5/attachment.pgp

More information about the cairo mailing list