From 7d0fb092a43ad34a85cc1e97a8638c4c1b059055 Mon Sep 17 00:00:00 2001 From: Ilia Maslakov Date: Thu, 25 Mar 2010 11:51:12 +0300 Subject: [PATCH] Ticket #2086 (viewer: incorrect scroll down/up in wrap mode) fixed: scroll down/scroll up in wrap mode. Signed-off-by: Ilia Maslakov fixed: scroll up in wrap mode. Signed-off-by: Andrew Borodin --- src/viewer/lib.c | 2 ++ src/viewer/move.c | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/viewer/lib.c b/src/viewer/lib.c index 13c53ce37..6982b8f32 100644 --- a/src/viewer/lib.c +++ b/src/viewer/lib.c @@ -91,6 +91,8 @@ mcview_toggle_magic_mode (mcview_t * view) void mcview_toggle_wrap_mode (mcview_t * view) { + if (view->text_wrap_mode) + view->dpy_start = mcview_bol (view, view->dpy_start); view->text_wrap_mode = !view->text_wrap_mode; view->dpy_bbar_dirty = TRUE; view->dirty++; diff --git a/src/viewer/move.c b/src/viewer/move.c index 28a1478d8..27b24075a 100644 --- a/src/viewer/move.c +++ b/src/viewer/move.c @@ -108,12 +108,21 @@ mcview_move_up (mcview_t * view, off_t lines) off_t i; for (i = 0; i < lines; i++) { - new_offset = mcview_bol (view, view->dpy_start); + off_t cur_bol; + cur_bol = new_offset = mcview_bol (view, view->dpy_start); if (new_offset > 0) new_offset--; new_offset = mcview_bol (view, new_offset); if (new_offset < 0) new_offset = 0; + if (view->text_wrap_mode) + { + size_t last_row_length = (view->dpy_start - new_offset) % view->data_area.width; + if (last_row_length != 0 && cur_bol == view->dpy_start) + new_offset = max (new_offset, view->dpy_start - last_row_length); + else + new_offset = max (new_offset, view->dpy_start - view->data_area.width); + } view->dpy_start = new_offset; } } @@ -149,6 +158,8 @@ mcview_move_down (mcview_t * view, off_t lines) { off_t new_offset; new_offset = mcview_eol (view, view->dpy_start); + if (view->text_wrap_mode) + new_offset = min (new_offset, view->dpy_start + view->data_area.width); view->dpy_start = new_offset; } }