個人的には、カスタム オブジェクトを作成するのは簡単だという主張に単純に同意することはできません。誰にとっても簡単ではありません。
主に、この質問にはタグが付けられc
ており、オブジェクト指向プログラミングを知らない人はその概念に慣れていない可能性があるためです。
読んで実践することです。
たとえば、独自のウィジェットを作成する方法がわからない場合でも、慌てる必要はありません。
私が考えることができる最も簡単な解決策は、独自のレンダラーを作成することではなく、レンダラーにレンダリング データのクエリ方法を指示することです。
GtkSourceGutterRenderer のquery-dataシグナルを、次のようなシグナル ハンドラーに接続するだけです。
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 にリソース処理を任せます。