Add a scroll bar to the addons menu. Should hopefully make the temperature gauge a little less problematic...

This commit is contained in:
toaster 2018-09-23 13:22:00 +01:00
parent 6cc7f97d8a
commit 2e158f2c21

View file

@ -4530,8 +4530,9 @@ static boolean M_AddonsRefresh(void)
static void M_DrawAddons(void) static void M_DrawAddons(void)
{ {
INT32 x, y; INT32 x, y;
ssize_t i, max; ssize_t i, m;
const UINT8 *flashcol = NULL; const UINT8 *flashcol = NULL;
UINT8 hilicol;
// hack - need to refresh at end of frame to handle addfile... // hack - need to refresh at end of frame to handle addfile...
if (refreshdirmenu & M_AddonsRefresh()) if (refreshdirmenu & M_AddonsRefresh())
@ -4565,26 +4566,45 @@ static void M_DrawAddons(void)
x = currentMenu->x; x = currentMenu->x;
y = currentMenu->y + 1; y = currentMenu->y + 1;
hilicol = V_GetStringColormap(highlightflags)[120];
V_DrawString(x-21, (y - 16) + (lsheadingheight - 12), highlightflags|V_ALLOWLOWERCASE, M_AddonsHeaderPath()); V_DrawString(x-21, (y - 16) + (lsheadingheight - 12), highlightflags|V_ALLOWLOWERCASE, M_AddonsHeaderPath());
V_DrawFill(x-21, (y - 16) + (lsheadingheight - 3), (MAXSTRINGLENGTH*8+6 - 1), 1, V_GetStringColormap(highlightflags)[120]); V_DrawFill(x-21, (y - 16) + (lsheadingheight - 3), MAXSTRINGLENGTH*8+6, 1, hilicol);
V_DrawFill(x-21 + (MAXSTRINGLENGTH*8+6 - 1), (y - 16) + (lsheadingheight - 3), 1, 1, 30);
V_DrawFill(x-21, (y - 16) + (lsheadingheight - 2), MAXSTRINGLENGTH*8+6, 1, 30); V_DrawFill(x-21, (y - 16) + (lsheadingheight - 2), MAXSTRINGLENGTH*8+6, 1, 30);
V_DrawFill(x - 21, y - 1, MAXSTRINGLENGTH*8+6, (BASEVIDHEIGHT - currentMenu->y + 2) - (y - 1), 239); m = (BASEVIDHEIGHT - currentMenu->y + 2) - (y - 1);
V_DrawFill(x - 21, y - 1, MAXSTRINGLENGTH*8+6, m, 239);
// scrollbar!
if (sizedirmenu <= (2*numaddonsshown + 1))
i = 0;
else
{
ssize_t q = m;
m = ((2*numaddonsshown + 1) * m)/sizedirmenu;
if (dir_on[menudepthleft] <= numaddonsshown) // all the way up
i = 0;
else if (sizedirmenu <= (dir_on[menudepthleft] + numaddonsshown + 1)) // all the way down
i = q-m;
else
i = ((dir_on[menudepthleft] - numaddonsshown) * (q-m))/(sizedirmenu - (2*numaddonsshown + 1));
}
V_DrawFill(x + MAXSTRINGLENGTH*8+5 - 21, (y - 1) + i, 1, m, hilicol);
// get bottom... // get bottom...
max = dir_on[menudepthleft] + numaddonsshown + 1; m = dir_on[menudepthleft] + numaddonsshown + 1;
if (max > (ssize_t)sizedirmenu) if (m > (ssize_t)sizedirmenu)
max = sizedirmenu; m = sizedirmenu;
// then top... // then top...
i = max - (2*numaddonsshown + 1); i = m - (2*numaddonsshown + 1);
// then adjust! // then adjust!
if (i < 0) if (i < 0)
{ {
if ((max -= i) > (ssize_t)sizedirmenu) if ((m -= i) > (ssize_t)sizedirmenu)
max = sizedirmenu; m = sizedirmenu;
i = 0; i = 0;
} }
@ -4594,7 +4614,7 @@ static void M_DrawAddons(void)
if (skullAnimCounter < 4) if (skullAnimCounter < 4)
flashcol = V_GetStringColormap(highlightflags); flashcol = V_GetStringColormap(highlightflags);
for (; i < max; i++) for (; i < m; i++)
{ {
UINT32 flags = V_ALLOWLOWERCASE; UINT32 flags = V_ALLOWLOWERCASE;
if (y > BASEVIDHEIGHT) break; if (y > BASEVIDHEIGHT) break;
@ -4626,7 +4646,7 @@ static void M_DrawAddons(void)
y += 16; y += 16;
} }
if (max != (ssize_t)sizedirmenu) if (m != (ssize_t)sizedirmenu)
V_DrawString(19, y-12 + (skullAnimCounter/5), highlightflags, "\x1B"); V_DrawString(19, y-12 + (skullAnimCounter/5), highlightflags, "\x1B");
y = BASEVIDHEIGHT - currentMenu->y + 1; y = BASEVIDHEIGHT - currentMenu->y + 1;