gpt4 book ai didi

c - GtkSourceGutter - 如何在特定行上呈现图标或文本

转载 作者:可可西里 更新时间:2023-11-01 11:23:44 25 4
gpt4 key购买 nike

我已插入自定义 gtk 源装订线渲染器 pixbuf,我想在特定行上渲染图标。

引用 API 指出该界面与 GtkTreeView 上的界面非常相似,但不适用于树模型。那么...如果 GtkSourceGutter 不适用于树模型,我应该如何将数据呈现到特定行?

我检查了整个库中的每个函数、每个建议的 api 和子对象,甚至没有任何提示。

只是没有意义。手册页说 GtkSourceGutterRendererPixbuf 用于在 CELL 中显示图标。执行 gtk_source_gutter_renderer_pixbuf_set_pixbuf(renderer, pixbuf); 将为装订线中的所有单元格呈现图标。如果唯一的方法是使用 cairo 手动绘制 pixbuf ..那些渲染器有什么意义?

如何使用 gtksourcegutterrenderer 渲染 pixbuf 在特定行


enter image description here

最佳答案

我没有使用过 GtkSourceView,但我可以给你一些线索。


GtkSourceView的作者是怎么做到的

首先,我们需要一些链接:

让我们从 GtkSourceGutterRendererPixbuf 开始。从它的 class_init 方法我们发现,它只覆盖了 draw 方法。它的唯一目的是渲染一个 pixbuf 或图标。纯绘图。

但是,GtkSourceGutterRenderer 文档说,有一个 query-data 信号可用于调整渲染器的内部状态。此时我们应该看一下继承自RendererPixbuf 的GtkSourceGutterRendererMarks。它不会覆盖 draw,但会覆盖 query_data(由于某些原因 GtkSourceGutterRendererClass 没有在文档中描述。我不知道为什么。)

/* Read my comments. */
static void
gutter_renderer_query_data (GtkSourceGutterRenderer *renderer,
GtkTextIter *start,
GtkTextIter *end,
GtkSourceGutterRendererState state)
{
GSList *marks;
GdkPixbuf *pixbuf = NULL;

view = GTK_SOURCE_VIEW (gtk_source_gutter_renderer_get_view (renderer));
buffer = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));

marks = gtk_source_buffer_get_source_marks_at_iter (buffer,
start,
NULL);

/* If there are marks, we find a pixbuf for one of them.
* Otherwise pixbuf is NULL. */
if (marks != NULL)
{
size = measure_line_height (view);
pixbuf = composite_marks (view, marks, size);

g_slist_free (marks);
}

/* Now tell parent class to render certain pixbuf
* It will render nothing if pixbuf is NULL. */
g_object_set (G_OBJECT (renderer),
"pixbuf", pixbuf,
NULL);
}

我的建议。

您想在某些行绘制标记(例如,想突出显示当前调试器行)。如果我是你,我会继承 RendererPixbuf,覆盖 query_data 并在 GtkTextIter *start 上使用 gtk_text_iter_get_line。看起来这是最低限度。

如有任何其他问题,请随时提出。

关于c - GtkSourceGutter - 如何在特定行上呈现图标或文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419673/

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