Fix bug #19060 with inaccurate pixel-based scrolling.

src/window.c (window_scroll_pixel_based): Avoid truncation/rounding
 errors in computing the number of pixels to scroll.  Suggested by
 Kelly Dean <kelly@prtime.org>.
This commit is contained in:
Eli Zaretskii 2014-11-15 19:04:17 +02:00
parent d4fceca9cd
commit 1fb97e79d2
2 changed files with 19 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2014-11-15 Eli Zaretskii <eliz@gnu.org>
* window.c (window_scroll_pixel_based): Avoid truncation/rounding
errors in computing the number of pixels to scroll. Suggested by
Kelly Dean <kelly@prtime.org>. (Bug#19060)
2014-11-15 Jan Djärv <jan.h.d@swipnet.se>
* nsmenu.m (update_frame_tool_bar): If tool bar changes height,

View file

@ -4955,9 +4955,14 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, int noerror)
{
int px;
int dy = frame_line_height;
/* In the below we divide the window box height by the
frame's line height to make the result predictable when
the window box is not an integral multiple of the line
height. This is important to ensure we get back to the
same position when scrolling up, then down. */
if (whole)
dy = max ((window_box_height (w)
- next_screen_context_lines * dy),
dy = max ((window_box_height (w) / dy
- next_screen_context_lines) * dy,
dy);
dy *= n;
@ -5039,8 +5044,12 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, int noerror)
{
ptrdiff_t start_pos = IT_CHARPOS (it);
int dy = frame_line_height;
dy = max ((window_box_height (w)
- next_screen_context_lines * dy),
/* In the below we divide the window box height by the frame's
line height to make the result predictable when the window
box is not an integral multiple of the line height. This is
important to ensure we get back to the same position when
scrolling up, then down. */
dy = max ((window_box_height (w) / dy - next_screen_context_lines) * dy,
dy) * n;
/* Note that move_it_vertically always moves the iterator to the