gpt4 book ai didi

c++ - 呈现多属性 TextView

转载 作者:行者123 更新时间:2023-11-28 08:22:08 25 4
gpt4 key购买 nike

问题:我有一个 Textview,在不同的选定文本区域中有不同的 Texttag。在编辑结束时,我想将这个多标记的 textbuffer/textview 渲染到 drawingarea 中。但我不知道如何使用 Pango/cairo 布局渲染多标记的 textview?。如果我能得到任何显示文本绘图的 Gtk+/Gtkmm 代码,那就太好了。

例如:假设我的文字是“AAABBB”,在这个 AAA 中有粗体标记集,​​而 BBB 是非粗体和斜体集..现在我该如何呈现这种文本?

最佳答案

假设您正在寻找一个 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;
}

这里还有一个使用 pango 和 cairo 的例子:Using Pango with Cairo

希望这对你有帮助,问候

关于c++ - 呈现多属性 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5415204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com