diff options
-rw-r--r-- | src/displaywindow.c | 49 | ||||
-rw-r--r-- | src/displaywindow.h | 2 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/displaywindow.c b/src/displaywindow.c index fe97f73..ecd946b 100644 --- a/src/displaywindow.c +++ b/src/displaywindow.c @@ -561,6 +561,32 @@ static void displaywindow_switch_page(GtkNotebook *notebook, GtkNotebookPage *pa } } +static void displaywindow_scrolltoend(DisplayWindow *dw) { + + GtkTextBuffer *buffer; + GtkTextIter iter; + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages)); + gtk_text_buffer_get_end_iter(buffer, &iter); + gtk_text_iter_set_line_offset(&iter, 0); + gtk_text_buffer_move_mark(buffer, dw->messages_mark, &iter); + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(dw->messages), dw->messages_mark, 0, TRUE, 1.0, 0.0); + +} + +static void displaywindow_message(DisplayWindow *dw, const char *text) { + + GtkTextBuffer *buffer; + GtkTextIter iter; + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages)); + gtk_text_buffer_get_end_iter(buffer, &iter); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, text, -1, "default", NULL); + + displaywindow_scrolltoend(dw); + +} + DisplayWindow *displaywindow_open(ControlContext *ctx) { const char *filename; @@ -609,6 +635,28 @@ DisplayWindow *displaywindow_open(ControlContext *ctx) { notebook = gtk_notebook_new(); gtk_box_pack_end(GTK_BOX(dw->bigvbox), notebook, TRUE, TRUE, 0); + GtkWidget *messages_scroll; + GdkColor colour; + GtkTextBuffer *buffer; + GtkTextIter iter; + + dw->messages = gtk_text_view_new(); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(dw->messages), GTK_WRAP_NONE); + messages_scroll = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(messages_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_container_add(GTK_CONTAINER(messages_scroll), GTK_WIDGET(dw->messages)); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(messages_scroll), GTK_SHADOW_IN); + gdk_color_parse("white", &colour); + gtk_widget_modify_bg(dw->messages, GTK_STATE_NORMAL, &colour); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages)); + gtk_text_buffer_create_tag(buffer, "default", "left_margin", 3, "right_margin", 3, "font", "Mono", NULL); + gtk_text_view_set_editable(GTK_TEXT_VIEW(dw->messages), FALSE); + gtk_text_buffer_get_end_iter(buffer, &iter); + dw->messages_mark = gtk_text_buffer_create_mark(buffer, NULL, &iter, FALSE); + GTK_WIDGET_UNSET_FLAGS(dw->messages, GTK_CAN_FOCUS); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), messages_scroll, gtk_label_new("Messages")); + displaywindow_message(dw, "DTR version "PACKAGE_VERSION", (c) 2007-2008 Thomas White and contributors\n\n"); + /* GL stuff */ glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if ( glconfig == NULL ) { @@ -651,6 +699,7 @@ DisplayWindow *displaywindow_open(ControlContext *ctx) { gtk_window_set_default_size(GTK_WINDOW(dw->window), 840, 800); gtk_widget_show_all(dw->window); + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1); return dw; diff --git a/src/displaywindow.h b/src/displaywindow.h index 052e7d3..a69e807 100644 --- a/src/displaywindow.h +++ b/src/displaywindow.h @@ -41,6 +41,8 @@ typedef struct dw_struct { GtkWidget *bigvbox; GtkWidget *drawing_area; GtkWidget *savecache_window; + GtkWidget *messages; + GtkTextMark *messages_mark; /* Low-level OpenGL stuff */ GLuint gl_list_id; /* Display list for "everything else" */ |