[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