[cairo] [RFC] Cairo operators expressed in shader syntax

Behdad Esfahbod behdad at behdad.org
Sat May 12 12:13:12 PDT 2007

On Fri, 2007-05-11 at 19:22 -0400, Daniel Amelang wrote:
> As you can see below, I define a new operator "COMPONENT_IN", and
> illustrate its behavior by example. It's likely that I'll just use
> this new operator internally for the purposes of this project, but I
> thought it might be worth discussing. If you follow the reasoning
> further, you'll notice that COMPONENT_OUT and COMPONENT_DEST_OUT
> operators are also possible, although I don't know how useful they
> would be. 

We've been talking about Render-style component-alpha masks for a while.
I even recently added it to TODO.

Ok, lets propose some API:

cairo_public void
cairo_paint_with_component_alpha (cairo_t *cr,
                                  double   red,
                                  double   green,
                                  double   blue,
                                  double   alpha);

cairo_public void
cairo_mask_components (cairo_t         *cr,
                       cairo_pattern_t *pattern);

cairo_public void
cairo_mask_surface_components (cairo_t         *cr,
                               cairo_surface_t *surface,
                               double           surface_x,
                               double           surface_y);

Better name suggestions?  Another approach is to make it a pattern
property.  That doesn't solve the paint_with_component_alpha usecase,
nor would it remove need for convenience cairo_mask_surface_components()
to go with cairo_mask_surface().  The implementation will be more
straightforward with a pattern property I guess, and doesn't need
extending backend interface/

Do PDF/AVG support component alpha masking?  PS, Quartz, Win32?


"Those who would give up Essential Liberty to purchase a little
 Temporary Safety, deserve neither Liberty nor Safety."
        -- Benjamin Franklin, 1759

More information about the cairo mailing list