gpt4 book ai didi

c++ - PangoLayout中忽略的新行

转载 作者:行者123 更新时间:2023-12-02 10:29:56 26 4
gpt4 key购买 nike

我正在开发一个程序,其中使用PangoLayout进行文本布局,使用Cairo进行渲染,但是我遇到了多行文本(或包含换行符的文本)的问题。
看来Pango会在任何换行符后截断文本。 pango_layout_get_extents()的结果似乎只包含第一行(我已经测试过在第一行之后包含很长的行)。 pango_cairo_show_layout()也仅呈现第一行。我试过使用\n\r\r\n作为换行符,但均无效。
奇怪的是,pango_layout_get_line_count()报告正确的行数。
这是我用来创建PangoLayout的代码:

PangoLayout *layout = pango_layout_new(_pango_context.get());

pango_layout_set_text(
layout, reinterpret_cast<const char*>(text.data()), static_cast<int>(text.size())
);
logger::get().log_debug(CP_HERE) << "line count: " << pango_layout_get_line_count(layout);

{ // set font
PangoFontDescription *desc = pango_font_description_new();
pango_font_description_set_family(desc, reinterpret_cast<const char*>(font.family.c_str()));
pango_font_description_set_style(desc, _details::cast_font_style(font.style));
pango_font_description_set_weight(desc, _details::cast_font_weight(font.weight));
pango_font_description_set_stretch(desc, _details::cast_font_stretch(font.stretch));
pango_font_description_set_size(desc, pango_units_from_double(font.size));
pango_layout_set_font_description(layout, desc);
pango_font_description_free(desc);
}

pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE);
pango_layout_set_single_paragraph_mode(layout, false);

// horizontal wrapping
if (wrap == wrapping_mode::none) {
// FIXME alignment won't work for this case
pango_layout_set_width(layout, -1); // disable wrapping
} else {
pango_layout_set_width(layout, pango_units_from_double(size.x));
pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
}
pango_layout_set_alignment(layout, _details::cast_horizontal_alignment(halign));

pango_layout_set_height(layout, pango_units_from_double(size.y));
// TODO vertical alignment

{ // set color
auto attr_list = _details::make_gtk_object_ref_give(pango_attr_list_new());
pango_attr_list_insert(attr_list.get(), pango_attr_foreground_new(
_details::cast_color_component(c.r),
_details::cast_color_component(c.g),
_details::cast_color_component(c.b)
));
pango_attr_list_insert(
attr_list.get(), pango_attr_foreground_alpha_new(_details::cast_color_component(c.a))
);
pango_layout_set_attributes(layout, attr_list.get());
}
这是 the full source on Github
我在Windows上使用Pango的 vcpkg版本。我相信是我所缺少的导致问题的原因。感谢您的帮助。

最佳答案

经过一番调查后发现,由于我使用的是PANGO_ELLIPSIZE_NONE,所以是the behavior of pango_layout_set_height() is undefinied if height is not -1

关于c++ - PangoLayout中忽略的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62627448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com