[cairo] Cairo and OpenVG Radial Gradient

KULBHUSHAN PACHAURI kb.pachauri at samsung.com
Tue Oct 9 17:30:09 PDT 2007

Hi Emmanuel,

       Thanks a lot for your all the help.  I tried below code after the changing stops[1] to stops[pattern->base.n_stops - 1]

        For code snippet given below : 

           radial_test (cairo_t* cr, unsigned int width, unsigned int height) {
            cairo_pattern_t *pat;
            pat = cairo_pattern_create_radial (width/2.0, height/2.0, 10, width/2.0, height/2.0, 10);
            cairo_pattern_add_color_stop_rgba (pat, 0, 0, 0, 1, 1);             /* blue  */
            cairo_pattern_add_color_stop_rgba (pat, 1, 1, 0.5, 0, 1);          /* orange* /

            //cairo_pattern_set_extend (pat, CAIRO_EXTEND_PAD);
            //cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT);
              cairo_pattern_set_extend (pat, CAIRO_EXTEND_REFLECT);
            //cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);	
            cairo_set_source (cr, pat);
            cairo_rectangle (cr, 0, 0, width, height);
            cairo_fill (cr);
            cairo_pattern_destroy (pat);
             return cairo_status (cr);

           Image and glitz backend is giving same output i.e rectangle is filled with  blue color but for svg backend rectangle is filled with orange color.(??)

           Thanks in advance.


> Le samedi 29 septembre 2007 à 06:57 +0000, KULBHUSHAN PACHAURI a écrit :
> As per your reply for my query cairo to openvg radial gradient
> conversion i looked at the how cairo radial gradient is mapped to svg.
>  But i have some doubt about that mapping..
>  for the case if two circle radius are equal  and extend is not equal
> to cairo_extend_none and no of stops is greater than 2.  in that case
> that mapping works or ot. 
>  (line no: 1466 & file name cairo-svg-surface.c)

> It looks like there's a bug here. stops[1] should probably be
> stops[pattern->base.n_stops - 1] lines 1498 - 1500. Apart from that,
> it's supposed to work.

>  Also the offset for both the stops are 0. (??) (lineno: 1494 & file
>  name cairo-svg_surface.c)

>That's fine. SVG says:

> "If two gradient stops have the same offset value, then the latter
> gradient stop controls the color value at the overlap point. In
> particular: 
> <stop offset="0" stop-color="white"/>
> <stop offset=".2" stop-color="red"/>
> <stop offset=".2" stop-color="blue"/>
> <stop offset="1" stop-color="black"/>
 > will have approximately the same effect as: 
> <stop offset="0" stop-color="white"/>
> <stop offset=".1999999999" stop-color="red"/>
> <stop offset=".2" stop-color="blue"/>
> <stop offset="1" stop-color="black"/>
> which is a gradient that goes smoothly from white to red, then abruptly
> shifts from red to blue, and then goes smoothly from blue to black."

> Emmanuel.

More information about the cairo mailing list