[cairo] cairo + pango + vertical text
Behdad Esfahbod
behdad at behdad.org
Tue Oct 30 10:37:23 PDT 2007
On Tue, 2007-10-30 at 06:29 -0400, Nguyen Vu Hung wrote:
> Can anyone show a a primitive sample of how to show vertical text with
> cairo + pango, like this:
>
> http://www.pango.org/ScriptGallery?action=AttachFile&do=get&target=VerticalSimple.png
>
> I know that pangocairo-viewer.c contains the answer but it seems overload to me.
Read here:
http://library.gnome.org/devel/pango/unstable/pango-Vertical-Text.html
It's basically a cairo_rotate() and a pango_context_set_gravity().
I just improved the docs, adding these:
<para>
Applications should only need to set base gravity on #PangoContext in use, and
let Pango decide the gravity assigned to each run of text. This automatically
handles text with mixed scripts. A very common use is to set the context base
gravity to auto using pango_context_set_base_gravity()
and rotate the layout normally. Pango will make sure that
Asian languages take the right form, while other scripts are rotated normally.
</para>
<para>
The correct way to set gravity on a layout is to set it on the context
associated with it using pango_context_set_base_gravity(). The context
of a layout can be accessed using pango_layout_get_context(). The currently
set base gravity of the context can be accessed using
pango_context_get_base_gravity() and the <firstterm>resolved</firstterm>
gravity of it using pango_context_get_gravity(). The resolved gravity is
the same as the base gravity for the most part, except that if the base
gravity is set to %PANGO_GRAVITY_AUTO, the resolved gravity will depend
on the current matrix set on context, and is derived using
pango_gravity_get_for_matrix().
</para>
<para>
The next thing an application may want to set on the context is the
<firstterm>gravity hint</firstterm>. A #PangoGravityHint instructs how
different scripts should react to the set base gravity.
</para>
<para>
Font descriptions have a gravity property too, that can be set using
pango_font_description_set_gravity() and accessed using
pango_font_description_get_gravity(). However, those are rarely useful
from application code and are mainly used by #PangoLayout internally.
</para>
<para>
Last but not least, one can create #PangoAttribute<!---->s for gravity
and gravity hint using pango_attr_gravity_new() and
pango_attr_gravity_hint_new().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
pango_context_get_base_gravity(),
pango_context_set_base_gravity(),
pango_context_get_gravity(),
pango_context_get_gravity_hint(),
pango_context_set_gravity_hint(),
pango_font_description_set_gravity(),
pango_font_description_get_gravity(),
pango_attr_gravity_new(),
pango_attr_gravity_hint_new()
</para>
Hope that helps,
--
behdad
http://behdad.org/
"Those who would give up Essential Liberty to purchase a little
Temporary Safety, deserve neither Liberty nor Safety."
-- Benjamin Franklin, 1759
More information about the cairo
mailing list