]> uap-core.de Git - note.git/commitdiff
replace bullet points with custom widget
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 23 Apr 2025 19:45:20 +0000 (21:45 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 23 Apr 2025 19:45:20 +0000 (21:45 +0200)
application/gtk-text.c

index c0626b13280c8cb0b82bfe6bedc4f7157e932cb3..816da351666255fbebea598395906a54c80dda9b 100644 (file)
 #include <ctype.h>
 #include <string.h>
 
+#include <pango/pango.h>
+
+#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);
 }