[cairo] Alpha masks

Bill Spitzak spitzak at d2.com
Tue Sep 7 10:43:59 PDT 2004

On Sunday 05 September 2004 11:53 am, Owen Taylor wrote:
> I was trying to figure out how with Cairo to do the following
> simple operation:
>  Given a single channel (A8) surface, draw a solid color
>  with the surface as the mask.

I would also like to know how to do this. I have to say I have spent a great 
deal of time trying to get Windows to do this and had to give up in 
frustration. The only way appears to be to create a new rgba image each time 
the color changes. The real frustration is that this operation is exactly 
what is used to draw antialiased fonts. It is a total mystery why this is not 
trivial to access!

This is very useful for imbedding other images into text output, for drawing 
"disabled" icons, and for drawing monochrome icons that will look nice even 
if the user's preferences are to reverse the label and background colors to 
an inverse-video mode.

For filling with gradients and so on, the same methods used to fill text with 
gradents can be used: draw into a temporary buffer and then use that as a 
mask. This is much more rare than filling with a solid color so it is ok if 
this is complicated.

Using the image as a mask directly may be the solution planned for Cairo, but 
requires you to know it's dimensions so that you can fill a rectangle big 
enough to cover it. This is somewhat annoying. It is also annoying if you are 
creating a mask since you now have to think about nested masks. It really 
should not be much harder than drawing a font glyph.

More information about the cairo mailing list