From 6677f128153aa5d3cb62cee52fa57503141233ca Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Wed, 23 Apr 2025 21:45:20 +0200 Subject: [PATCH] replace bullet points with custom widget --- application/gtk-text.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/application/gtk-text.c b/application/gtk-text.c index c0626b1..816da35 100644 --- a/application/gtk-text.c +++ b/application/gtk-text.c @@ -43,6 +43,10 @@ #include #include +#include + +#define TEXTVIEW_MARGIN 16 + // workaround for netbeans bug #define g_object_set g_object_set #define g_object_get_property g_object_get_property @@ -128,7 +132,7 @@ void editor_global_init() { void editor_init_textview(UiObject *obj, UIWIDGET textview) { gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_WORD_CHAR); - gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview), 16); + gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview), TEXTVIEW_MARGIN); NoteEditor *editor = malloc(sizeof(NoteEditor)); memset(editor, 0, sizeof(NoteEditor)); @@ -821,7 +825,7 @@ void init_tagtable(GtkTextTagTable *table) { gtk_text_tag_table_add(table, tag); tag = gtk_text_tag_new(EDITOR_STYLE_LIST0); - g_object_set(tag, "left-margin", 60, "right-margin", 60, "ident", 60, NULL); + g_object_set(tag, "left-margin", 40 + TEXTVIEW_MARGIN, NULL); g_object_set_data(G_OBJECT(tag), "set_style", (void*)tagstyle_list0); gtk_text_tag_table_add(table, tag); } @@ -1178,6 +1182,7 @@ void editor_set_paragraph_style(UiText *text, const char *style) { void editor_insert_list(UiText *text, UiBool oredered) { GtkTextBuffer *buffer = text->data1; NoteEditor *editor = g_object_get_data(text->obj, "editor"); + GtkTextView *textview = GTK_TEXT_VIEW(editor->textview); GtkTextMark *cursor = gtk_text_buffer_get_insert(buffer); if(!cursor) { @@ -1188,11 +1193,25 @@ void editor_insert_list(UiText *text, UiBool oredered) { gtk_text_buffer_get_iter_at_mark(buffer, &end, cursor); GtkTextMark *start_mark = gtk_text_buffer_create_mark(buffer, NULL, &end, TRUE); - - gtk_text_buffer_insert(buffer, &end, "•", -1); - gtk_text_buffer_get_iter_at_mark(buffer, &start, start_mark); - - gtk_text_buffer_apply_tag_by_name(buffer, EDITOR_STYLE_LIST0, &start, &end); + PangoContext *context = gtk_widget_get_pango_context(editor->textview); + PangoFontMetrics *metrics = pango_context_get_metrics(context, NULL, NULL); + + //int ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE; + int descent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE; + int height = pango_font_metrics_get_height(metrics) / PANGO_SCALE; + + //GtkWidget *widget = gtk_label_new("•"); + GtkWidget *widget = gtk_drawing_area_new(); // • + gtk_widget_set_size_request(widget, 40, height); + gtk_widget_add_css_class(widget, "ui_test"); + gtk_widget_set_margin_bottom(widget, -descent); + gtk_widget_set_margin_start(widget, -40); + + GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(buffer, &end); + gtk_text_view_add_child_at_anchor(textview, widget, anchor); + + gtk_text_buffer_get_iter_at_mark(buffer, &start, start_mark); + gtk_text_buffer_apply_tag_by_name(buffer, EDITOR_STYLE_LIST0, &start, &end); gtk_text_buffer_delete_mark(buffer, start_mark); } -- 2.43.5