2011-03-24 2 views
0

problème: J'ai un Textview avec différents Texttags dans différentes zones de texte sélectionnées. A la fin de l'édition, je voudrais rendre ce textbuffer/textview multi-marqué dans la zone de dessin. Mais je ne comprends pas comment je peux rendre le textview multi-tag utilisant la disposition de Pango/cairo?. Ce serait génial si je reçois un code Gtk +/Gtkmm qui montre le dessin de texte. EX: Disons que mon texte est "AAABBB" et dans ce AAA a l'ensemble de balises en gras et BBB est non gras et en italique set..now comment puis-je rendre ce genre de texte?rendu multi-attributs textview

Répondre

1

En supposant que vous êtes à la recherche d'un C++ exemple, vérifier si le code ci-dessous fonctionnerait pour vous:

#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; 
} 

Il y a aussi un exemple sur l'utilisation pango avec caire ici: Using Pango with Cairo

espérons que cette aide , salutations