diff src/popupwin.c @ 18074:364a9be6a21e v8.1.2032

patch 8.1.2032: scrollbar thumb wrong in popup window Commit: https://github.com/vim/vim/commit/076d98839c4f6f15ae3563263057aa99ff04a869 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 14 22:23:29 2019 +0200 patch 8.1.2032: scrollbar thumb wrong in popup window Problem: Scrollbar thumb wrong in popup window. Solution: Adjust thumb size and position when scrolled.
author Bram Moolenaar <Bram@vim.org>
date Sat, 14 Sep 2019 22:30:03 +0200
parents 56032a704448
children 9c3347b21b89
line wrap: on
line diff
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -3363,10 +3363,12 @@ update_popups(void (*win_update)(win_T *
 	// Compute scrollbar thumb position and size.
 	if (wp->w_has_scrollbar)
 	{
-	    linenr_T linecount = wp->w_buffer->b_ml.ml_line_count;
-
-	    sb_thumb_height = (wp->w_height * wp->w_height + linecount / 2)
-								   / linecount;
+	    linenr_T	linecount = wp->w_buffer->b_ml.ml_line_count;
+	    int		height = wp->w_height;
+
+	    sb_thumb_height = (height * height + linecount / 2) / linecount;
+	    if (wp->w_topline > 1 && sb_thumb_height == height)
+		--sb_thumb_height;  // scrolled, no full thumb
 	    if (sb_thumb_height == 0)
 		sb_thumb_height = 1;
 	    if (linecount <= wp->w_height)
@@ -3377,6 +3379,9 @@ update_popups(void (*win_update)(win_T *
 				+ (linecount / wp->w_height) / 2)
 				* (wp->w_height - sb_thumb_height)
 						  / (linecount - wp->w_height);
+	    if (wp->w_topline > 1 && sb_thumb_top == 0 && height > 1)
+		sb_thumb_top = 1;  // show it's scrolled
+
 	    if (wp->w_scrollbar_highlight != NULL)
 		attr_scroll = syn_name2attr(wp->w_scrollbar_highlight);
 	    else