1

当我将 pango lib 和 cairo 结合起来时,我遇到了 cairo_debug_reset_static_data() 函数的问题,因为当它被调用时我得到了以下断言。

绘制:cairo-hash.c:217:_cairo_hash_table_destroy:断言“hash_table->live_entries == 0”失败。

这是我从以下帖子中获取的代码:有人遇到类似问题但他们没有在那里共享任何有效的解决方案(我已经尝试过帖子中的解决方案,但它不起作用)。如果我们删除注释行,那么就会有断言。

#include <cairo.h>
#include <pango/pangocairo.h>

int
main (int argc, char *argv[])
{
    cairo_surface_t *surface;
    cairo_t *context;

    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 120, 120);
    context = cairo_create(surface);

    PangoRectangle extents;
    PangoLayout *layout;
    PangoFontDescription *desc;

    layout = pango_cairo_create_layout (context);

    desc = pango_font_description_from_string("Inconsolata 12");
    pango_layout_set_font_description(layout, desc);
    pango_font_description_free(desc);

    pango_layout_set_markup(layout, "hello", -1);
    //pango_layout_get_pixel_extents(layout, &extents, NULL);

    //pango_cairo_show_layout(context, layout);

    g_object_unref(layout);
    cairo_destroy(context);
    cairo_surface_destroy(surface);

    cairo_debug_reset_static_data();

    return(0);
}

我试图解决这个问题,也搜索了他们的文档,但找不到任何有用的东西。一些对pangocairo有专业知识的人,请给我一些启发并指出正确的方向。

谢谢

4

1 回答 1

0

这是我从以下帖子中获取的代码:其中有人遇到了类似的问题,但他们没有在那里分享任何可行的解决方案。

嗯,你看到那个帖子的回复了吗?它包含修复此断言失败所需了解的所有内容:

pango_cairo_font_map_set_default(NULL);在调用之前 添加调用cairo_debug_reset_static_data();。这使得 PangoCairo 不再引用它仍然存在的字体。

于 2019-11-15T15:43:51.330 回答