[cairo] Using Cairo and Pango to scroll text on video
sidebranch.linux at gmail.com
Mon May 7 11:24:52 PDT 2012
On Mon, May 7, 2012 at 4:15 PM, <robertk54 at aol.com> wrote:
> >>>Another workaround is to prerender the text to a similar surface
> >>>(cairo_surface_create_similar) and paint that intermediate surface to
> >>>the destination surface with the correct offset.
> >> Would using the latter method prevent me from using semi-transparent text
> >> and / or backgrounds?
> >It would not if you pass CAIRO_CONTENT_COLOR_ALPHA to the function, see>http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-create-similar
> >Prerendering the text is much faster that having to render the text
> >again in every frame. It's only really a reasonable shortcut when the
> >text is only translated and perhaps rotated, but not zoomed though.
> I would love to pre-render the text but I think my use case makes it a bit more complex.
> The video frame is a fixed size ARGB surface which makes sense. However, the text can
> be any size and often much wider than the video image. I imagine this prevents me from being
> able to use 'create similar' since this would be using the video frame's surface, no? I guess
> I could create a new ARGB image surface using the text dimensions?
> I have done this before using cairo and pango, basically a ticker bar on a
N width screen with smooth scrolling. My approach was something like this:
Make a text rendering surface 2 * N + C, C = 16 or such.
Render text in the off screen part of the surface (which is now the
rightmost half of the surface).
Composite that surface from X=0 at X=0 to your main surface.
Composite that surface from X=2 at X=0 to your main surface (assuming your
step size = 2 pixels).
When you reach X = 2N render in the offscreen part of the text render
surface (which is now the leftmost half of the surface).
} while (true);
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cairo