0

問題: 選択したさまざまなテキスト領域にさまざまな Texttags を持つ Textview があります。編集の最後に、このマルチタグ付きテキストバッファ/テキストビューを描画エリアにレンダリングしたいと思います。しかし、Pango/cairo レイアウトを使用してマルチタグ付きテキストビューをレンダリングする方法がわかりません。テキストの描画を示す Gtk+/Gtkmm コードを入手できれば幸いです。

例: 私のテキストが「AAABBB」で、この AAA には太字のタグ セットがあり、BBB には非太字でイタリック体のセットがあるとします。

4

1 に答える 1

1

C ++の例を探していると仮定して、以下のコードが機能するかどうかを確認します。

#include <gtk/gtk.h>

static gboolean on_expose_event_0(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
    GdkScreen *screen = gdk_drawable_get_screen(widget->window);
    PangoRenderer *renderer = gdk_pango_renderer_get_default (screen);
    GdkGC *gc = gdk_gc_new(widget->window);

    gdk_pango_renderer_set_drawable(GDK_PANGO_RENDERER (renderer), widget->window);
    gdk_pango_renderer_set_gc(GDK_PANGO_RENDERER (renderer), gc);

    PangoContext *context = gdk_pango_context_get_for_screen (screen);
    PangoLayout *layout = pango_layout_new (context);

    pango_layout_set_markup(layout, "<b>AAA</b><i>bbb</i>", -1);

    PangoFontDescription *font = pango_font_description_from_string("Times 20");
    pango_layout_set_font_description(layout, font);
    pango_font_description_free(font);

    pango_renderer_draw_layout (renderer, layout, 1, 1);

    gdk_pango_renderer_set_drawable(GDK_PANGO_RENDERER (renderer), NULL);
    gdk_pango_renderer_set_gc(GDK_PANGO_RENDERER (renderer), NULL);

    g_object_unref(layout);
    g_object_unref(context);
    g_object_unref(gc);

    return FALSE;
}

int main( int argc, char *argv[])
{
    GtkWidget *window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK);

    g_signal_connect(window, "expose-event", G_CALLBACK(on_expose_event_0), NULL);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_title(GTK_WINDOW(window), "pango test");
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
    gtk_widget_set_app_paintable(window, TRUE);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

ここにカイロでパンゴを使用する例もあります:カイロでパンゴを使用する

これがお役に立てば幸いです

于 2011-03-27T02:48:13.797 に答える