PyGDK и PangoCairo: экземпляры PangoLogAttr сломаны? - PullRequest
0 голосов
/ 25 мая 2020

Я использую Python для взаимодействия с Pan go и PangoCairo. При извлечении атрибутов (PangoLogAttr) из объекта макета кажется, что экземпляры PangoLogAttr не инициализированы должным образом или что средства доступа к полю не работают. Вот пример кода в Python, который создает фиктивные значения:

import gi
gi.require_version('Pango', '1.0')
gi.require_version('PangoCairo', '1.0')
from gi.repository import Pango, PangoCairo

text = "hello.123 world"
ctx = Pango.FontMap.create_context(PangoCairo.FontMap.get_default())

layout = Pango.Layout(ctx)
desc = Pango.font_description_from_string("Monospace 16")
layout.set_font_description(desc)
layout.set_text(text, -1)

attrs = layout.get_log_attrs_readonly()
for i in range(0, len(attrs)-1):
  print(text[i], attrs[i].is_word_start)

Вывод:

h 4180 
e 81 
l 0
...

Соответствующий код C работает нормально:

#include <gdk/gdk.h>

const char* text = "hello.123 world";

void main() {
  PangoFontMap* map = pango_cairo_font_map_get_default();
  PangoContext* context = pango_font_map_create_context(map);
  PangoFontDescription* desc = pango_font_description_from_string("Monospace 16");

  PangoLayout* layout = pango_layout_new(context);

  pango_layout_set_font_description(layout, desc);
  pango_layout_set_text(layout, text, -1);

  gint num_attrs;
  const PangoLogAttr* attrs = pango_layout_get_log_attrs_readonly(layout, &num_attrs);

  for (int i=0; i < strlen(text); i++) {
    printf("%c %d\n", text[i], attrs[i].is_word_start);
  }

}

Есть ли у кого-нибудь еще такая проблема? Как я могу отследить ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...