【发布时间】:2015-08-03 13:26:01
【问题描述】:
在我的应用程序中,我使用 Pango 和 Cairo 创建文本纹理。这些纹理的宽度是固定的,但应该缩放它们的高度以适应文本内容。在这种情况下,父对象会缩放它们的高度以匹配文本。
问题是,我一直在初始化 Pango 和 Cairo 的方式不允许这样做。目前,系统由:
cairo_surface_t* cairoSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, sizeX, sizeY );
cairo_t* cairoContext = cairo_create( cairoSurface );
PangoLayout* pangoLayout = pango_cairo_create_layout( cairoContext );
它固定了高度,至少是表面的高度——这是我不想做的事情,至少不是一直都不想做。
我的理解是,如果没有指定布局高度,它会自动缩放高度,然后可以通过pango_layout_get_size()找到。我想先创建布局,然后使用此函数的输出创建表面。
但是,pango_cairo_create_layout() 要求已创建表面,我一直无法找到通过 Cairo 从 pango_layout_new() 渲染布局的方法。 API 文档中的渲染函数之一 pango_cairo_update_layout() 指定必须使用 pango_cairo_create_layout() 来创建布局;然而,更重要的功能pango_cairo_show_layout() 没有指出这样的要求,我不确定这是否意味着允许任何 Pango 布局。虽然我可以测试它是否有效,但我担心反复试验可能会导致我出现未定义的行为。
我觉得自己陷入了先有鸡还是先有蛋的困境,Pango 的文档主要是 API 参考,几乎没有解释该库的用途。有没有办法正确地做到这一点?
【问题讨论】:
标签: c++ text cairo pango pangocairo