ref: 90da953b2310151b5a56f3ea78d8528100fd1fa0
parent: 439a4b158b47c635100b0006470a7ed1e44e29f3
author: Simon Howard <fraggle@gmail.com>
date: Sat Sep 6 16:18:50 EDT 2008
Remove dependencies of i_video.c on doom/ code. Subversion-branch: /branches/raven-branch Subversion-revision: 1205
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -107,11 +107,6 @@
boolean singletics = false; // debug flag to cancel adaptiveness
-// If true, game is running as a screensaver
-
-boolean screensaver_mode = false;
-
-
//extern int soundVolume;
//extern int sfxVolume;
//extern int musicVolume;
@@ -340,8 +335,29 @@
} while (!done);
}
+//
+// D_GrabMouseCallback
+//
+// Called to determine whether to grab the mouse pointer
+//
+boolean D_GrabMouseCallback(void)
+{
+ // Drone players don't need mouse focus
+ if (drone)
+ 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;
+}
+
//
// D_DoomLoop
//
@@ -363,6 +379,8 @@
TryRunTics();
I_InitGraphics ();
+ I_SetGrabMouseCallback(D_GrabMouseCallback);
+ I_SetWindowTitle(gamedescription);
R_ExecuteSetViewSize();
@@ -867,6 +885,8 @@
//
devparm = M_CheckParm ("-devparm");
+
+ I_DisplayFPSDots(devparm);
//!
// @category net
--- a/src/doom/doomstat.h
+++ b/src/doom/doomstat.h
@@ -55,8 +55,6 @@
extern boolean devparm; // DEBUG: launched with -devparm
-extern boolean screensaver_mode; // game running as a screensaver?
-
// -----------------------------------------------------
// Game Mode - identify IWAD as shareware, retail etc.
//
@@ -147,7 +145,6 @@
extern boolean viewactive;
extern boolean nodrawers;
-extern boolean noblit;
extern int viewwindowx;
extern int viewwindowy;
--- a/src/doom/g_game.c
+++ b/src/doom/g_game.c
@@ -122,7 +122,6 @@
boolean timingdemo; // if true, exit with report on completion
boolean nodrawers; // for comparative timing purposes
-boolean noblit; // for comparative timing purposes
int starttime; // for comparative timing purposes
boolean viewactive;
@@ -2056,13 +2055,6 @@
nodrawers = M_CheckParm ("-nodraw");
- //!
- // @vanilla
- //
- // Disable blitting the screen.
- //
-
- noblit = M_CheckParm ("-noblit");
timingdemo = true;
singletics = true;
--- a/src/i_system.c
+++ b/src/i_system.c
@@ -145,7 +145,7 @@
// Make sure the new window has the right title and icon
- I_SetWindowCaption();
+ I_SetWindowTitle("Exit screen");
I_SetWindowIcon();
// Write the data to the screen memory
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -36,8 +36,6 @@
#include "deh_main.h"
#include "doomtype.h"
#include "doomkeys.h"
-#include "doomstat.h"
-#include "d_main.h"
#include "i_joystick.h"
#include "i_system.h"
#include "i_swap.h"
@@ -46,7 +44,6 @@
#include "i_scale.h"
#include "m_argv.h"
#include "s_sound.h"
-#include "sounds.h"
#include "v_video.h"
#include "w_wad.h"
#include "z_zone.h"
@@ -137,11 +134,30 @@
int grabmouse = true;
+// If true, game is running as a screensaver
+
+boolean screensaver_mode = false;
+
// Flag indicating whether the screen is currently visible:
// when the screen isnt visible, don't render the screen
boolean screenvisible;
+// If true, we display dots at the bottom of the screen to
+// indicate FPS.
+
+static boolean display_fps_dots;
+
+// If this is true, the screen is rendered but not blitted to the
+// video buffer.
+
+static boolean noblit;
+
+// Callback function to invoke to determine whether to grab the
+// mouse pointer.
+
+static grabmouse_callback_t grabmouse_callback = NULL;
+
// disk image data and background overwritten by the disk to be
// restored by EndRead
@@ -199,26 +215,36 @@
if (!usemouse || nomouse)
return false;
- // Drone players don't need mouse focus
-
- if (drone)
- return false;
-
// 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;
+ // Invoke the grabmouse callback function to determine whether
+ // the mouse should be grabbed
- // only grab mouse when playing levels (but not demos)
+ if (grabmouse_callback != NULL)
+ {
+ return grabmouse_callback();
+ }
+ else
+ {
+ return true;
+ }
+}
- return (gamestate == GS_LEVEL) && !demoplayback;
+void I_SetGrabMouseCallback(grabmouse_callback_t func)
+{
+ grabmouse_callback = func;
}
+// Set the variable controlling FPS dots.
+
+void I_DisplayFPSDots(boolean dots_on)
+{
+ display_fps_dots = dots_on;
+}
+
// 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
@@ -520,11 +546,13 @@
}
break;
+/* TODO
case SDL_QUIT:
// bring up the "quit doom?" prompt
S_StartSound(NULL,sfx_swtchn);
M_QuitDOOM(0);
break;
+ */
case SDL_ACTIVEEVENT:
// need to update our focus state
@@ -771,9 +799,9 @@
return;
// draws little dots on the bottom of the screen
- if (devparm)
- {
+ if (display_fps_dots)
+ {
i = I_GetTime();
tics = i - lasttic;
lasttic = i;
@@ -783,7 +811,6 @@
screens[0][ (SCREENHEIGHT-1)*SCREENWIDTH + i] = 0xff;
for ( ; i<20*4 ; i+=4)
screens[0][ (SCREENHEIGHT-1)*SCREENWIDTH + i] = 0x0;
-
}
// draw to screen
@@ -832,16 +859,16 @@
}
//
-// Set the window caption
+// Set the window title
//
-void I_SetWindowCaption(void)
+void I_SetWindowTitle(char *title)
{
char *buf;
- buf = Z_Malloc(strlen(gamedescription) + strlen(PACKAGE_STRING) + 10,
+ buf = Z_Malloc(strlen(title) + strlen(PACKAGE_STRING) + 5,
PU_STATIC, NULL);
- sprintf(buf, "%s - %s", gamedescription, PACKAGE_STRING);
+ sprintf(buf, "%s - %s", title, PACKAGE_STRING);
SDL_WM_SetCaption(buf, NULL);
@@ -1169,6 +1196,14 @@
int i;
//!
+ // @vanilla
+ //
+ // Disable blitting the screen.
+ //
+
+ noblit = M_CheckParm ("-noblit");
+
+ //!
// @category video
//
// Grab the mouse when running in windowed mode.
@@ -1514,9 +1549,6 @@
I_SetPalette(doompal);
SDL_SetColors(screen, palette, 0, 256);
- // Setup title and icon
-
- I_SetWindowCaption();
I_SetWindowIcon();
CreateCursors();
--- a/src/i_video.h
+++ b/src/i_video.h
@@ -69,6 +69,8 @@
boolean poor_quality;
} screen_mode_t;
+typedef boolean (*grabmouse_callback_t)(void);
+
// Called by D_DoomMain,
// determines the hardware configuration
// and sets up the video mode
@@ -91,11 +93,14 @@
void I_BeginRead (void);
void I_EndRead (void);
-void I_SetWindowCaption(void);
+void I_SetWindowTitle(char *title);
void I_SetWindowIcon(void);
void I_CheckIsScreensaver(void);
+void I_SetGrabMouseCallback(grabmouse_callback_t func);
+void I_DisplayFPSDots(boolean dots_on);
+
extern char *video_driver;
extern int autoadjust_video_settings;
extern boolean screenvisible;
@@ -107,6 +112,8 @@
extern int mouse_threshold;
extern int startup_delay;
extern int vanilla_keyboard_mapping;
+extern boolean screensaver_mode;
+
#endif
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -267,7 +267,7 @@
exit(-1);
}
- I_SetWindowCaption();
+ I_SetWindowTitle("Waiting for game start");
I_SetWindowIcon();
BuildGUI();