我在C语言的gtk中使用cairo绘制图形。我使用cairo_show_text
来显示文字。定义中心对齐的中心点很容易。但我不知道如何使文本居中对齐。
问题是我不知道如何计算文本长度(我认为它也与字体大小有关)。如果我可以将文本设置为legth,我可以使用cairo_move_to
移动到适当的位置,然后按cairo_show_text
显示文本。
有任何建议或任何其他方法吗?
根据所遵循的liberforce的评论,解决方案是
/* howto_move: 0 -- cairo_move_to, 1 -- cairo_rel_move_to
* x, y is the coordinate of the point for center-align. Whether it is absolute
* or relative coordinate depends on `howto_move'
*/
void cairo_text_align_horizontal_center (cairo_t *cr, char *text, int if_vertical, int howto_move, double x, double y)
{
cairo_text_extents_t te;
double new_x, new_y;
cairo_text_extents(cr, text, &te);
if(!if_vertical)
{
new_x = x - (te.x_bearing + te.width / 2);
new_y = y;
}
else
{
new_x = x;
new_y = y + (te.x_bearing + te.width / 2);
}
if(howto_move == 0)
cairo_move_to(cr, new_x, new_y);
else
cairo_rel_move_to(cr, new_x, new_y);
cairo_save(cr);
if(!if_vertical)
cairo_rotate(cr, 0);
else
cairo_rotate(cr, - PI / 2.0);
cairo_show_text(cr, text);
cairo_restore(cr);
cairo_stroke(cr);
}
答案 0 :(得分:2)
查看cairo tutorial text alignment section。
请记住,对于文本,Cairo API有点受限。对于更高级的内容,您需要pangocairo。