[cairo] cairo_new_sub_path: Making cairo_arc easier to use and more

Bill Spitzak spitzak at d2.com
Tue Jan 24 12:27:14 PST 2006

Carl Worth wrote:

>>Only question I have is the same as another poster: what does close_path 
>>do? I'm thinking it *should* do a new_sub_path because otherwise you 
>>would have three lines joining at a point, which you may want to avoid 
>>having to define the exact results of.
> Oh, in that sense, yes, it does need to start a new sub path.
> I suppose it could still preserve the current point after the
> close_path, (in which case we could define it as doing an implicit
> move_to at the end).
> Or we could just decide that preserving the current point after close
> path was a bug and we could make it to the new_sub_path.

I'm thinking an implicit move_to is a bad idea. The reason is that you 
may want to draw "dots" for any move_to that is not followed by another 
move_to (or it already does this?). If this is true you don't want to 
talk about internal move_to's as they may have to be different than 
external ones. Also if the point is at the *start* of the closepath 
segment, rather than at the join, this just sounds like a useless bug.

So just to make it clear, I think close_path should be equivalent to:

	1. line_to the original point
	2. secret stuff to make them mitre together into a loop
	3. new_sub_path

>>I would suggest that move_to be removed entirely from the cairo 
>>interface, by removing the code from the path-enumeration api and 
>>replacing it with the new_sub_path code. move_to can be emulated by 
>>calling new_sub_path and line_to.
> Aside from compatibility problems, this would actually be "harder" for
> the user to deal with. With move_to and line_to, (and the documented
> rule that all line_to calls after a new_sub_path will be turned into a
> move_to), there is an unambiguous meaning for each operation. With an
> exposed new_sub_path the user would be required to maintain more state
> in order to handle two different actions for line_to.

Yes you are right. There is no need for a "new_sub_path" operator in the 
path enumeration. Just change the line_to calls to move_to before 
storing them.

More information about the cairo mailing list