[cairo] pango+cairo how to get position of each character?
theo.veenker at beexy.nl
Mon May 10 14:59:57 UTC 2021
On 5/10/21 4:10 PM, 猛 郝 wrote:
> Hi Theo, thank you, that's great. what I want is first: get each glyph; then get contour
> and outline points of each glyph; then use cairo bezier related funtions to draw those
> glyphs. because I want to do some transform based on those outline and points information.
So you want to convert each character in a text to path and then operate on that. I'm
afraid that's far beyond my expertise. I think I would study Inkscape (the source code)
and learn from that.
> Now my question is if I can use some built-in cairo/pango function to get and render those
> outline and points without freetype library? I am not familiar with how cairo draws each
> glyph in detail (bitmap or bezier/line?)
I don't know font rendering in depth, sorry. If you can do the text to path stuff you can
of course draw or fill the path as you please. But seems a bit of an overkill if all you
want is to color the individual characters.
> *From:* cairo <cairo-bounces at cairographics.org> on behalf of Theo Veenker
> <theo.veenker at beexy.nl>
> *Sent:* Saturday, May 8, 2021 9:59 PM
> *To:* cairo at cairographics.org <cairo at cairographics.org>
> *Subject:* Re: [cairo] pango+cairo how to get position of each character?
> On 08/05/2021 10:32, mhao1999 at live.cn wrote:
>> For example, I have a text string "hello" and a truetype font file, and
>> I want to apply different color to different character, currently I
>> cannot find a way to implement it.
>> My thought is:
>> first get each position of each character from pango/cairo, then if no
>> api to render one by one, I can use freetype library to render each
>> glyph, does it work?
>> Thanks for any idea.
> I think you need to create a pango layout for the text. Then use a pango
> iterator to iterate over the lines and each line's content. This should
> give you the position and size of each glyph. Then you can render each
> character separately in the desired color at the calculated position.
> Maybe it can be done smarter than that.
> If your goal is just to display fancy colored text rather than use a
> specific color for each character, I would simply create a rainbow
> gradient or whatever and use that as the paint source for your text.
> That's much easier and may also look better.
> Theo Veenker | Beexy - Behavioral Experiment Software
> +31(0)524-541531 | +31(0)6-42525777 mobile
> theo.veenker at beexy.nl | www.beexy.nl <http://www.beexy.nl>
> cairo mailing list
> cairo at cairographics.org
Theo Veenker | Beexy - Behavioral Experiment Software
+31(0)524-541531 | +31(0)6-42525777 mobile
theo.veenker at beexy.nl | www.beexy.nl
More information about the cairo