mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 11:22:18 -04:00
Added Chocolate Doom appstate tracking.
This commit is contained in:
parent
4a3dd8fc4e
commit
26f762b64e
@ -260,7 +260,7 @@ void I_Quit (void)
|
|||||||
#if defined(MY_SDL_VER)
|
#if defined(MY_SDL_VER)
|
||||||
// Under Visual C++, the console window likes to rudely slam
|
// Under Visual C++, the console window likes to rudely slam
|
||||||
// shut -- this can stop it
|
// shut -- this can stop it
|
||||||
if(stdin && waitAtExit)
|
if(*errmsg || waitAtExit)
|
||||||
{
|
{
|
||||||
puts("Press any key to continue");
|
puts("Press any key to continue");
|
||||||
getch();
|
getch();
|
||||||
|
150
Source/I_video.c
150
Source/I_video.c
@ -43,6 +43,7 @@ rcsid[] = "$Id: i_video.c,v 1.12 1998/05/03 22:40:35 killough Exp $";
|
|||||||
#include "am_map.h"
|
#include "am_map.h"
|
||||||
#include "m_menu.h"
|
#include "m_menu.h"
|
||||||
#include "wi_stuff.h"
|
#include "wi_stuff.h"
|
||||||
|
#include "i_video.h"
|
||||||
|
|
||||||
SDL_Surface *sdlscreen;
|
SDL_Surface *sdlscreen;
|
||||||
|
|
||||||
@ -138,6 +139,94 @@ void I_StartFrame(void)
|
|||||||
//
|
//
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// haleyjd 10/08/05: Chocolate DOOM application focus state code added
|
||||||
|
|
||||||
|
// Grab the mouse? (int type for config code)
|
||||||
|
int grabmouse = 1;
|
||||||
|
|
||||||
|
// Flag indicating whether the screen is currently visible:
|
||||||
|
// when the screen isnt visible, don't render the screen
|
||||||
|
boolean screenvisible;
|
||||||
|
static boolean window_focused;
|
||||||
|
static boolean fullscreen;
|
||||||
|
|
||||||
|
//
|
||||||
|
// MouseShouldBeGrabbed
|
||||||
|
//
|
||||||
|
// haleyjd 10/08/05: From Chocolate DOOM, fairly self-explanatory.
|
||||||
|
//
|
||||||
|
static boolean MouseShouldBeGrabbed(void)
|
||||||
|
{
|
||||||
|
// if the window doesnt have focus, never grab it
|
||||||
|
if(!window_focused)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// always grab the mouse when full screen (dont want to
|
||||||
|
// see the mouse pointer)
|
||||||
|
if(fullscreen)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// if we specify not to grab the mouse, never grab
|
||||||
|
if(!grabmouse)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// when menu is active or game is paused, release the mouse
|
||||||
|
if(menuactive || paused)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// only grab mouse when playing levels (but not demos)
|
||||||
|
return (gamestate == GS_LEVEL) && !demoplayback;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// UpdateFocus
|
||||||
|
//
|
||||||
|
// haleyjd 10/08/05: From Chocolate Doom
|
||||||
|
// Update the value of window_focused when we get a focus event
|
||||||
|
//
|
||||||
|
// We try to make ourselves be well-behaved: the grab on the mouse
|
||||||
|
// is removed if we lose focus (such as a popup window appearing),
|
||||||
|
// and we dont move the mouse around if we aren't focused either.
|
||||||
|
//
|
||||||
|
static void UpdateFocus(void)
|
||||||
|
{
|
||||||
|
Uint8 state = SDL_GetAppState();
|
||||||
|
|
||||||
|
// We should have input (keyboard) focus and be visible
|
||||||
|
// (not minimised)
|
||||||
|
window_focused = (state & SDL_APPINPUTFOCUS) && (state & SDL_APPACTIVE);
|
||||||
|
|
||||||
|
// Should the screen be grabbed?
|
||||||
|
screenvisible = (state & SDL_APPACTIVE) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// UpdateGrab
|
||||||
|
//
|
||||||
|
// haleyjd 10/08/05: from Chocolate DOOM
|
||||||
|
//
|
||||||
|
static void UpdateGrab(void)
|
||||||
|
{
|
||||||
|
static boolean currently_grabbed = false;
|
||||||
|
boolean grab;
|
||||||
|
|
||||||
|
grab = MouseShouldBeGrabbed();
|
||||||
|
|
||||||
|
if(grab && !currently_grabbed)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
|
SDL_WM_GrabInput(SDL_GRAB_ON);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!grab && currently_grabbed)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(SDL_ENABLE);
|
||||||
|
SDL_WM_GrabInput(SDL_GRAB_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
currently_grabbed = grab;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Keyboard routines
|
// Keyboard routines
|
||||||
// By Lee Killough
|
// By Lee Killough
|
||||||
@ -237,6 +326,15 @@ void I_GetEvent()
|
|||||||
|
|
||||||
while(SDL_PollEvent(&event))
|
while(SDL_PollEvent(&event))
|
||||||
{
|
{
|
||||||
|
// haleyjd 10/08/05: from Chocolate DOOM
|
||||||
|
if(!window_focused &&
|
||||||
|
(event.type == SDL_MOUSEMOTION ||
|
||||||
|
event.type == SDL_MOUSEBUTTONDOWN ||
|
||||||
|
event.type == SDL_MOUSEBUTTONUP))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
switch(event.type)
|
switch(event.type)
|
||||||
{
|
{
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
@ -274,12 +372,12 @@ void I_GetEvent()
|
|||||||
}
|
}
|
||||||
else if(event.button.button == SDL_BUTTON_MIDDLE)
|
else if(event.button.button == SDL_BUTTON_MIDDLE)
|
||||||
{
|
{
|
||||||
buttons &= ~2;
|
buttons &= ~4;
|
||||||
d_event.data1 = buttons;
|
d_event.data1 = buttons;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buttons &= ~4;
|
buttons &= ~2;
|
||||||
d_event.data1 = buttons;
|
d_event.data1 = buttons;
|
||||||
}
|
}
|
||||||
D_PostEvent(&d_event);
|
D_PostEvent(&d_event);
|
||||||
@ -296,12 +394,12 @@ void I_GetEvent()
|
|||||||
}
|
}
|
||||||
else if(event.button.button == SDL_BUTTON_MIDDLE)
|
else if(event.button.button == SDL_BUTTON_MIDDLE)
|
||||||
{
|
{
|
||||||
buttons |= 2;
|
buttons |= 4;
|
||||||
d_event.data1 = buttons;
|
d_event.data1 = buttons;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buttons |= 4;
|
buttons |= 2;
|
||||||
d_event.data1 = buttons;
|
d_event.data1 = buttons;
|
||||||
}
|
}
|
||||||
D_PostEvent(&d_event);
|
D_PostEvent(&d_event);
|
||||||
@ -310,6 +408,15 @@ void I_GetEvent()
|
|||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
exit(0);
|
exit(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SDL_ACTIVEEVENT:
|
||||||
|
// haleyjd 10/08/05: from Chocolate DOOM:
|
||||||
|
// need to update our focus state
|
||||||
|
UpdateFocus();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,6 +425,9 @@ void I_GetEvent()
|
|||||||
mouseevent.data1 = buttons;
|
mouseevent.data1 = buttons;
|
||||||
D_PostEvent(&mouseevent);
|
D_PostEvent(&mouseevent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(paused && !window_focused)
|
||||||
|
I_WaitVBL(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -362,6 +472,16 @@ void I_FinishUpdate(void)
|
|||||||
if (noblit || !in_graphics_mode)
|
if (noblit || !in_graphics_mode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// haleyjd 10/08/05: from Chocolate DOOM:
|
||||||
|
|
||||||
|
UpdateGrab();
|
||||||
|
|
||||||
|
// Don't update the screen if the window isn't visible.
|
||||||
|
// Not doing this breaks under Windows when we alt-tab away
|
||||||
|
// while fullscreen.
|
||||||
|
if(!(SDL_GetAppState() & SDL_APPACTIVE))
|
||||||
|
return;
|
||||||
|
|
||||||
v_width = in_hires ? 640 : 320;
|
v_width = in_hires ? 640 : 320;
|
||||||
v_height = in_hires ? 400 : 200;
|
v_height = in_hires ? 400 : 200;
|
||||||
|
|
||||||
@ -535,14 +655,7 @@ void I_ShutdownGraphics(void)
|
|||||||
{
|
{
|
||||||
if(in_graphics_mode) // killough 10/98
|
if(in_graphics_mode) // killough 10/98
|
||||||
{
|
{
|
||||||
if(SDL_ShowCursor(SDL_QUERY) == SDL_DISABLE)
|
UpdateGrab();
|
||||||
SDL_ShowCursor(SDL_ENABLE);
|
|
||||||
|
|
||||||
// SoM 1-20-04: let go of input
|
|
||||||
if(SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_ON)
|
|
||||||
SDL_WM_GrabInput(SDL_GRAB_OFF);
|
|
||||||
|
|
||||||
|
|
||||||
in_graphics_mode = false;
|
in_graphics_mode = false;
|
||||||
sdlscreen = NULL;
|
sdlscreen = NULL;
|
||||||
}
|
}
|
||||||
@ -571,6 +684,13 @@ static void I_InitGraphicsMode(void)
|
|||||||
firsttime = false;
|
firsttime = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// haleyjd 10/09/05: from Chocolate DOOM
|
||||||
|
// mouse grabbing
|
||||||
|
if(M_CheckParm("-grabmouse"))
|
||||||
|
grabmouse = 1;
|
||||||
|
else if(M_CheckParm("-nograbmouse"))
|
||||||
|
grabmouse = 0;
|
||||||
|
|
||||||
// haleyjd 04/11/03: "vsync" or page-flipping support
|
// haleyjd 04/11/03: "vsync" or page-flipping support
|
||||||
if(use_vsync || page_flip)
|
if(use_vsync || page_flip)
|
||||||
flags = SDL_HWSURFACE | SDL_DOUBLEBUF;
|
flags = SDL_HWSURFACE | SDL_DOUBLEBUF;
|
||||||
@ -592,11 +712,11 @@ static void I_InitGraphicsMode(void)
|
|||||||
|
|
||||||
V_Init();
|
V_Init();
|
||||||
|
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
|
||||||
SDL_WM_GrabInput(SDL_GRAB_ON);
|
|
||||||
|
|
||||||
SDL_WM_SetCaption("WinMBF v2.03", NULL);
|
SDL_WM_SetCaption("WinMBF v2.03", NULL);
|
||||||
|
|
||||||
|
UpdateFocus();
|
||||||
|
UpdateGrab();
|
||||||
|
|
||||||
in_graphics_mode = 1;
|
in_graphics_mode = 1;
|
||||||
in_page_flip = false;
|
in_page_flip = false;
|
||||||
in_hires = hires;
|
in_hires = hires;
|
||||||
|
@ -82,6 +82,7 @@ extern int joystickSens_x;
|
|||||||
extern int joystickSens_y;
|
extern int joystickSens_y;
|
||||||
extern int waitAtExit;
|
extern int waitAtExit;
|
||||||
extern int forceFlipPan;
|
extern int forceFlipPan;
|
||||||
|
extern int grabmouse;
|
||||||
|
|
||||||
extern char *chat_macros[], *wad_files[], *deh_files[]; // killough 10/98
|
extern char *chat_macros[], *wad_files[], *deh_files[]; // killough 10/98
|
||||||
|
|
||||||
@ -1634,6 +1635,13 @@ default_t defaults[] = {
|
|||||||
0, {0, 1}, number, ss_none, wad_no,
|
0, {0, 1}, number, ss_none, wad_no,
|
||||||
"1 to force reversal of stereo audio channels"
|
"1 to force reversal of stereo audio channels"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"grabmouse",
|
||||||
|
&grabmouse, NULL,
|
||||||
|
1, {0, 1}, number, ss_none, wad_no,
|
||||||
|
"1 to grab mouse during play"
|
||||||
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{NULL} // last entry
|
{NULL} // last entry
|
||||||
|
Loading…
x
Reference in New Issue
Block a user