From 4ec232d2621c5dec285b019a7c565621ee83577e Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Sat, 28 Feb 2009 21:39:55 +0330 Subject: [PATCH] txtwin: use adjustments for scrolling --- txtwin.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/txtwin.c b/txtwin.c index 2bdd773..9a13eb7 100644 --- a/txtwin.c +++ b/txtwin.c @@ -10,6 +10,7 @@ struct txtwin { GtkWidget *main; /* A GtkEntry */ GtkWidget *bar; + GtkAdjustment *adjst; }; static void on_window_destroy(GtkWidget *widget, gpointer data) @@ -17,18 +18,17 @@ static void on_window_destroy(GtkWidget *widget, gpointer data) gtk_main_quit(); } -static void scroll(GtkTextView *view, float amount) +static void scroll(struct txtwin *tw, int count) { - GdkRectangle rect; - GtkTextIter iter; - GtkTextBuffer *buffer; - int y; - buffer = gtk_text_view_get_buffer(view); - gtk_text_view_get_visible_rect(view, &rect); - y = rect.y + amount * rect.height; - gtk_text_view_get_iter_at_location(view, &iter, 0, y); - gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(view), &iter, - 0.0, TRUE, 0, 0); + int val = gtk_adjustment_get_value(tw->adjst); + int max = gtk_adjustment_get_upper(tw->adjst) - + gtk_adjustment_get_page_size(tw->adjst); + val += count * gtk_adjustment_get_step_increment(tw->adjst); + if (val > max) + val = max; + if (val < 0) + val = 0; + gtk_adjustment_set_value(tw->adjst, val); } static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, @@ -37,10 +37,10 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, struct txtwin *tw = data; switch(event->keyval) { case GDK_j: - scroll(GTK_TEXT_VIEW(tw->main), 0.05); + scroll(tw, 1); break; case GDK_k: - scroll(GTK_TEXT_VIEW(tw->main), -0.05); + scroll(tw, -1); break; case GDK_q: gtk_main_quit(); @@ -55,7 +55,6 @@ struct txtwin *txtwin_alloc() { GtkWidget *window; GtkWidget *vbox; - GtkTextBuffer *buffer; struct txtwin *tw = xmalloc(sizeof(struct txtwin)); memset(tw, 0, sizeof(*tw)); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -75,8 +74,9 @@ struct txtwin *txtwin_alloc() GTK_WRAP_WORD); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tw->main), FALSE); - /* write something */ - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tw->main)); + /* add the adjustment */ + tw->adjst = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 9, 10)); + gtk_widget_set_scroll_adjustments(tw->main, NULL, tw->adjst); /* create the minibuffer */ tw->bar = gtk_entry_new(); -- 2.11.4.GIT