Cairo 图形指南 (10) —— 文本

本篇讲述如何处理文本。

灵魂伙伴

第一个示例是在 GTK+ 窗口中显示《灵魂伙伴》的部分歌词。

在这个示例中,显示了 Natasha Bedingfield 的《灵魂伙伴》的部分歌词。(在这里,可以听这首歌,很美妙)

cairo_select_font_face(cr, “Purisa”,
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);

这里设置字体。这个函数接受了三个字体参数的传入,字体的名称、样式与轻重。

cairo_set_font_size(cr, 13);

这里设定字号。

cairo_move_to(cr, 20, 30);
cairo_show_text(cr, “Most relationships seem so transitory”);

通过在窗口中指定位置并调用 cairo_show_text() 函数显示文本。

一个字接一个字……

这种效果就是一个字一个字的显示,这些字的绘制存有时间差。

在这个示例中,我们在 GTK+ 窗口中画了“ZetCode”这个字串,并让逐个字母伴随一定的时间差逐一显示。

gpointer text[7] = { “Z”, “e”, “t”, “C”, “o”, “d”, “e” };

构造一个字符数组。

开始逐个字的绘制。extents.width 给出了当前字符的宽度。

膨胀

下面这个示例中,我们制造了一种膨胀的效果。这个示例显示了一串在膨胀的居中文本,并且伴有淡出现象。这是很常见的效果,在 flash 动画里经常见到。

这个示例在 GTK+ 窗口中制造了一种膨胀并且淡出的文本渲染效果。

gint x = widget->allocation.width / 2;
gint y = widget->allocation.height / 2;

获取窗口中心坐标。

cairo_set_source_rgb(cr, 0.5, 0, 0);
cairo_paint(cr);

将背景设为暗红色。

size += 0.8;

每轮循环,字号都增长 0.8 个单位。

if (size > 20) {
alpha -= 0.01;
}

当字号大于 20 的时候,就开始淡出。

cairo_text_extents(cr, “ZetCode”, &extents);

获取文本尺寸。

cairo_move_to(cr, x – extents.width/2, y);

根据文本尺寸来将文本定位在窗口的中心位置。

cairo_text_path(cr, “ZetCode”);
cairo_clip(cr);

获取文本的的路径,并将其设为当前的裁剪域。

cairo_stroke(cr);
cairo_paint_with_alpha(cr, alpha);

绘制当前的路径,并为之添加 alpha 值(可实现淡出效果)。

–阅读次数(51)

发表评论

电子邮件地址不会被公开。

*