[cairo] [PATCH] Conical gradients with pixman with rotation

Marco Wertz marco.wertz at gmx.de
Wed Jun 23 02:09:11 PDT 2010


Hi Soeren,

thank you very much, now it's working as expected!

Best regards,

Marco

-------- Original message --------
> Datum: 20 Jun 2010 01:28:09 +0200
> Von: Soeren Sandmann <sandmann at daimi.au.dk>
> An: "Marco Wertz" <marco.wertz at gmx.de>
> CC: cairo at cairographics.org, pixman at lists.freedesktop.org, xorg-devel at lists.x.org
> Betreff: Re: [PATCH] Conical gradients with pixman with rotation

> Hi Marco,
> 
> > "Soeren Sandmann" <sandmann at daimi.au.dk> writes:
> > > 
> > > There used to be a bug where pixman would miscalculate the
> > > angle. Maybe that's what you are seeing? That bug is fixed in 0.18.0.
> > 
> > I've now upgraded to 0.18.2 but I'm afraid the problem is still there.
> I'm not sure whether this is actually a bug or whether it is a feature :)
> I'm attaching a small example source code that shows what I mean. The 45
> degree rotated conical gradient generated by my example looks like this:
> > 
> > http://i45.tinypic.com/2cpq435.png
> > 
> > But I think this look is wrong. Instead, 45 degree rotation should look
> like this: (generated in CorelDraw)
> > 
> > http://i45.tinypic.com/x0xjef.png
> > 
> > But I'm unable to achieve this look with the conical gradient
> > functions in pixman. Is it really intended this way or is this a bug
> > in pixman?
> 
> [adding the X and pixman mailing lists]
> 
> The gradients were added to the X Render extension several years ago,
> but the Render specification doesn't say anything about how they
> should actually be rendered, so what is intended is somewhat difficult
> to say. The radial gradients were pretty broken until cairo started
> using them and Carl had to actually make them work. So it's not too
> surprising if the conical gradients don't work.
> 
> The current behavior pretty clearly is just plain buggy. What is going
> on is that the output of atan2() is in the range of [-pi, pi] and we
> never correct for that, which means we get a discontinuity at pi,
> where the angle, and therefore the parameter, suddenly becomes
> negative. That cannot possibly be right.
> 
> If we simply fix that, then we get something more plausible where the
> gradient starts at the given angle and is interpolated 360 degrees
> clockwise around the center.
> 
> However, the conical gradients were (I suppose, since the code was
> written by TrollTech people) intended to match what Qt does:
> 
>         http://doc.trolltech.com/4.4/qconicalgradient.html
> 
> which uses a counter-clockwise interpolation. Given how we normally
> measure angles, that makes sense to me. 
> 
> The appended patch makes the pixman conical gradients match what
> QConicalGradient is documented to do. With that applied, you can
> achieve something similar to the Corel Draw output by using three
> color stops. See this modified version of your test program:
> 
>         http://www.daimi.au.dk/~sandmann/gradient-test.c
> 
> However, since clearly no one has actually used the conical gradients
> before, we are not really constrained in what they can be made to do,
> so I'm open to other interpretations.
> 
> The patch is available in a git repository here:
> 
>         http://cgit.freedesktop.org/~sandmann/pixman/log/?h=conical
> 
> 
> Søren


-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01


More information about the cairo mailing list