[cairo] color fonts and CAIRO_OPERATOR_SOURCE

Bill Spitzak spitzak at gmail.com
Mon Sep 11 18:17:30 UTC 2017

For normal monochrome text Cairo acts like the text is a mask. It is
not the source image. So drawing text should absolutely not alter any
pixels that are "outside" all the glyphs.

It seems like the "ideal" thing to do with color glyphs is to treat
them as much like a mask as possible. When they are rendered it acts
like the source is the *unpremultiplied* version of the color glyph,
with the alpha set to 1 everywhere, while the mask is the alpha of the
color glyph intersected with the actual mask. It then renders using
the current Cairo operator. However I also think this idea will
produce a lot of useless combinations and would be complex and slow
(though OVER and SOURCE can be special-cased).

A much simpler and probably preferable alternative is to have any
operation other than OVER just ignore the color of the glyph and use
the alpha of the glyph as the shape, then render just like any
monochrome letter. This would be useful for making drop shadows and
other effects on the text. You could also specify that it is done this
way only for unbounded operators, or only for a subset that is
"non-additive". I do think filling the shapes with a solid color is
useful enough that one of the operators (probably SOURCE) should
support it.

On Mon, Sep 11, 2017 at 4:13 AM, Matthias Clasen
<matthias.clasen at gmail.com> wrote:
> On Mon, Sep 11, 2017 at 4:44 AM, Uli Schlachter <psychon at znc.in> wrote:
>> So apparently this behaviour is by design, meaning that glyphs can only
>> really be used with operator OVER any more (well, and some others). So
>> let me ask this another why: Is this really a good behaviour?
> I think you are jumping to conclusions here. The only glyphs for which this
> is a problem
> with the current code are color glyphs. Most glyphs are still fine with
> other operators. One
> answer I gave on irc is: if you want to do fancy stuff with text, you better
> control which
> fonts are involved, so use a custom context (which can avoid loading color
> glyphs for the
> emoji family). But that is not a great answer. Some ideas for a better one:
> - Add an api to find out if a fond has color glpyhs
> - Add an api to control loading of color glyphs
> - Clip when painting color glyphs to not affect the target outside the
> extent of the glyph
>> Oh and one more thing: Who updates cairo's docs and all the explanations
>> on the web page? ("glyphs work like this, except when they do not").
>  I can take a look at docs. No idea about the web page.
> --
> cairo mailing list
> cairo at cairographics.org
> https://lists.cairographics.org/mailman/listinfo/cairo

More information about the cairo mailing list