aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLarsVomMars2021-04-27 15:27:27 +0200
committerLarsVomMars2021-04-27 15:27:27 +0200
commit60e7b5069d5936546356053f85008a5a02bb473a (patch)
tree72e30bf504bccc15f18f29fa2344bd22324b4267
parentefbbd5533e2d66dcfb6d360792793f23a8f4dd05 (diff)
lol
-rw-r--r--src/gui.c16
-rw-r--r--src/inc/gui.h3
-rw-r--r--src/warnings.c14
3 files changed, 22 insertions, 11 deletions
diff --git a/src/gui.c b/src/gui.c
index aeab43b..020ed47 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -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 });
}
}