ManimCommunity / ManimPango

Binding for Pango, to use with Manim.
https://manimpango.manim.community
MIT License
43 stars 13 forks source link

MarkupText: Use Cairo to handle gradients #33

Open PhilippImhof opened 3 years ago

PhilippImhof commented 3 years ago

Enhancement proposal

When using gradients in MarkupText we have Pango render the text to an SVG. We then load the SVG into a SVGMobject and apply the gradient to the characters. This has two major drawbacks:

We will have to be careful w.r.t. the Write animation. Currently, even with gradients every character has its own color. If the character is itself colored with a gradient, what color is to be used for the stroke?

naveen521kk commented 3 years ago

This will require a refactor in how we render things, see https://gitlab.gnome.org/GNOME/pango/-/issues/533#note_1044494 and corresponding docs https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html#pango-glyph-string-index-to-x

where if my understanding is correct, we shouldn't PangoLayout which we currently do no, instead, we should first create a context from PangoCairo, pango-cairo-create-context, then use pango_itemize after that pango_shape or rather pango_shape_full, and then finally use pango_glyph_string_index_to_x for rendering a single single character with ligature on a cairo surface, while changing the colour in Cairo.

naveen521kk commented 3 years ago

Before doing this I would like to do #30

naveen521kk commented 3 years ago

This requires a major refactor so it can't be done now and is in the least priority because Manim's SVG parser still doesn't render Gradients from the SVG file.