mirror of
https://git.code.sf.net/p/quake/newtree
synced 2024-11-28 23:02:31 +00:00
Thanks to akawaka, vid_sdl works!
This is far from complete and still does many things oddly by "modern" standards in newtree.
This commit is contained in:
parent
3a50d8337d
commit
eedd4a5e96
1 changed files with 101 additions and 80 deletions
181
source/vid_sdl.c
181
source/vid_sdl.c
|
@ -26,22 +26,44 @@
|
||||||
$Id$
|
$Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
#include <keys.h>
|
|
||||||
#include <quakedef.h>
|
#include "bothdefs.h" // needed by: common.h, net.h, client.
|
||||||
#include <d_local.h>
|
|
||||||
#include <cvar.h>
|
#include "quakedef.h"
|
||||||
#include <draw.h>
|
#include "menu.h"
|
||||||
#include <sys.h>
|
#include "vid.h"
|
||||||
#include <lib_replace.h>
|
#include "sys.h"
|
||||||
#include <cmd.h>
|
#include "mathlib.h" // needed by: protocol.h, render.h, client.h,
|
||||||
#include <client.h>
|
// modelgen.h, glmodel.h
|
||||||
|
#include "wad.h"
|
||||||
|
#include "draw.h"
|
||||||
|
#include "cvar.h"
|
||||||
|
#include "net.h" // needed by: client.h
|
||||||
|
#include "protocol.h" // needed by: client.h
|
||||||
|
#include "cmd.h"
|
||||||
|
#include "keys.h"
|
||||||
|
#include "sbar.h"
|
||||||
|
#include "sound.h"
|
||||||
|
#include "render.h" // needed by: client.h, gl_model.h, glquake.h
|
||||||
|
#include "client.h" // need cls in this file
|
||||||
|
#include "console.h"
|
||||||
|
#include "qendian.h"
|
||||||
|
#include "qargs.h"
|
||||||
|
#include "compat.h"
|
||||||
|
#include "d_local.h"
|
||||||
|
#include "input.h"
|
||||||
|
|
||||||
|
|
||||||
cvar_t *in_grab;
|
cvar_t *_windowed_mouse;
|
||||||
|
|
||||||
|
int old_windowed_mouse;
|
||||||
|
|
||||||
static float oldin_grab = 0;
|
// static float oldin_grab = 0;
|
||||||
|
|
||||||
extern viddef_t vid; // global video state
|
extern viddef_t vid; // global video state
|
||||||
unsigned short d_8to16table[256];
|
unsigned short d_8to16table[256];
|
||||||
|
@ -56,18 +78,12 @@ unsigned short d_8to16table[256];
|
||||||
int VGA_width, VGA_height, VGA_rowbytes, VGA_bufferrowbytes = 0;
|
int VGA_width, VGA_height, VGA_rowbytes, VGA_bufferrowbytes = 0;
|
||||||
byte *VGA_pagebase;
|
byte *VGA_pagebase;
|
||||||
|
|
||||||
int VID_options_items = 1;
|
|
||||||
|
|
||||||
static SDL_Surface *screen = NULL;
|
static SDL_Surface *screen = NULL;
|
||||||
|
|
||||||
static qboolean mouse_avail;
|
static qboolean mouse_avail;
|
||||||
static float mouse_x, mouse_y;
|
static float mouse_x, mouse_y;
|
||||||
static int mouse_oldbuttonstate = 0;
|
static int mouse_oldbuttonstate = 0;
|
||||||
|
|
||||||
// No support for option menus
|
|
||||||
// void (*vid_menudrawfn)(void) = NULL;
|
|
||||||
// void (*vid_menukeyfn)(int key) = NULL;
|
|
||||||
|
|
||||||
void VID_SetPalette (unsigned char *palette)
|
void VID_SetPalette (unsigned char *palette)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -110,8 +126,8 @@ void VID_Init (unsigned char *palette)
|
||||||
{
|
{
|
||||||
if (pnum >= com_argc-2)
|
if (pnum >= com_argc-2)
|
||||||
Sys_Error("VID: -winsize <width> <height>\n");
|
Sys_Error("VID: -winsize <width> <height>\n");
|
||||||
vid.width = Q_atoi(com_argv[pnum+1]);
|
vid.width = atoi(com_argv[pnum+1]);
|
||||||
vid.height = Q_atoi(com_argv[pnum+2]);
|
vid.height = atoi(com_argv[pnum+2]);
|
||||||
if (!vid.width || !vid.height)
|
if (!vid.width || !vid.height)
|
||||||
Sys_Error("VID: Bad window width/height\n");
|
Sys_Error("VID: Bad window width/height\n");
|
||||||
}
|
}
|
||||||
|
@ -226,15 +242,15 @@ void D_EndDirectRect (int x, int y, int width, int height)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
Sys_SendKeyEvents
|
IN_SendKeyEvents
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Sys_SendKeyEvents(void)
|
void IN_SendKeyEvents (void)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
int sym, state;
|
int sym, state, but;
|
||||||
int modstate;
|
int modstate;
|
||||||
|
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
{
|
{
|
||||||
|
@ -278,7 +294,7 @@ void Sys_SendKeyEvents(void)
|
||||||
case SDLK_LCTRL: sym = K_CTRL; break;
|
case SDLK_LCTRL: sym = K_CTRL; break;
|
||||||
case SDLK_RALT:
|
case SDLK_RALT:
|
||||||
case SDLK_LALT: sym = K_ALT; break;
|
case SDLK_LALT: sym = K_ALT; break;
|
||||||
case SDLK_CAPSLOCK: sym = K_CAPSLOCK; break;
|
case SDLK_CAPSLOCK: sym = K_CAPSLOCK; break;
|
||||||
case SDLK_KP0:
|
case SDLK_KP0:
|
||||||
if(modstate & KMOD_NUM) sym = K_INS;
|
if(modstate & KMOD_NUM) sym = K_INS;
|
||||||
else sym = SDLK_0;
|
else sym = SDLK_0;
|
||||||
|
@ -333,21 +349,53 @@ void Sys_SendKeyEvents(void)
|
||||||
Key_Event(sym, state);
|
Key_Event(sym, state);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
if (in_grab->value)
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
but = event.button.button;
|
||||||
|
if (but == 2)
|
||||||
|
but = 3;
|
||||||
|
else if (but == 3)
|
||||||
|
but = 2;
|
||||||
|
|
||||||
|
switch (but)
|
||||||
{
|
{
|
||||||
if ((event.motion.x != (vid.width/2)) ||
|
case 1:
|
||||||
(event.motion.y != (vid.height/2)) ) {
|
case 2:
|
||||||
mouse_x = event.motion.xrel*10;
|
case 3:
|
||||||
mouse_y = event.motion.yrel*10;
|
Key_Event(K_MOUSE1 + but - 1, event.type
|
||||||
if ( (event.motion.x < ((vid.width/2)-(vid.width/4))) ||
|
== SDL_MOUSEBUTTONDOWN);
|
||||||
(event.motion.x > ((vid.width/2)+(vid.width/4))) ||
|
break;
|
||||||
(event.motion.y < ((vid.height/2)-(vid.height/4))) ||
|
case 4:
|
||||||
(event.motion.y > ((vid.height/2)+(vid.height/4))) ) {
|
Key_Event(K_MWHEELUP, 1);
|
||||||
SDL_WarpMouse(vid.width/2, vid.height/2);
|
Key_Event(K_MWHEELUP, 0);
|
||||||
}
|
break;
|
||||||
}
|
case 5:
|
||||||
|
Key_Event(K_MWHEELDOWN, 1);
|
||||||
|
Key_Event(K_MWHEELDOWN, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_MOUSEMOTION:
|
||||||
|
if (_windowed_mouse->value)
|
||||||
|
{
|
||||||
|
if ((event.motion.x != (vid.width/2))
|
||||||
|
|| (event.motion.y != (vid.height/2)) )
|
||||||
|
{
|
||||||
|
mouse_x = event.motion.xrel*10;
|
||||||
|
mouse_y = event.motion.yrel*10;
|
||||||
|
if ((event.motion.x < ((vid.width/2)-(vid.width/4))) ||
|
||||||
|
(event.motion.x > ((vid.width/2)+(vid.width/4))) ||
|
||||||
|
(event.motion.y < ((vid.height/2)-(vid.height/4))) ||
|
||||||
|
(event.motion.y > ((vid.height/2)+(vid.height/4))) )
|
||||||
|
SDL_WarpMouse(vid.width/2, vid.height/2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mouse_x = event.motion.xrel*10;
|
||||||
|
mouse_y = event.motion.yrel*10;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
|
@ -358,22 +406,27 @@ void Sys_SendKeyEvents(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (oldin_grab != in_grab->value)
|
}
|
||||||
{ oldin_grab = in_grab->value;
|
|
||||||
if (in_grab->value && !COM_CheckParm("-nomouse"))
|
|
||||||
{ mouse_avail = 1;
|
void
|
||||||
}
|
IN_Commands (void)
|
||||||
else
|
{
|
||||||
{ mouse_avail = 0;
|
if (old_windowed_mouse != _windowed_mouse->value)
|
||||||
}
|
{
|
||||||
|
old_windowed_mouse = _windowed_mouse->value;
|
||||||
|
if (!_windowed_mouse->value)
|
||||||
|
SDL_WM_GrabInput (SDL_GRAB_OFF);
|
||||||
|
else
|
||||||
|
SDL_WM_GrabInput (SDL_GRAB_ON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IN_Init (void)
|
void IN_Init (void)
|
||||||
{
|
{
|
||||||
in_grab = Cvar_Get ("in_grab","0",CVAR_ARCHIVE,"None");
|
_windowed_mouse = Cvar_Get ("_windowed_mouse","0",CVAR_ARCHIVE,"None");
|
||||||
|
|
||||||
if ( COM_CheckParm("-nomouse") && !in_grab->value)
|
if ( COM_CheckParm("-nomouse") && !_windowed_mouse->value)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mouse_x = mouse_y = 0.0;
|
mouse_x = mouse_y = 0.0;
|
||||||
|
@ -384,10 +437,6 @@ void IN_Shutdown (void)
|
||||||
{
|
{
|
||||||
mouse_avail = 0;
|
mouse_avail = 0;
|
||||||
}
|
}
|
||||||
void IN_SendKeyEvents (void)
|
|
||||||
{
|
|
||||||
Sys_SendKeyEvents ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IN_Frame(void)
|
void IN_Frame(void)
|
||||||
{
|
{
|
||||||
|
@ -439,34 +488,6 @@ void IN_Move (usercmd_t *cmd)
|
||||||
mouse_x = mouse_y = 0.0;
|
mouse_x = mouse_y = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
Sys_ConsoleInput
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
char *Sys_ConsoleInput (void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void VID_ExtraOptionDraw(unsigned int options_draw_cursor)
|
|
||||||
{
|
|
||||||
// Windowed Mouse
|
|
||||||
M_Print (16, options_draw_cursor+=8, " Use Mouse");
|
|
||||||
M_DrawCheckbox (220, options_draw_cursor, in_grab->value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VID_ExtraOptionCmd(int option_cursor)
|
|
||||||
{
|
|
||||||
switch(option_cursor) {
|
|
||||||
case 1: // in_grab
|
|
||||||
in_grab->value = !in_grab->value;
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void VID_InitCvars ()
|
void VID_InitCvars ()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue