[cairo] Spot colors (and CMYK)
Adrian Johnson
ajohnson at redneon.com
Wed Jan 13 05:21:43 PST 2010
Carl Worth wrote:
> On Sat, 26 Dec 2009 15:31:12 +0100, ecir hana <ecir.hana at gmail.com> wrote:
>> Hello,
>> I've seen some messages about adding spot colors (or named color, or
>> Separation and DeviceN in PDF specs terms) some time ago. Or perhaps
>> even adding CMYK as well.
>> Please, does anyone know if there has been any developments in that
>> direction? Is it perhaps planned to include spot colors in the future?
>> Or, is this not very central to the current development?
>
> From time to time, the cairo community sees a message like yours where
> we clearly have users interested in these features.
>
> But we haven't had much in the way of concrete API proposals (nor
> implementations to go along with them!). And it seems that the current
> set of cairo maintainers do not have the expertise to come up with
> either of these on their own.
>
> So I think we're going to need some further input from *somebody* before
> we'll see concrete progress on this front.
>
> Do you know of anyone (perhaps yourself) that could provide some or all
> of the following:
>
> * Concrete use case to describe what is missing at the
> application<->cairo boundary.
>
> * A concrete API proposal to satisfy that use case, (and a minimal API
> that doesn't multiply existing cairo entry points exponentially).
>
> * An implementation of that API.
>
> I'm looking forward to further input here, since I'd love to be able to
> say that cairo has a good answer for people needing whatever is missing
> here.
>
> -Carl
>
A starting point for an API proposal to support CMYK colors is the
following:
1) Expose cairo_color_t as an opaque type. This will allow supporting
various types of color without an explosion in the number of API
functions every time a new type of color is added.
cairo_color_t *
cairo_color_reference (cairo_color_t *color);
cairo_status_t
cairo_color_status (cairo_color_t *color);
void
cairo_color_destroy (cairo_color_t *color);
2) Provide cairo_color_t constructors for rgb[a] colors.
cairo_color_t *
cairo_color_create_rgba (double red, double green,
double blue, double alpha);
cairo_color_t *
cairo_color_create_rgb (double red, double green, double blue);
3) Add cairo_color_t equivalents of all functions that take a rgb[a]
void
cairo_set_source_color (cairo_t *cr, cairo_color_t *color);
cairo_pattern_t *
cairo_pattern_create_color (cairo_color_t *color);
void
cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern,
double offset,
cairo_color_t *color);
4) Now cairo_color_t can be extended to handle CMYK colors:
cairo_color_t *
cairo_color_create_cmyka (double cyan,
double magenta,
double yellow,
double black,
double alpha);
cairo_color_t *
cairo_color_create_cmyk (double cyan,
double magenta,
double yellow,
double black);
5) Add CMYK image format support to the image surface.
cairo_color_t could also be extended to handle spot colors. But I don't
know enough about spot colors to suggest an API.
More information about the cairo
mailing list