diff --git a/ChangeLog b/ChangeLog index 80d7e955e..4662d7ed9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2003-11-24 Bradley Bell + * arch/sdl/mouse.c, main/konfig.c, main/newmenu.c, main/newmenu.h: + enabled mouse control of menus + * main/mission.h: oops, didn't mean to change this. 2003-11-21 Bradley Bell diff --git a/arch/sdl/mouse.c b/arch/sdl/mouse.c index 85ef52899..11e18f3d8 100644 --- a/arch/sdl/mouse.c +++ b/arch/sdl/mouse.c @@ -1,4 +1,4 @@ -/* $Id: mouse.c,v 1.5 2003-01-15 02:42:41 btb Exp $ */ +/* $Id: mouse.c,v 1.6 2003-11-25 04:13:04 btb Exp $ */ /* * * SDL mouse driver. @@ -110,6 +110,7 @@ void mouse_flush() // clears all mice events... Mouse.x = 0; Mouse.y = 0; Mouse.z = 0; + SDL_GetMouseState(&Mouse.x, &Mouse.y); // necessary because polling only gives us the delta. } //======================================================================== diff --git a/main/kconfig.c b/main/kconfig.c index 1e72895a2..bdd1d3b67 100644 --- a/main/kconfig.c +++ b/main/kconfig.c @@ -1,4 +1,4 @@ -/* $Id: kconfig.c,v 1.24 2003-10-08 19:18:46 btb Exp $ */ +/* $Id: kconfig.c,v 1.25 2003-11-25 04:13:05 btb Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -346,7 +346,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #ifdef RCS -static char rcsid[] = "$Id: kconfig.c,v 1.24 2003-10-08 19:18:46 btb Exp $"; +static char rcsid[] = "$Id: kconfig.c,v 1.25 2003-11-25 04:13:05 btb Exp $"; #endif #ifdef WINDOWS @@ -1099,24 +1099,24 @@ int find_next_item_left( kc_item * items, int nitems, int citem ) } #endif -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE int get_item_height(kc_item *item) { int w, h, aw; char btext[10]; if (item->value==255) { - sprintf( btext, "" ); + strcpy(btext, ""); } else { switch( item->type ) { case BT_KEY: strncpy( btext, key_text[item->value], 10 ); break; case BT_MOUSE_BUTTON: - #ifdef WINDOWS +#ifndef MACINTOSH strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break; - #else +#else strncpy( btext, mousebutton_text[item->value], 10 ); break; - #endif +#endif case BT_MOUSE_AXIS: strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break; case BT_JOY_BUTTON: @@ -1145,10 +1145,10 @@ WINDOS( ); grs_font * save_font; int old_keyd_repeat; - #if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE int mouse_state, omouse_state, mx, my, x1, x2, y1, y2; int close_x, close_y, close_size; - #endif +#endif int i,k,ocitem,citem; int time_stopped = 0; @@ -1217,13 +1217,13 @@ WIN(DDGRLOCK(dd_grd_curcanv)); // gr_string( 0x8000, 8, "Mouse" ); // } -#if defined(MACINTOSH) || defined(WINDOWS) - close_x = close_y = 15; - close_size = 10; +#ifdef NEWMENU_MOUSE + close_x = close_y = MenuHires?15:7; + close_size = MenuHires?10:5; gr_setcolor( BM_XRGB(0, 0, 0) ); gr_rect(close_x, close_y, close_x + close_size, close_y + close_size); gr_setcolor( BM_XRGB(21, 21, 21) ); - gr_rect( close_x + 2, close_y + 2, close_x + close_size - 2, close_y + close_size -2 ); + gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1)); #endif grd_curcanv->cv_font = GAME_FONT; @@ -1303,11 +1303,10 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); citem = 0; kc_drawitem( &items[citem], 1 ); - - WIN(ShowCursorW()); - MAC(show_cursor();) -#if defined(MACINTOSH) || defined(WINDOWS) + newmenu_show_cursor(); + +#ifdef NEWMENU_MOUSE mouse_state = omouse_state = 0; #endif @@ -1336,12 +1335,12 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); songs_check_redbook_repeat(); k = key_inkey(); - -#if defined(MACINTOSH) || defined(WINDOWS) + +#ifdef NEWMENU_MOUSE omouse_state = mouse_state; mouse_state = mouse_button_state(0); #endif - + if ( !time_stopped ) { #ifdef NETWORK if (multi_menu_poll() == -1) @@ -1454,8 +1453,7 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); ); keyd_repeat = old_keyd_repeat; game_flush_inputs(); - WIN( HideCursorW()); - MAC( hide_cursor(); ) + newmenu_hide_cursor(); if (time_stopped) start_time(); return; @@ -1532,7 +1530,7 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); #endif } - #if defined (MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) { int item_height; @@ -1559,8 +1557,7 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y); y2 = y1 + LHY(item_height); if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) { - WIN(HideCursorW()); - MAC(hide_cursor();) + newmenu_hide_cursor(); switch( items[citem].type ) { case BT_KEY: kc_change_key( &items[citem] ); break; case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break; @@ -1569,21 +1566,19 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break; case BT_INVERT: kc_change_invert( &items[citem] ); break; } - MAC(show_cursor();) - WIN(ShowCursorW()); + newmenu_show_cursor(); } else { - x1 = grd_curcanv->cv_bitmap.bm_x + close_x + 2; - x2 = x1 + close_size - 2; - y1 = grd_curcanv->cv_bitmap.bm_y + close_y + 2; - y2 = y1 + close_size - 2; + x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1); + x2 = x1 + close_size - LHX(1); + y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1); + y2 = y1 + close_size - LHX(1); if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) { grd_curcanv->cv_font = save_font; WINDOS(dd_gr_set_current_canvas( save_canvas ), gr_set_current_canvas( save_canvas )); keyd_repeat = old_keyd_repeat; game_flush_inputs(); - WIN(HideCursorW()); - MAC(hide_cursor();) + newmenu_hide_cursor(); if (time_stopped) start_time(); return; @@ -1591,15 +1586,13 @@ WIN(DDGRUNLOCK(dd_grd_curcanv)); } } - #endif // MACINTOSH WINDOWS - +#endif // NEWMENU_MOUSE + if (ocitem!=citem) { - MAC(hide_cursor();) - WIN(HideCursorW()); + newmenu_hide_cursor(); kc_drawitem( &items[ocitem], 0 ); kc_drawitem( &items[citem], 1 ); - WIN(ShowCursorW()); - MAC(show_cursor();) + newmenu_show_cursor(); } } } diff --git a/main/newmenu.c b/main/newmenu.c index c4efdfa11..c16415270 100644 --- a/main/newmenu.c +++ b/main/newmenu.c @@ -1,4 +1,4 @@ -/* $Id: newmenu.c,v 1.22 2003-11-18 00:29:53 btb Exp $ */ +/* $Id: newmenu.c,v 1.23 2003-11-25 04:13:05 btb Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -1236,11 +1236,11 @@ int check_button_press() break; case CONTROL_MOUSE: case CONTROL_CYBERMAN: - #ifndef MACINTOSH // don't allow mouse to continue from menu +#ifndef NEWMENU_MOUSE // don't allow mouse to continue from menu for (i=0; i<3; i++ ) if (mouse_button_down_count(i)>0) return 1; break; - #endif +#endif case CONTROL_WINJOYSTICK: #ifdef WINDOWS for (i=0; i<4; i++ ) @@ -1263,15 +1263,19 @@ int check_button_press() extern int network_request_player_names(int); extern int RestoringMenu; -#if defined(WINDOWS) || defined(MACINTOSH) +#ifdef NEWMENU_MOUSE ubyte Hack_DblClick_MenuMode=0; #endif -MAC(extern ubyte joydefs_calibrating;) +#ifdef MACINTOSH +extern ubyte joydefs_calibrating; +#else +# define joydefs_calibrating 0 +#endif -#define CLOSE_X 15 -#define CLOSE_Y 15 -#define CLOSE_SIZE 10 +#define CLOSE_X (MenuHires?15:7) +#define CLOSE_Y (MenuHires?15:7) +#define CLOSE_SIZE (MenuHires?10:5) void draw_close_box(int x,int y) { @@ -1279,7 +1283,7 @@ void draw_close_box(int x,int y) gr_setcolor( BM_XRGB(0, 0, 0) ); gr_rect(x + CLOSE_X, y + CLOSE_Y, x + CLOSE_X + CLOSE_SIZE, y + CLOSE_Y + CLOSE_SIZE); gr_setcolor( BM_XRGB(21, 21, 21) ); - gr_rect( x + CLOSE_X + 2, y + CLOSE_Y + 2, x + CLOSE_X + CLOSE_SIZE - 2, y + CLOSE_Y + CLOSE_SIZE - 2 ); + gr_rect(x + CLOSE_X + LHX(1), y + CLOSE_Y + LHX(1), x + CLOSE_X + CLOSE_SIZE - LHX(1), y + CLOSE_Y + CLOSE_SIZE - LHX(1)); WIN (DDGRUNLOCK(dd_grd_curcanv)); } @@ -1299,7 +1303,7 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, int dont_restore=0; int MaxOnMenu=MAXDISPLAYABLEITEMS; WINDOS(dd_grs_canvas *save_canvas, grs_canvas *save_canvas ); -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE int mouse_state, omouse_state, dblclick_flag=0; int mx=0, my=0, x1, x2, y1, y2; int close_box=0; @@ -1312,8 +1316,7 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, PA_DFX (pa_set_front_to_read()); WIN(if (!_AppActive) return -1); // Don't draw message if minimized! - WIN(HideCursorW()); - MAC(hide_cursor();) + newmenu_hide_cursor(); if (nitems < 1 ) { @@ -1652,10 +1655,10 @@ RePaintNewmenu4: if (citem < 0 ) citem = 0; if (citem > nitems-1 ) citem = nitems-1; choice = citem; - - #if defined(WINDOWS) || defined(MACINTOSH) + +#ifdef NEWMENU_MOUSE dblclick_flag = 1; - #endif +#endif while ( item[choice].type==NM_TYPE_TEXT ) { choice++; @@ -1676,26 +1679,22 @@ RePaintNewmenu4: // Clear mouse, joystick to clear button presses. game_flush_inputs(); -#if defined(WINDOWS) || defined(MACINTOSH) +#ifdef NEWMENU_MOUSE mouse_state = omouse_state = 0; if (filename == NULL && !MenuReordering) { draw_close_box(0,0); close_box = 1; } -#endif -#ifdef WINDOWS - if (!MenuReordering) { - ShowCursorW(); - SetCursor (LoadCursor(NULL,IDC_ARROW)); + if (!MenuReordering && !joydefs_calibrating) + { + newmenu_show_cursor(); +# ifdef WINDOWS + SetCursor(LoadCursor(NULL,IDC_ARROW)); +# endif } #endif -#ifdef MACINTOSH - if (!joydefs_calibrating) - show_cursor(); -#endif - mprintf ((0,"Set to true!\n")); while(!done) { @@ -1725,16 +1724,10 @@ RePaintNewmenu4: #endif - -#ifdef MACINTOSH - omouse_state = mouse_state; - mouse_state = mouse_button_state(0); +#ifdef NEWMENU_MOUSE if (!joydefs_calibrating) - show_cursor(); // possibly hidden -#endif - -#ifdef WINDOWS - omouse_state = mouse_state; + newmenu_show_cursor(); // possibly hidden + omouse_state = mouse_state; if (!MenuReordering) mouse_state = mouse_button_state(0); //@@ mprintf ((0,"mouse state:%d\n",mouse_state)); @@ -1987,14 +1980,14 @@ RePaintNewmenu4: MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:) case KEY_PRINT_SCREEN: - MAC(hide_cursor()); + MAC(newmenu_hide_cursor()); save_screen_shot(0); PA_DFX (pa_set_frontbuffer_current()); PA_DFX (pa_set_front_to_read()); for (i=0;i -1 ) { int ascii; @@ -2382,12 +2375,13 @@ RePaintNewmenu4: if (item[i].redraw) // warning! ugly hack below { item[i].y-=((string_height+1)*ScrollOffset); - MAC(hide_cursor()); - WIN(HideCursorW()); + newmenu_hide_cursor(); draw_item( &bg, &item[i], (i==choice && !all_text),TinyMode ); item[i].redraw=0; - MAC(if (!joydefs_calibrating) show_cursor()); - WIN(if (!MenuReordering) ShowCursorW()); +#ifdef NEWMENU_MOUSE + if (!MenuReordering && !joydefs_calibrating) + newmenu_show_cursor(); +#endif item[i].y+=((string_height+1)*ScrollOffset); } if (i==choice && (item[i].type==NM_TYPE_INPUT || (item[i].type==NM_TYPE_INPUT_MENU && item[i].group))) @@ -2429,10 +2423,9 @@ RePaintNewmenu4: gr_palette_fade_in( gr_palette, 32, 0 ); } } - - MAC(hide_cursor()); - WIN(HideCursorW()); - + + newmenu_hide_cursor(); + // Restore everything... WINDOS ( dd_gr_set_current_canvas(bg.menu_canvas), @@ -2604,12 +2597,14 @@ int newmenu_get_filename( char * title, char * filespec, char * filename, int al int w_x, w_y, w_w, w_h, title_height; int box_x, box_y, box_w, box_h; bkg bg; // background under listbox -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE int mx, my, x1, x2, y1, y2, mouse_state, omouse_state; int mouse2_state, omouse2_state; int dblclick_flag=0; - int simukey=0; +# ifdef WINDOWS + int simukey=0; int show_up_arrow=0,show_down_arrow=0; +# endif #endif WIN(int win_redraw=0); @@ -2809,23 +2804,19 @@ RePaintNewmenuFile: #endif for ( i=0; i0)) || ((demo_mode)&&(citem>=0)) ) { int x = 1; - MAC(hide_cursor()); #ifdef WINDOWS mouse_set_mode(1); //re-enable centering mode - HideCursorW(); #endif + newmenu_hide_cursor(); if (player_mode) x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_PILOT, &filenames[citem*14]+((player_mode && filenames[citem*14]=='$')?1:0) ); else if (demo_mode) x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_DEMO, &filenames[citem*14]+((demo_mode && filenames[citem*14]=='$')?1:0) ); - MAC(show_cursor()); #ifdef WINDOWS mouse_set_mode(0); //disenable centering mode - ShowCursorW(); #endif + newmenu_show_cursor(); if (x==0) { char * p; int ret; @@ -2997,7 +2986,7 @@ RePaintNewmenuFile: if ( !(Game_mode & GM_MULTI) ) macintosh_quit(); - show_cursor(); + newmenu_show_cursor(); key_flush(); break; } @@ -3065,7 +3054,7 @@ RePaintNewmenuFile: if (first_item < 0 ) first_item = 0; -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE WIN(Sleep(100)); if (mouse_state || mouse2_state) { int w, h, aw; @@ -3140,8 +3129,7 @@ RePaintNewmenuFile: #else if (ofirst_item != first_item) { #endif - MAC(hide_cursor()); - WIN(HideCursorW()); + newmenu_hide_cursor(); gr_setcolor( BM_XRGB( 0,0,0) ); for (i=first_item; i=0) && (ift_h+2)+box_y; @@ -3207,8 +3193,7 @@ RePaintNewmenuFile: gr_rect( box_x, y-1, box_x + box_x - 1, y + h + 1 ); gr_string( box_x + 5, y, (&filenames[i*14])+((player_mode && filenames[i*14]=='$')?1:0) ); } - WIN(ShowCursorW()); - MAC(show_cursor()); + newmenu_show_cursor(); } #ifdef WINDOWS @@ -3239,7 +3224,7 @@ RePaintNewmenuFile: } ExitFileMenuEarly: - MAC(hide_cursor()); + MAC(newmenu_hide_cursor()); if ( citem > -1 ) { strncpy( filename, (&filenames[citem*14])+((player_mode && filenames[citem*14]=='$')?1:0), FILENAME_LEN ); exit_value = 1; @@ -3276,7 +3261,7 @@ ExitFileMenu: d_free(filenames); WIN(mouse_set_mode(1)); //re-enable centering mode - WIN(HideCursorW()); + WIN(newmenu_hide_cursor()); return exit_value; @@ -3319,10 +3304,12 @@ int newmenu_listbox1( char * title, int nitems, char * items[], int allow_abort_ int width, height, wx, wy, title_height, border_size; int total_width,total_height; bkg bg; -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE int mx, my, x1, x2, y1, y2, mouse_state, omouse_state; //, dblclick_flag; int close_x,close_y; +# ifdef WINDOWS int simukey=0,show_up_arrow=0,show_down_arrow=0; +# endif #endif WIN(int win_redraw=0); @@ -3422,16 +3409,12 @@ RePaintNewmenuListbox: first_item = -1; -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE mouse_state = omouse_state = 0; //dblclick_flag = 0; close_x = wx-border_size; close_y = wy-title_height-border_size; draw_close_box(close_x,close_y); - #ifdef MACINTOSH - show_cursor(); - #else - ShowCursorW(); - #endif + newmenu_show_cursor(); #endif while(!done) { @@ -3454,7 +3437,7 @@ RePaintNewmenuListbox: ocitem = citem; ofirst_item = first_item; -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE omouse_state = mouse_state; mouse_state = mouse_button_state(0); #endif @@ -3493,12 +3476,12 @@ RePaintNewmenuListbox: switch(key) { MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:) case KEY_PRINT_SCREEN: - MAC(hide_cursor()); + MAC(newmenu_hide_cursor()); save_screen_shot(0); PA_DFX (pa_set_frontbuffer_current()); PA_DFX (pa_set_front_to_read()); - MAC(show_cursor()); + MAC(newmenu_show_cursor()); MAC(key_flush()); break; case KEY_HOME: @@ -3542,7 +3525,7 @@ RePaintNewmenuListbox: if ( !(Game_mode & GM_MULTI) ) macintosh_quit(); - show_cursor(); + newmenu_show_cursor(); key_flush(); break; } @@ -3603,7 +3586,7 @@ RePaintNewmenuListbox: #endif -#if defined(MACINTOSH) || defined(WINDOWS) +#ifdef NEWMENU_MOUSE WIN(Sleep(100)); if (mouse_state) { int w, h, aw; @@ -3674,8 +3657,7 @@ RePaintNewmenuListbox: #endif if ( (ofirst_item != first_item) || redraw) { - MAC(hide_cursor()); - WIN(HideCursorW()); + newmenu_hide_cursor(); WIN(DDGRLOCK(dd_grd_curcanv)); gr_setcolor( BM_XRGB( 0,0,0) ); @@ -3722,14 +3704,12 @@ RePaintNewmenuListbox: WIN(DDGRUNLOCK(dd_grd_curcanv)); - WIN(ShowCursorW()); - MAC(show_cursor()); + newmenu_show_cursor(); gr_update(); } else if ( citem != ocitem ) { int w, h, aw, y; - MAC(hide_cursor()); - WIN(HideCursorW()); + newmenu_hide_cursor(); WIN(DDGRLOCK(dd_grd_curcanv)); @@ -3758,13 +3738,11 @@ RePaintNewmenuListbox: } WIN(DDGRUNLOCK(dd_grd_curcanv)); - WIN(ShowCursorW()); - MAC(show_cursor()); + newmenu_show_cursor(); gr_update(); } } - MAC(hide_cursor()); - WIN(HideCursorW()); + newmenu_hide_cursor(); keyd_repeat = old_keyd_repeat; @@ -3912,8 +3890,28 @@ void nm_wrap_text(char *dbuf, char *sbuf, int line_length) d_free(tbuf); } - - +#ifdef NEWMENU_MOUSE +void newmenu_show_cursor() +{ +#if defined(MACINTOSH) + show_cursor(); +#elif defined(WINDOWS) + ShowCursorW(); +#elif defined(SDL_INPUT) + SDL_ShowCursor(SDL_ENABLE); +#endif +} +void newmenu_hide_cursor() +{ +#if defined(MACINTOSH) + hide_cursor(); +#elif defined(WINDOWS) + HideCursorW(); +#elif defined(SDL_INPUT) + SDL_ShowCursor(SDL_DISABLE); +#endif +} +#endif diff --git a/main/newmenu.h b/main/newmenu.h index 81664d37c..622f3cf10 100644 --- a/main/newmenu.h +++ b/main/newmenu.h @@ -1,4 +1,4 @@ -/* $Id: newmenu.h,v 1.4 2003-10-10 09:36:35 btb Exp $ */ +/* $Id: newmenu.h,v 1.5 2003-11-25 04:13:05 btb Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -240,4 +240,11 @@ int nm_messagebox_fixedfont(char *title, int nchoices, ...); //should be called whenever the palette changes extern void nm_remap_background(void); +#if defined(MACINTOSH) || defined(WINDOWS) || defined(SDL_INPUT) +# define NEWMENU_MOUSE +void newmenu_show_cursor(); +void newmenu_hide_cursor(); +void draw_close_box(int x, int y); +#endif + #endif /* _NEWMENU_H */