Mouse wheel now can scroll through menu/listbox items; Right mouse button closes a menu (without the need of these ugly close boxes); Also added mouse-closing capabilities to credits, scores and kconfig menus; While being in UDP Netgames list, override keycode at PAGEUP/DOWN keypress to only flip pages without modifying citem also added messagebox showing TXT_INVALID_CHOICE when invalid netgame was chosen
This commit is contained in:
parent
21adec7f5c
commit
70bf7e8694
|
@ -1,5 +1,9 @@
|
|||
D1X-Rebirth Changelog
|
||||
|
||||
20110102
|
||||
--------
|
||||
main/credits.c, main/kconfig.c, main/menu.c, main/net_udp.c, main/newmenu.c, main/scores.c: Increasing general mouse functionality all over the game: Mouse wheel now can scroll through menu/listbox items; Right mouse button closes a menu (without the need of these ugly close boxes); Also added mouse-closing capabilities to credits, scores and kconfig menus; While being in UDP Netgames list, override keycode at PAGEUP/DOWN keypress to only flip pages without modifying citem also added messagebox showing TXT_INVALID_CHOICE when invalid netgame was chosen
|
||||
|
||||
20101230
|
||||
--------
|
||||
main/newmenu.c, main/menu.c: Fixed glitch in scroll arrow position; Added newmenu_scroll which can scroll through all kind is menu structures including automatically handling NM_TYPE_TEXT items as well as automatically updating scroll_offset; PageUp/Down now scrolls by 10 items, Home/end will select first/last/items of menu creating consistency to listbox behaviour; Fit text for GrabInput to be more understandable
|
||||
|
|
|
@ -28,6 +28,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "gr.h"
|
||||
#include "window.h"
|
||||
#include "key.h"
|
||||
#include "mouse.h"
|
||||
#include "palette.h"
|
||||
#include "game.h"
|
||||
#include "timer.h"
|
||||
|
@ -72,6 +73,15 @@ int credits_handler(window *wind, d_event *event, credits *cr)
|
|||
window_close(wind);
|
||||
return 1;
|
||||
|
||||
case EVENT_MOUSE_BUTTON_DOWN:
|
||||
case EVENT_MOUSE_BUTTON_UP:
|
||||
if (mouse_get_button(event) == MBTN_LEFT || mouse_get_button(event) == MBTN_RIGHT)
|
||||
{
|
||||
window_close(wind);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case EVENT_IDLE:
|
||||
timer_delay(F1_0/17);
|
||||
|
||||
|
|
|
@ -807,7 +807,13 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (mouse_get_button(event) != 0)
|
||||
if (mouse_get_button(event) == MBTN_RIGHT)
|
||||
{
|
||||
if (!menu->changing)
|
||||
window_close(wind);
|
||||
return 1;
|
||||
}
|
||||
else if (mouse_get_button(event) != MBTN_LEFT)
|
||||
return 0;
|
||||
|
||||
menu->mouse_state = (event->type == EVENT_MOUSE_BUTTON_DOWN);
|
||||
|
|
|
@ -25,6 +25,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "game.h"
|
||||
#include "gr.h"
|
||||
#include "key.h"
|
||||
#include "mouse.h"
|
||||
#include "iff.h"
|
||||
#include "u_mem.h"
|
||||
#include "error.h"
|
||||
|
@ -412,6 +413,13 @@ int main_menu_handler(newmenu *menu, d_event *event, int *menu_choice )
|
|||
return 1;
|
||||
break;
|
||||
|
||||
case EVENT_MOUSE_BUTTON_DOWN:
|
||||
case EVENT_MOUSE_BUTTON_UP:
|
||||
// Don't allow mousebutton-closing in main menu.
|
||||
if (mouse_get_button(event) == MBTN_RIGHT)
|
||||
return 1;
|
||||
break;
|
||||
|
||||
case EVENT_IDLE:
|
||||
if ( keyd_time_when_last_pressed+i2f(45) < timer_query() || GameArg.SysAutoDemo )
|
||||
{
|
||||
|
|
|
@ -537,6 +537,7 @@ int net_udp_list_join_poll( newmenu *menu, d_event *event, direct_join *dj )
|
|||
newpage++;
|
||||
if (NLPage < 0)
|
||||
NLPage = UDP_NETGAMES_PAGES-1;
|
||||
((d_event_keycommand *)event)->keycode = 0;
|
||||
break;
|
||||
}
|
||||
if (key == KEY_PAGEDOWN)
|
||||
|
@ -545,6 +546,7 @@ int net_udp_list_join_poll( newmenu *menu, d_event *event, direct_join *dj )
|
|||
newpage++;
|
||||
if (NLPage >= UDP_NETGAMES_PAGES)
|
||||
NLPage = 0;
|
||||
((d_event_keycommand *)event)->keycode = 0;
|
||||
break;
|
||||
}
|
||||
if (key == KEY_F5)
|
||||
|
@ -571,7 +573,7 @@ int net_udp_list_join_poll( newmenu *menu, d_event *event, direct_join *dj )
|
|||
}
|
||||
case EVENT_NEWMENU_SELECTED:
|
||||
{
|
||||
if (((citem+(NLPage*UDP_NETGAMES_PPAGE)) >= 2) && (((citem+(NLPage*UDP_NETGAMES_PPAGE))-2) <= num_active_udp_games))
|
||||
if (((citem+(NLPage*UDP_NETGAMES_PPAGE)) >= 2) && (((citem+(NLPage*UDP_NETGAMES_PPAGE))-2) <= num_active_udp_games-1))
|
||||
{
|
||||
N_players = 0;
|
||||
change_playernum_to(1);
|
||||
|
@ -582,6 +584,11 @@ int net_udp_list_join_poll( newmenu *menu, d_event *event, direct_join *dj )
|
|||
dj->connecting = 1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nm_messagebox(TXT_SORRY, 1, TXT_OK, TXT_INVALID_CHOICE);
|
||||
return -1; // invalid game selected - stay in the menu
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
|
|
|
@ -30,6 +30,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "window.h"
|
||||
#include "songs.h"
|
||||
#include "key.h"
|
||||
#include "mouse.h"
|
||||
#include "palette.h"
|
||||
#include "game.h"
|
||||
#include "text.h"
|
||||
|
@ -596,13 +597,15 @@ void newmenu_scroll(newmenu *menu, int amount)
|
|||
}
|
||||
}
|
||||
|
||||
int newmenu_mouse(window *wind, d_event *event, newmenu *menu)
|
||||
int newmenu_mouse(window *wind, d_event *event, newmenu *menu, int button)
|
||||
{
|
||||
int old_choice, i;
|
||||
int old_choice, i, mx=0, my=0, mz=0, x1 = 0, x2, y1, y2, changed = 0;
|
||||
grs_canvas *menu_canvas = window_get_canvas(wind), *save_canvas = grd_curcanv;
|
||||
int mx=0, my=0, mz=0, x1 = 0, x2, y1, y2;
|
||||
int changed = 0;
|
||||
|
||||
switch (button)
|
||||
{
|
||||
case MBTN_LEFT:
|
||||
{
|
||||
gr_set_current_canvas(menu_canvas);
|
||||
|
||||
old_choice = menu->citem;
|
||||
|
@ -819,6 +822,30 @@ int newmenu_mouse(window *wind, d_event *event, newmenu *menu)
|
|||
event->type = EVENT_NEWMENU_CHANGED;
|
||||
(*menu->subfunction)(menu, event, menu->userdata);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MBTN_RIGHT:
|
||||
if (menu->mouse_state)
|
||||
{
|
||||
if ( (menu->citem>-1) && (menu->items[menu->citem].type==NM_TYPE_INPUT_MENU) && (menu->items[menu->citem].group==1)) {
|
||||
menu->items[menu->citem].group=0;
|
||||
strcpy(menu->items[menu->citem].text, menu->items[menu->citem].saved_text );
|
||||
menu->items[menu->citem].value = -1;
|
||||
} else {
|
||||
window_close(menu->wind);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MBTN_Z_UP:
|
||||
if (menu->mouse_state && !menu->all_text)
|
||||
newmenu_scroll(menu, -1);
|
||||
break;
|
||||
case MBTN_Z_DOWN:
|
||||
if (menu->mouse_state && !menu->all_text)
|
||||
newmenu_scroll(menu, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1483,11 +1510,11 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
|
||||
case EVENT_MOUSE_BUTTON_DOWN:
|
||||
case EVENT_MOUSE_BUTTON_UP:
|
||||
if (mouse_get_button(event) != 0)
|
||||
return 0;
|
||||
|
||||
{
|
||||
int button = mouse_get_button(event);
|
||||
menu->mouse_state = event->type == EVENT_MOUSE_BUTTON_DOWN;
|
||||
return newmenu_mouse(wind, event, menu);
|
||||
return newmenu_mouse(wind, event, menu, button);
|
||||
}
|
||||
|
||||
case EVENT_KEY_COMMAND:
|
||||
return newmenu_key_command(wind, event, menu);
|
||||
|
@ -1496,7 +1523,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
case EVENT_IDLE:
|
||||
timer_delay2(50);
|
||||
|
||||
return newmenu_mouse(wind, event, menu);
|
||||
return newmenu_mouse(wind, event, menu, -1);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
|
@ -1729,11 +1756,14 @@ void update_scroll_position(listbox *lb)
|
|||
if (lb->first_item < 0 ) lb->first_item = 0;
|
||||
}
|
||||
|
||||
int listbox_mouse(window *wind, d_event *event, listbox *lb)
|
||||
int listbox_mouse(window *wind, d_event *event, listbox *lb, int button)
|
||||
{
|
||||
int i;
|
||||
int mx, my, mz, x1, x2, y1, y2; //, dblclick_flag;
|
||||
int i, mx, my, mz, x1, x2, y1, y2;
|
||||
|
||||
switch (button)
|
||||
{
|
||||
case MBTN_LEFT:
|
||||
{
|
||||
if (lb->mouse_state)
|
||||
{
|
||||
int w, h, aw;
|
||||
|
@ -1777,6 +1807,38 @@ int listbox_mouse(window *wind, d_event *event, listbox *lb)
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MBTN_RIGHT:
|
||||
{
|
||||
if (lb->allow_abort_flag && lb->mouse_state) {
|
||||
lb->citem = -1;
|
||||
window_close(wind);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MBTN_Z_UP:
|
||||
{
|
||||
if (lb->mouse_state)
|
||||
{
|
||||
lb->citem--;
|
||||
update_scroll_position(lb);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MBTN_Z_DOWN:
|
||||
{
|
||||
if (lb->mouse_state)
|
||||
{
|
||||
lb->citem++;
|
||||
update_scroll_position(lb);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2030,11 +2092,11 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
|
||||
case EVENT_MOUSE_BUTTON_DOWN:
|
||||
case EVENT_MOUSE_BUTTON_UP:
|
||||
if (mouse_get_button(event) != 0)
|
||||
return 0;
|
||||
|
||||
{
|
||||
int button = mouse_get_button(event);
|
||||
lb->mouse_state = event->type == EVENT_MOUSE_BUTTON_DOWN;
|
||||
return listbox_mouse(wind, event, lb);
|
||||
return listbox_mouse(wind, event, lb, button);
|
||||
}
|
||||
|
||||
case EVENT_KEY_COMMAND:
|
||||
return listbox_key_command(wind, event, lb);
|
||||
|
@ -2043,7 +2105,7 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
case EVENT_IDLE:
|
||||
timer_delay2(50);
|
||||
|
||||
return listbox_mouse(wind, event, lb);
|
||||
return listbox_mouse(wind, event, lb, -1);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
|
|
|
@ -28,6 +28,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "window.h"
|
||||
#include "gr.h"
|
||||
#include "key.h"
|
||||
#include "mouse.h"
|
||||
#include "palette.h"
|
||||
#include "game.h"
|
||||
#include "gamefont.h"
|
||||
|
@ -351,6 +352,15 @@ int scores_handler(window *wind, d_event *event, scores_menu *menu)
|
|||
}
|
||||
break;
|
||||
|
||||
case EVENT_MOUSE_BUTTON_DOWN:
|
||||
case EVENT_MOUSE_BUTTON_UP:
|
||||
if (mouse_get_button(event) == MBTN_LEFT || mouse_get_button(event) == MBTN_RIGHT)
|
||||
{
|
||||
window_close(wind);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case EVENT_IDLE:
|
||||
timer_delay2(50);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue