[cairo] Intermittent issues using cairo_rotate to rotate an array of text glyphs

Matthew Conway mconway at espial.com
Wed Jan 6 07:45:29 PST 2016


I'm trying to rotate an array of glyphs (where each glyph represents a 
textual character).

Consider the following:

----------------
| A TEXT LABEL |
----------------

Where the rectangle is a solid coloured background and the text is drawn 
(centered) on top of the rectangle (think subtitles being displayed on a 
TV screen).

For some situations, I need to rotate the text label (rectangle and 
text) 90 degrees clockwise. I do not expect the text rotation to be 
vertical as shown here:

|̄ ̄ ̄ |
| A |
|   |
| T |
| E |
| X |
| T |
|   |
| L |
| A |
| B |
| E |
| L |
|___|

Instead, I am expecting the text to be rotated (in position) with the label.

Sometimes (about 25% of the time), Cairo seems to be rotating random 
text characters and drawing them over the top of other correctly rotated 
characters.

/* Draw the labels background */
cairo_rectangle( cr, x, y, width, height );
cairo_set_source_rgba( cr, red, green, blue, alpha );
cairo_fill( vg->cairo_context );

/* Rotate 90 degrees clockwise and show the text */cairo_translate( cr, 
x, y );
cairo_rotate( cr, 1.5708 );
cairo_show_glyphs( cr, glyphs, num_glyphs );


Notes:
1. The glyphs are created by freetype libraries.
2. The system is using Wayland to draw the text labels.


I've tried quite a few things, the most successful was to add a call to 
show_glyphs before translating, which reduces the issue to show 
approximatley 5% of the time:

/* Rotate 90 degrees clockwise and show the text */
cairo_show_glyphs( cr, glyphs, num_glyphs );
cairo_translate( cr, x, y );
cairo_rotate( cr, 1.5708 );
cairo_show_glyphs( cr, glyphs, num_glyphs );


I've taken a photo of the screen to show what the issue looks like, it 
can be viewed here:
http://postimg.org/image/x4g4fne5h/


I'm using:
- latest cairo 1.14.6
- freetype to create the font glyphs
- Wayland


Thanks,
Matt.


More information about the cairo mailing list