Re: color fonts and CAIRO_OPERATOR_SOURCE
Bill Spitzak <[email protected]>
| Newsgroups | gmane.comp.lib.cairo,gmane.comp.gnome.gtk+.devel.general |
|---|---|
| Message-ID | <CAL-8oAgnTbUr3yV2PLivFfQCuEX_fnQG3HuKXLUZUUxG-szEGQ@mail.gmail.com> |
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 <[email protected]> wrote: > On Mon, Sep 11, 2017 at 4:44 AM, Uli Schlachter <[email protected]> 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 > [email protected] > https://lists.cairographics.org/mailman/listinfo/cairo -- cairo mailing list [email protected] https://lists.cairographics.org/mailman/listinfo/cairo