[cairo] [Fwd: Problem with stroke vs. fill]
Carl Worth
cworth at east.isi.edu
Fri Apr 2 19:56:05 PST 2004
On Apr 2, Duncan Mak wrote:
> Thanks so much for working on Cairo, I've been happily using it to
> implement the various 2D geometry drawing/filling functions in the GDI+
> Graphics class. We're making good progress!
You're quite welcome. I have fun working on it, and I'm glad you're
having some luck using it.
> I found an algorithm [1] from the comp.text.pdf FAQ for drawing
> elliptical arcs using bezier curves. Using this algorithm, I was able to
> implement the functions for drawing and filling arcs and pies.
Cool. I don't know if it was there already when you started this work,
but we now have the following function in cairo that may help you drop
a bunch of code:
void
cairo_arc (cairo_t *cr,
double xc, double yc,
double radius,
double angle1, double angle2);
That will let you do any circles you want. For an ellipse you'll just
just need to to precede it with a cairo_scale as appropriate.
> All being the same, with stroke working and fill not working, I'm
> wondering, is this a Cairo bug?
I don't think so. Looking through your code I see several calls to
cairo_move_to, so your final path is a complex path consisting of
several independent sub-paths. When you call cairo_fill on a complex
path it implicitly closes each sub-path and fills them. So I think
that's what you're seeing here.
To fix this you'll want to fix make_pie so that it creates a simple
path, (ie. one cairo_move_to, followed by several calls to
cairo_line_to and cairo_curve_to). Does that make sense?
Although, frankly, I think it will be a lot easier to just switch to
using cairo_arc directly.
Let me know if you have any more problems.
-Carl
More information about the cairo
mailing list