0

画面上で cairo を使用して draw_text を実行しようとしましたが、Mac OS X の計測器は、pango_layout_get_pixel_size または pango_layout_get_baseline が原因でポインターがぶら下がっていることを示しています。ドキュメントと例に示されているすべてのコードでは、最後に g_object_unref(layout) を実行する必要があります...しかし、それでも... itemized_state_init (ex の pango_layout_get_pixel_size 内) によって割り当てられたこれらのポインターは解放されません。

私は何か間違っていますか?

double posX = somevalue;
double posY = somevalue;
cairo_save (CurCairoState);
PangoLayout *layout = pango_cairo_create_layout (CurCairoState);
pango_layout_set_text (layout, text, -1);
pango_layout_set_font_description (layout, curCairoContext->font);
int width, height;

pango_layout_get_pixel_size (layout, &width, &height);

int b = (int)(pango_layout_get_baseline (layout) / PANGO_SCALE);

/* applying alignment attribute */
switch (curCairoContext->textAnchor) {
case GMiddle:
   posX = posX - (width / 2.0);
   break;
case GEnd:
   posX = posX - width;
   break;
}

cairo_move_to (CurCairoState, posX, posY - b);
pango_cairo_show_layout (CurCairoState, layout);

g_object_unref (layout);
cairo_restore (CurCairoState);

および Instrument での割り当ての結果

ここに画像の説明を入力

返信ありがとうございます!

編集: これは、G_SLICE=always-malloc G_DEBUG=gc-friendly を使用した後の新しいスクリーンショットです。それらのぶら下がっているポインターは、「楽器」のリークになりました

ここに画像の説明を入力

編集(解決策が見つかりません):

pango -1.40.3 のソースをダウンロードし、コンパイルして、独自のマーカーを使用してインストールしまし>ref_count=0を呼び出すとg_obejct_unref (レイアウト)

4

0 に答える 0