Re: How to scroll to a specific line



On 07/28/2018 08:29 AM, John Coppens wrote:
On Sat, 28 Jul 2018 07:42:16 -0400
Reuben Rissler <silrep emypeople net> wrote:

Thanks for the suggestion. Believe it or not, I had just arrived at
that same solution! I first tried to use GLib.timeout_add(), and
that worked too, if the time was larger than 300 - 400 ms, which is
on the verge of annoying. I then tried idle_add(), and I guess that
makes the 300-400ms 'built-in'.

How many lines of text do you have? With 500 - 700 lines of text, my 
scrolling is instantaneous. The scroll feature itself has a 'soft'
stop, but that is quite acceptable for me, as it is easier to adjust
my eyes to the change.

Reuben,

The code I'm using to test is short (about 250 lines). I'm using the system
to single step program execution, so I will do many steps. The problem at 
the moment is when loading the program, and scrolling to the start of
the program (the 'reset' position), but I see that the slowing down delay
is quite visible even when scrolling just one line with the arrow keys.

I have some Gtk-2 programs where the delay is not apparent. Maybe this
is configurable?

John

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


John,

  Maybe we can trade help. There are actually two functions you can use to
scroll the window to insure a text mark (usually the 'insert' mark) is visible
within your view, e.g.

(the following is from a find/replace widget I made)
https://github.com/drankinatty/gtkwrite/blob/master/gtk_findreplace.c#L920

            /* scroll window to mark to insure match is visible */
#ifndef TOMARK
            gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (app->view),
                                        app->last_pos, 0.0, TRUE, 0.95, 0.8);
#else
            gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (app->view),
                                                app->last_pos);
#endif

  The gtk_text_view_scroll_to_mark give you finer control over how far from
the bottom/top of your view the mark is displayed, the
gtk_text_view_scroll_mark_onscreen just makes sure it is visible (but
generally does a fine job) I left a #define in the code when I wrote it so I
could compare the behavior of each. I use the gtk_text_view_scroll_to_mark by
default. Both give instantaneous performance, even in a longer file (for me
that is 2000 - 5000 lines)

  Also note it is called from 'btnreplace_activate'
https://github.com/drankinatty/gtkwrite/blob/master/gtk_findreplace.c#L1001

and the scroll is wrapped within begin/end user action to prevent any
selection bound changes being momentarily visible during the find/replace
operation:

  gtk_text_buffer_begin_user_action (buffer);
     (code for gtk_text_view_scroll_to_mark
  gtk_text_buffer_end_user_action (buffer);

  You shouldn't notice any delay when implementing the scroll in any
reasonable size file.

-- 
David C. Rankin, J.D.,P.E.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]