Add mouse wheel support to UI list boxes

Allows scrolling server browser list and some other lists.
This commit is contained in:
Zack Middleton 2017-06-03 13:52:38 -05:00
parent 5592342b1b
commit db1198f6ea
2 changed files with 65 additions and 0 deletions

View file

@ -1034,6 +1034,50 @@ sfxHandle_t ScrollList_Key( menulist_s *l, int key )
}
return (menu_buzz_sound);
case K_MWHEELUP:
if( l->columns > 1 ) {
return menu_null_sound;
}
if (l->top > 0)
{
// if scrolling 3 lines would replace over half of the
// displayed items, only scroll 1 item at a time.
int scroll = l->height < 6 ? 1 : 3;
l->top -= scroll;
if (l->top < 0)
l->top = 0;
if (l->generic.callback)
l->generic.callback( l, QM_GOTFOCUS );
// make scrolling silent
return (menu_null_sound);
}
return (menu_buzz_sound);
case K_MWHEELDOWN:
if( l->columns > 1 ) {
return menu_null_sound;
}
if (l->top < l->numitems-l->height)
{
// if scrolling 3 items would replace over half of the
// displayed items, only scroll 1 item at a time.
int scroll = l->height < 6 ? 1 : 3;
l->top += scroll;
if (l->top > l->numitems-l->height)
l->top = l->numitems-l->height;
if (l->generic.callback)
l->generic.callback( l, QM_GOTFOCUS );
// make scrolling silent
return (menu_null_sound);
}
return (menu_buzz_sound);
case K_KP_UPARROW:
case K_UPARROW:
if( l->curvalue == 0 ) {

View file

@ -1828,6 +1828,27 @@ qboolean Item_ListBox_HandleKey(itemDef_t *item, int key, qboolean down, qboolea
return qtrue;
}
}
// Use mouse wheel in vertical and horizontal menus.
// If scrolling 3 items would replace over half of the
// displayed items, only scroll 1 item at a time.
if ( key == K_MWHEELUP ) {
int scroll = viewmax < 6 ? 1 : 3;
listPtr->startPos -= scroll;
if (listPtr->startPos < 0) {
listPtr->startPos = 0;
}
return qtrue;
}
if ( key == K_MWHEELDOWN ) {
int scroll = viewmax < 6 ? 1 : 3;
listPtr->startPos += scroll;
if (listPtr->startPos > max) {
listPtr->startPos = max;
}
return qtrue;
}
// mouse hit
if (key == K_MOUSE1 || key == K_MOUSE2) {
if (item->window.flags & WINDOW_LB_LEFTARROW) {