X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=vid_sdl.c;h=c3cfda10a498ba8b0891a70512c0477b391d26ff;hb=da29a8beeb35293e2fd38b51883c91b5cf4cf4ad;hp=e5c844e5362718c3aeb0ae943bc47e05716a77cb;hpb=40453f3c58be439a5bafff7b1916b93aa049a986;p=xonotic%2Fdarkplaces.git diff --git a/vid_sdl.c b/vid_sdl.c index e5c844e5..c3cfda10 100644 --- a/vid_sdl.c +++ b/vid_sdl.c @@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#undef WIN32_LEAN_AND_MEAN //hush a warning, SDL.h redefines this #include #include @@ -180,7 +181,7 @@ static unsigned int tbl_sdltoquake[] = 0, //SDLK_LMETA = 310, 0, //SDLK_LSUPER = 311, /* Left "Windows" key */ 0, //SDLK_RSUPER = 312, /* Right "Windows" key */ - 0, //SDLK_MODE = 313, /* "Alt Gr" key */ + K_ALT, //SDLK_MODE = 313, /* "Alt Gr" key */ 0, //SDLK_COMPOSE = 314, /* Multi-key compose key */ 0, //SDLK_HELP = 315, 0, //SDLK_PRINT = 316, @@ -254,11 +255,13 @@ static int Sys_EventFilter( SDL_Event *event ) #endif } -static keynum_t buttonremap[16] = +static keynum_t buttonremap[18] = { K_MOUSE1, K_MOUSE3, K_MOUSE2, + K_MWHEELUP, + K_MWHEELDOWN, K_MOUSE4, K_MOUSE5, K_MOUSE6, @@ -276,6 +279,7 @@ static keynum_t buttonremap[16] = void Sys_SendKeyEvents( void ) { + static qboolean sound_active = true; SDL_Event event; while( SDL_PollEvent( &event ) ) @@ -297,14 +301,26 @@ void Sys_SendKeyEvents( void ) } break; case SDL_MOUSEBUTTONDOWN: - if (event.button.button <= 16) + if (event.button.button <= 18) Key_Event( buttonremap[event.button.button - 1], 0, true ); break; case SDL_MOUSEBUTTONUP: - if (event.button.button <= 16) + if (event.button.button <= 18) Key_Event( buttonremap[event.button.button - 1], 0, false ); break; } + + // enable/disable sound on focus gain/loss + if (!vid_activewindow && sound_active) + { + S_BlockSound (); + sound_active = false; + } + else if (vid_activewindow && !sound_active) + { + S_UnblockSound (); + sound_active = true; + } } ///////////////// @@ -344,7 +360,12 @@ static void VID_SetCaption() return; icon = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( IDI_ICON1 ) ); - SetClassLong( info.window, GCL_HICON, (LONG) icon ); +#ifndef _W64 //If Windows 64bit data types don't exist +#define SetClassLongPtr SetClassLong +#define GCLP_HICON GCL_HICON +#define LONG_PTR LONG +#endif + SetClassLongPtr( info.window, GCLP_HICON, (LONG_PTR)icon ); } #else static void VID_SetCaption() @@ -465,35 +486,33 @@ void VID_Shutdown (void) SDL_QuitSubSystem(SDL_INIT_VIDEO); } -int VID_SetGamma (unsigned short *ramps) +int VID_SetGamma (unsigned short *ramps, int rampsize) { - return !SDL_SetGammaRamp (ramps, ramps + 256, ramps + 512); + return !SDL_SetGammaRamp (ramps, ramps + rampsize, ramps + rampsize*2); } -int VID_GetGamma (unsigned short *ramps) +int VID_GetGamma (unsigned short *ramps, int rampsize) { - return !SDL_GetGammaRamp( ramps, ramps + 256, ramps + 512); + return !SDL_GetGammaRamp (ramps, ramps + rampsize, ramps + rampsize*2); } -void VID_Finish (void) +void VID_Finish (qboolean allowmousegrab) { Uint8 appstate; qboolean vid_usemouse; - if (r_speeds.integer || gl_finish.integer) - qglFinish(); - SDL_GL_SwapBuffers(); - //react on appstate changes appstate = SDL_GetAppState(); - if( !( appstate & SDL_APPMOUSEFOCUS ) || !( appstate & SDL_APPINPUTFOCUS ) ) + vid_hidden = !(appstate & SDL_APPACTIVE); + + if( vid_hidden || !( appstate & SDL_APPMOUSEFOCUS ) || !( appstate & SDL_APPINPUTFOCUS ) ) vid_activewindow = false; else vid_activewindow = true; vid_usemouse = false; - if( vid_mouse.integer && !key_consoleactive && !cls.demoplayback ) + if( allowmousegrab && vid_mouse.integer && !key_consoleactive && (key_dest != key_game || !cls.demoplayback) ) vid_usemouse = true; if( vid_isfullscreen ) vid_usemouse = true; @@ -501,4 +520,16 @@ void VID_Finish (void) vid_usemouse = false; IN_Activate(vid_usemouse); + + VID_UpdateGamma(false, 256); + + if (r_render.integer && !vid_hidden) + { + CHECKGLERROR + if (r_speeds.integer || gl_finish.integer) + { + qglFinish();CHECKGLERROR + } + SDL_GL_SwapBuffers(); + } }