使用 pango_layout 时带空格的文本拆分为新行
Text with spaces split to new line when using pango_layout
我是嵌入式 Linux 的新手。我正在尝试显示不同对齐方式的字符串文本。但是当我使用 Pango 时。对于其中没有 space 个字符的单个单词,它正确对齐。但是我的一些字符串包含 spaces 来分隔单词。但是在使用 pango_layout 时它会对齐新行。
我是 运行 我在 Ubuntu 中的应用程序,使用 GCC 作为编译器,系统包含目录显示 pongo-1.0。
我的代码如下
pLayOut = pango_cairo_create_layout(pCntxt);
pango_layout_set_text(pLayOut, "Sample text #1", -1);
desc = pango_font_description_from_string(font);
pango_layout_set_font_description(pLayOut, desc);
pango_font_description_free(desc);
cairo_set_source_rgb(pCntxt, rgbRed,rgbGreen, rgbBlue);
//Set width of the layout to align correctly
cairo_text_extents(pCntxt, "Sample text #1", &extents);
pango_layout_set_width(pLayOut, extents.width);
cairo_move_to(pCntxt, pPar->tpUlX, pPar->tpUlY);
pango_layout_set_alignment(pLayOut, pPar->tpAlign);
pango_cairo_update_layout(pCntxt, pLayOut);
pango_cairo_show_layout(pCntxt, pLayOut);
左对齐的输出
Sample
text
#1
右对齐输出
Sample
text
#1
如何使用 Pango 布局将其绘制在一行中?我在 Pango 布局中尝试了其他几个选项,但没有成功
我想要这样的文字
Sample text #1//Using left align
Sample text #1 //Using right align
X,Y location here
只需删除您对 pango_layout_set_width
的通话即可。
默认值是-1
,意思是没有限制,你设置错了,因为你需要设置Pango单位的值。有关 Pango 单位的更多信息,请参阅 https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html#pango-units-from-double and https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html#PANGO-SCALE:CAPS。
出现您所看到的行为是因为您给 Pango 的 space 像素不足一个像素,它会尽力使文本适合。
在编辑中,您将此添加到问题中:
I want my text like this
Sample text #1//Using left align
Sample text #1 //Using right align
X,Y location here
这不是开罗的对齐方式。想象一张 sheet 的纸,上面写着“你好”。 Left-alignment 表示这是写在纸的左边缘附近。 Right-alignment指的是右边。
作为一个'image',其中|
指的是纸张的边缘:
| Hello |
| Hello |
更技术一点:左边缘由 X/Y 位置指定。右边缘相对于宽度由右边缘指定。所以,左边是 x
,右边是 x+width
。
要执行您要求的右对齐样式,您必须自己计算正确的位置。您可以使用 pango_layout_get_pixel_extents()
来做到这一点。您需要逻辑范围(第二个参数)。然后您想要在 x-width
的 x 位置绘制文本。这应该会产生您正在寻找的对齐方式。
我是嵌入式 Linux 的新手。我正在尝试显示不同对齐方式的字符串文本。但是当我使用 Pango 时。对于其中没有 space 个字符的单个单词,它正确对齐。但是我的一些字符串包含 spaces 来分隔单词。但是在使用 pango_layout 时它会对齐新行。 我是 运行 我在 Ubuntu 中的应用程序,使用 GCC 作为编译器,系统包含目录显示 pongo-1.0。
我的代码如下
pLayOut = pango_cairo_create_layout(pCntxt);
pango_layout_set_text(pLayOut, "Sample text #1", -1);
desc = pango_font_description_from_string(font);
pango_layout_set_font_description(pLayOut, desc);
pango_font_description_free(desc);
cairo_set_source_rgb(pCntxt, rgbRed,rgbGreen, rgbBlue);
//Set width of the layout to align correctly
cairo_text_extents(pCntxt, "Sample text #1", &extents);
pango_layout_set_width(pLayOut, extents.width);
cairo_move_to(pCntxt, pPar->tpUlX, pPar->tpUlY);
pango_layout_set_alignment(pLayOut, pPar->tpAlign);
pango_cairo_update_layout(pCntxt, pLayOut);
pango_cairo_show_layout(pCntxt, pLayOut);
左对齐的输出
Sample
text
#1
右对齐输出
Sample
text
#1
如何使用 Pango 布局将其绘制在一行中?我在 Pango 布局中尝试了其他几个选项,但没有成功
我想要这样的文字
Sample text #1//Using left align
Sample text #1 //Using right align
X,Y location here
只需删除您对 pango_layout_set_width
的通话即可。
默认值是-1
,意思是没有限制,你设置错了,因为你需要设置Pango单位的值。有关 Pango 单位的更多信息,请参阅 https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html#pango-units-from-double and https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html#PANGO-SCALE:CAPS。
出现您所看到的行为是因为您给 Pango 的 space 像素不足一个像素,它会尽力使文本适合。
在编辑中,您将此添加到问题中:
I want my text like this
Sample text #1//Using left align Sample text #1 //Using right align X,Y location here
这不是开罗的对齐方式。想象一张 sheet 的纸,上面写着“你好”。 Left-alignment 表示这是写在纸的左边缘附近。 Right-alignment指的是右边。
作为一个'image',其中|
指的是纸张的边缘:
| Hello |
| Hello |
更技术一点:左边缘由 X/Y 位置指定。右边缘相对于宽度由右边缘指定。所以,左边是 x
,右边是 x+width
。
要执行您要求的右对齐样式,您必须自己计算正确的位置。您可以使用 pango_layout_get_pixel_extents()
来做到这一点。您需要逻辑范围(第二个参数)。然后您想要在 x-width
的 x 位置绘制文本。这应该会产生您正在寻找的对齐方式。