Лично я не могу просто согласиться с утверждением, что создание пользовательских объектов легко.Это не просто, не для всех.
В основном потому, что этот вопрос помечен c
, и люди, которые не знают объектно-ориентированного программирования, могут быть незнакомы с его концепциями.
Это вопрос чтения и практики.
Так что не паникуйте, если вы не знаете, как, например, создать свой собственный виджет.
Самое простое решение, которое я могу придумать,не требует создания собственного рендерера, а просто говорит рендереру, как запрашивать данные рендеринга.
Просто подключите сигнал query-data на вашем GtkSourceGutterRenderer к обработчику сигналов, который выглядит следующим образом:
G_MODULE_EXPORT void gutter_renderer_query_data (GtkSourceGutterRenderer *renderer, GtkTextIter *start, GtkTextIter *end, GtkSourceGutterRendererState state)
{
GtkSourceView* view = NULL;
GtkSourceBuffer* buffer = NULL;
GSList* marks = NULL;
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(marks != NULL)
{
char *category = gtk_source_mark_get_category(marks->data);
if(!g_strcmp0(category, "CERTAIN_CATEGORY")) /* See note 1) */
pixbuf = gtk_image_get_pixbuf(gtk_image_new_from_file("icon_file_here")); /* See note 2) */
g_slist_free(marks);
}
g_object_set(G_OBJECT(renderer), "pixbuf", pixbuf, "yalign", 0.5, NULL);
}
Примечания :
GtkSourceMark использует интерфейс GtkSourceGutterRenderer, поэтому вы можете захотеть отфильтровать другие метки других источников с помощьюуказание категории метки источника, которая применяется к определенной строке.В противном случае ваш пользовательский рендерер pixbuf будет также отображаться слева от других исходных меток.
Вы должны указать точный pixbuf, который вы хотите визуализировать внутри.Для этого вам не нужно будет звонить gtk_source_gutter_renderer_pixbuf_set_pixbuf()
.Вы позволяете API выполнять обработку ресурсов.