[cairo] Radial shader transformation
spitzak at d2.com
Mon Mar 1 14:00:30 PST 2004
On Monday 01 March 2004 01:32 pm, Thomas Hunger wrote:
> > I may be wrong, perhaps the current transform applies to the current
> > shader?
> Hm. I thought quite a bit about that and came the the result that the
> current transform should apply to the current shader.
> I.e. if you do create horizontal, linear gradient via shader_linear
> (0,y,1,y) and then call rotate(PI/2) the gradient would rotate together
> with the shape.
> Did I understand you rightly that in your proposal the gradient would not
> rotate, since it would use the transform frozen at its creation time?
That was what I was proposing, but in fact I realize now it is not a
necessary restriction, and you are right it could be a pain for cases where
the shader wants to be moved or scaled to match the current shape.
Instead the shader could be transformed by the difference between the space
it was defined in and the current transform. This is just the inverse of the
transform matrix when the shader was defined, multiplied by the current
transform matrix. You could then use rotate and scale to define a tilted
ellipse transform, and still scale and translate and even rotate as you draw
,~,~,~,~ ~ ~ ~ ~
/\_ _|_========___ Bill Spitzak
~~~/\/\\~~~~~~\____________/~~~~~~~~ spitzak at d2.com
More information about the cairo