curses clipped map 'scrollbars'
The position bars shown by curses when the map is clipped weren't being drawn as intended (integer arithmetic). Changing parentheses was enough to get it working, but it didn't handle the edge case where non-zero got rounded to 0 (so when map was panned down, the uppermost character of the vertical position bar still showed '*', falsely indicating that top of map was currently within view.
This commit is contained in:
@@ -624,9 +624,14 @@ curses_draw_map(int sx, int sy, int ex, int ey)
|
||||
vsb_bar.attr = A_NORMAL;
|
||||
|
||||
/* Horizontal scrollbar */
|
||||
if ((sx > 0) || (ex < (COLNO - 1))) {
|
||||
sbsx = (sx * ((long) (ex - sx + 1) / COLNO));
|
||||
sbex = (ex * ((long) (ex - sx + 1) / COLNO));
|
||||
if (sx > 0 || ex < (COLNO - 1)) {
|
||||
sbsx = (int) (((long) sx * (long) (ex - sx + 1)) / (long) COLNO);
|
||||
sbex = (int) (((long) ex * (long) (ex - sx + 1)) / (long) COLNO);
|
||||
|
||||
if (sx > 0 && sbsx == 0)
|
||||
++sbsx;
|
||||
if (ex < ROWNO - 1 && sbex == ROWNO - 1)
|
||||
--sbex;
|
||||
|
||||
for (count = 0; count < sbsx; count++) {
|
||||
write_char(mapwin, count + bspace, ey - sy + 1 + bspace, hsb_back);
|
||||
@@ -642,9 +647,14 @@ curses_draw_map(int sx, int sy, int ex, int ey)
|
||||
}
|
||||
|
||||
/* Vertical scrollbar */
|
||||
if ((sy > 0) || (ey < (ROWNO - 1))) {
|
||||
sbsy = (sy * ((long) (ey - sy + 1) / ROWNO));
|
||||
sbey = (ey * ((long) (ey - sy + 1) / ROWNO));
|
||||
if (sy > 0 || ey < (ROWNO - 1)) {
|
||||
sbsy = (int) (((long) sy * (long) (ey - sy + 1)) / (long) ROWNO);
|
||||
sbey = (int) (((long) ey * (long) (ey - sy + 1)) / (long) ROWNO);
|
||||
|
||||
if (sy > 0 && sbsy == 0)
|
||||
++sbsy;
|
||||
if (ey < ROWNO - 1 && sbey == ROWNO - 1)
|
||||
--sbey;
|
||||
|
||||
for (count = 0; count < sbsy; count++) {
|
||||
write_char(mapwin, ex - sx + 1 + bspace, count + bspace, vsb_back);
|
||||
|
||||
Reference in New Issue
Block a user