[cairo] Mesh gradients

Behdad Esfahbod behdad at behdad.org
Sun Sep 6 16:06:50 PDT 2009


Hi Adrian,

My main comment is that given the number of new API additions, I'd rather see 
them under a cairo_pattern_mesh_* namespace rather than cairo_pattern_*.
Other than that, not a huge fan of moveto/lineto/curveto, but can live with it.

Thanks for all the work,

behdad

On 09/06/2009 08:45 AM, Adrian Johnson wrote:
> I've updated the mesh gradient API on my mesh branch[1] to change the
> set corner color and set control point API to:
>
> void
> cairo_pattern_set_corner_color_rgb[a] (cairo_pattern_t *pattern,
> 				       int point_num,
> 				       double red, double green,
>                                          double blue);
> void
> cairo_pattern_set_control_point (cairo_pattern_t *pattern,
> 				 int point_num,
>      				 double x,
>      				 double y);
>
> I found this change to be easier and less confusing to use. The complete
> API is at the end of this message. The gtk-doc dcoumentation in the code
> documents the use of this API. The mesh branch also includes some
> patches from Andrea to fix some bugs.
>
> I've updated the cairo backend of poppler to use cairo mesh gradients[2]
> for PDF Type 4,5,6, and 7 shadings. Some sample renderings of PDF files
> using this poppler-cairo branch are at:
>
> http://people.freedesktop.org/~ajohnson/mesh/
>
> monkey.png, rendered from monkey.pdf, is from laidout [3]. The others
> are from smooth shading samples [4] converted to PDF then rendered with
> poppler-cairo. Some of these have a few white pixels in them. I have not
> worked out what is causing that.
>
> Any comments on this API and the implementation? Should the mesh
> gradient rasterizer be moved into pixman?
>
>
> [1] http://cgit.freedesktop.org/~ajohnson/cairo/log/?h=mesh
>
> [2] http://cgit.freedesktop.org/~ajohnson/poppler/log/?h=mesh
>
> [3] http://www.laidout.org/
>
> [4]http://partners.adobe.com/public/developer/en/ps/sdk/sample/smooth.zip
>
>
> Complete Mesh gradient API
> --------------------------
>
> cairo_pattern_t *
> cairo_pattern_create_mesh (void);
>
> void
> cairo_pattern_begin_patch (cairo_pattern_t *pattern);
>
> void
> cairo_pattern_end_patch (cairo_pattern_t *pattern);
>
> void
> cairo_pattern_curve_to (cairo_pattern_t *pattern,
> 			double x1,
>      			double y1,
>      			double x2,
>      			double y2,
>      			double x3,
>      			double y3);
>
> void
> cairo_pattern_line_to (cairo_pattern_t *pattern,
>      		       double x,
>      		       double y);
>
> void
> cairo_pattern_move_to (cairo_pattern_t *pattern,
>      		       double x,
>      		       double y);
>
> void
> cairo_pattern_set_corner_color_rgb (cairo_pattern_t *pattern,
> 				    int point_num,
> 				    double red, double green,
>                                       double blue);
>
> void
> cairo_pattern_set_corner_color_rgba (cairo_pattern_t *pattern,
>    				     int point_num,
> 				     double red, double green,
>                                        double blue, double alpha);
>
> void
> cairo_pattern_set_control_point (cairo_pattern_t *pattern,
> 				 int point_num,
>      				 double x,
>      				 double y);
>
> cairo_status_t
> cairo_pattern_get_patch_count (cairo_pattern_t *pattern,
> 			       int *count);
>
> cairo_path_t *
> cairo_pattern_get_path (cairo_pattern_t *pattern,
> 			int patch_num);
>
> cairo_status_t
> cairo_pattern_get_corner_color_rgba (cairo_pattern_t *pattern,
> 			       int patch, int corner,
> 			       double *red, double *green,
> 			       double *blue, double *alpha);
>
> cairo_status_t
> cairo_pattern_get_control_point (cairo_pattern_t *pattern,
> 				 int patch, int point,
> 				 double *x, double *y);
>
>
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
>


More information about the cairo mailing list