diff options
author | LarsVomMars | 2021-04-27 15:27:27 +0200 |
---|---|---|
committer | LarsVomMars | 2021-04-27 15:27:27 +0200 |
commit | 60e7b5069d5936546356053f85008a5a02bb473a (patch) | |
tree | 72e30bf504bccc15f18f29fa2344bd22324b4267 | |
parent | efbbd5533e2d66dcfb6d360792793f23a8f4dd05 (diff) |
lol
-rw-r--r-- | src/gui.c | 16 | ||||
-rw-r--r-- | src/inc/gui.h | 3 | ||||
-rw-r--r-- | src/warnings.c | 14 |
3 files changed, 22 insertions, 11 deletions
@@ -72,7 +72,6 @@ static void gui_init_highlighter(void) GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); gtk_text_buffer_create_tag(buffer, "instr", "foreground", "#ff0000", NULL); gtk_text_buffer_create_tag(buffer, "regs", "foreground", "#00ff00", NULL); - gtk_text_buffer_create_tag(buffer, "warning", "background", "#ff0000", NULL); } void gui_unhighlight(void) @@ -140,7 +139,7 @@ static gchar *gui_show_tt(GtkSourceMarkAttributes *attributes, GtkSourceMark *ma return strdup(message); } -void gui_add_line_marker(int line_number, const char *message, const char *category, +void gui_add_line_marker(u32 line_number, const char *message, const char *name, const char *category, const char *icon, GdkRGBA rgba) { GtkSourceMarkAttributes *attributes = gtk_source_mark_attributes_new(); @@ -152,11 +151,19 @@ void gui_add_line_marker(int line_number, const char *message, const char *categ GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); gtk_text_buffer_get_iter_at_line(buffer, &iter, line_number); gtk_source_view_set_mark_attributes(GTK_SOURCE_VIEW(text_view), category, attributes, 10); - gtk_source_buffer_create_source_mark(GTK_SOURCE_BUFFER(buffer), message, category, &iter); + gtk_source_buffer_create_source_mark(GTK_SOURCE_BUFFER(buffer), name, category, &iter); g_signal_connect(G_OBJECT(attributes), "query-tooltip-text", G_CALLBACK(gui_show_tt), strdup(message)); } +void gui_remove_line_marker(const char *category) { + GtkTextIter start, end; + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); + + gtk_text_buffer_get_bounds(buffer, &start, &end); + gtk_source_buffer_remove_source_marks(GTK_SOURCE_BUFFER(buffer), &start, &end, category); +} + static u8 gui_save_file(char *fname, char *fdata) { FILE *f = fopen(fname, "w"); @@ -323,9 +330,6 @@ static void gui_activate(GtkApplication *app, gpointer data) gui_init_highlighter(); gui_call_syntax_highlighter(); - - GdkRGBA rgba = { 1, 0, 0, 0.3 }; - gui_add_line_marker(2, "Help", "hc", "dialog-error", rgba); } int gui_init(int argc, char *argv[]) diff --git a/src/inc/gui.h b/src/inc/gui.h index 8270623..39918ca 100644 --- a/src/inc/gui.h +++ b/src/inc/gui.h @@ -8,7 +8,8 @@ int gui_init(int argc, char *argv[]); void gui_show_warning(const char *text); void gui_show_info(const char *text); -void gui_add_line_marker(int line_number, const char *message, const char *category, const char *icon, GdkRGBA rgba); +void gui_add_line_marker(u32 line_number, const char *message, const char *name, const char *category, const char *icon, GdkRGBA rgba); +void gui_remove_line_marker(const char *category); void gui_unhighlight(void); void gui_unhighlight_name(const char *tag_name); diff --git a/src/warnings.c b/src/warnings.c index 8effbb2..da8d11b 100644 --- a/src/warnings.c +++ b/src/warnings.c @@ -13,6 +13,7 @@ struct warning { u8 exists; struct context ctx; char text[WARNING_LENGTH]; + char name[8]; }; static struct warning warnings[WARNING_COUNT] = { 0 }; @@ -32,18 +33,23 @@ void warnings_add(struct context *ctx, const char *fmt, ...) warning_index++; } -// TODO: Print somewhere else (e.g. next to line) +static void warnings_generate_name(u32 i) { + static u32 ctr = 0; + snprintf(warnings[i].name, 8, "%d", ctr++); +} + void warnings_print(void) { - gui_unhighlight_name("warning"); + gui_remove_line_marker("error"); for (u32 i = 0; i < WARNING_COUNT; i++) { if (!warnings[i].exists) continue; - /* gui_show_warning(warnings[i].text); */ printf("Line %d:%d: %s\n", warnings[i].ctx.line, warnings[i].ctx.column, warnings[i].text); - gui_highlight(warnings[i].ctx.column, warnings[i].ctx.line, 1, "warning"); + warnings_generate_name(i); + gui_add_line_marker(warnings[i].ctx.line - 1, warnings[i].name, warnings[i].text, "error", + "dialog-warning", (GdkRGBA){ 1, 0, 0, .3 }); } } |