diff options
author | Owen Taylor <otaylor@redhat.com> | 1999-02-21 18:02:14 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-02-21 18:02:14 +0000 |
commit | 58e63f08aeb2a9496b9ce62b44567ea13185f3f3 (patch) | |
tree | f508699e7ea28aee9c513d1f53eab261ca09d709 /gtk/gtktext.c | |
parent | b0558e089e8e06a4ed2e28ee79e2c88f1c4c0570 (diff) | |
download | gtk+-58e63f08aeb2a9496b9ce62b44567ea13185f3f3.tar.gz |
Revise algorithm for scrolling backwards. This one might actually work
Sun Feb 21 11:39:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext.c (find_line_containing_point): Revise
algorithm for scrolling backwards. This one might actually
work with one-line-high Text widgets.
* gtk/gtkmain.c: Removed a misplaced comment, a few
formatting cleanups.
Diffstat (limited to 'gtk/gtktext.c')
-rw-r--r-- | gtk/gtktext.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 6e02d0b792..312c5b140e 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -3562,24 +3562,24 @@ find_line_containing_point (GtkText* text, guint point, gint height; text->current_line = NULL; - - if (!text->line_start_cache->next) - { - /* @@@ Its visible, right? */ - text->current_line = text->line_start_cache; - return; - } - - while ( ( scroll && (text->first_cut_pixels != 0) && - (CACHE_DATA(text->line_start_cache->next).start.index > point) ) || - ( (text->first_cut_pixels == 0) && - (CACHE_DATA(text->line_start_cache).start.index > point) ) ) + + TEXT_SHOW (text); + + /* Scroll backwards until the point is on screen + */ + while (CACHE_DATA(text->line_start_cache).start.index > point) + scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache))); + + /* Now additionally try to make sure that the point is fully on screen + */ + if (scroll) { - g_assert (text->line_start_cache->next); - scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next))); + while (text->first_cut_pixels != 0 && + text->line_start_cache->next && + CACHE_DATA(text->line_start_cache->next).start.index > point) + scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next))); } - - TEXT_SHOW (text); + gdk_window_get_size (text->text_area, NULL, &height); for (cache = text->line_start_cache; cache; cache = cache->next) |