added SDL support

This commit is contained in:
Magnus Auvinen 2008-10-20 17:47:42 +00:00
parent 2b9688f3c3
commit 8404143afe
10 changed files with 1521 additions and 81 deletions

View file

@ -5,6 +5,7 @@ config:add(OptTestCompileC("stackprotector", "int main(){return 0;}", "-fstack-p
config:add(OptFindLibrary("zlib", "zlib.h", false))
config:add(OptFindLibrary("glfw", "glfw.h", false))
config:add(OptFindLibrary("portaudio", "portaudio.h_FAIL", false))
config:add(OptFindLibrary("sdl", "SDL/SDL.h", false))
config:add(OptFindLibrary("coreaudio", "AudioUnit/AudioUnit.h", false))
config:add(OptFindLibrary("alsa", "alsa/asoundlib.h", false))
@ -125,7 +126,10 @@ end
function build(settings)
settings.objdir = Path("objs")
settings.cc.output = intermediate_output_func
use_sdl = 1
if config.sdl.value == 0 then use_sdl = nil end
if config.compiler.value == "cl" then
settings.cc.flags = "/wd4244"
settings.linker.flags = ""
@ -164,76 +168,84 @@ function build(settings)
settings.linker.libs:add("shell32")
end
-- build glfw if needed (not tested)
if config.glfw.value == 1 then
settings.linker.libs:add("glfw")
if config.glfw.include_path then
settings.cc.includes:add(config.glfw.include_path)
end
if use_sdl then
glfw = {}
else
glfw_settings = settings:copy()
glfw_settings.cc.includes:add("src/external/glfw/include")
glfw_settings.cc.includes:add("src/engine/external/glfw/lib")
glfw_settings.cc.includes:add("src/engine/external/glfw/lib/" .. glfw_platform)
glfw = Compile(glfw_settings, Collect(
"src/engine/external/glfw/lib/*.c",
"src/engine/external/glfw/lib/" .. glfw_platform .. "/*.c"))
settings.cc.includes:add("src/engine/external/glfw/include")
end
-- build portaudio
if config.portaudio.value == 1 then
settings.linker.libs:add("portaudio")
if config.portaudio.include_path then
settings.cc.includes:add(config.portaudio.include_path)
end
portaudio = {}
else
pa_settings = settings:copy()
pa_hostapis = {}
if config.alsa.value == 1 then pa_hostapis["alsa"] = 1 end
if config.dsound.value == 1 then
pa_hostapis["dsound"] = 1
settings.cc.defines:add("CONFIG_NO_SDL")
-- build glfw if needed (not tested)
if config.glfw.value == 1 then
settings.linker.libs:add("glfw")
if config.glfw.include_path then
settings.cc.includes:add(config.glfw.include_path)
end
glfw = {}
else
pa_settings.cc.defines:add("PA_NO_DS")
glfw_settings = settings:copy()
glfw_settings.cc.includes:add("src/external/glfw/include")
glfw_settings.cc.includes:add("src/engine/external/glfw/lib")
glfw_settings.cc.includes:add("src/engine/external/glfw/lib/" .. glfw_platform)
glfw = Compile(glfw_settings, Collect(
"src/engine/external/glfw/lib/*.c",
"src/engine/external/glfw/lib/" .. glfw_platform .. "/*.c"))
settings.cc.includes:add("src/engine/external/glfw/include")
end
if config.coreaudio.value == 1 then pa_hostapis["coreaudio"] = 1 end
if config.oss_sys.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_SYS_SOUNDCARD_H")
elseif config.oss_linux.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_LINUX_SOUNDCARD_H")
elseif config.oss_machine.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_MACHINE_SOUNDCARD_H")
end
pa_settings.cc.defines:add("PA_NO_WMME")
pa_settings.cc.defines:add("PA_NO_ASIO")
pa_settings.cc.includes:add("src/engine/external/portaudio/include")
pa_settings.cc.includes:add("src/engine/external/portaudio/src/common")
pa_settings.cc.includes:add("src/engine/external/portaudio/src/os/" .. pa_platform)
pa_api_files = {}
for api,v in pa_hostapis do
pa_settings.cc.defines:add("PA_USE_"..string.upper(api))
pa_api_files[api] = Collect("src/engine/external/portaudio/src/hostapi/" .. api .. "/*.c")
end
portaudio = Compile(pa_settings,
Collect("src/engine/external/portaudio/src/common/*.c"),
Collect("src/engine/external/portaudio/src/os/" .. pa_platform .. "/*.c"),
pa_api_files)
settings.cc.includes:add("src/engine/external/portaudio/include")
-- build portaudio
if config.portaudio.value == 1 then
settings.linker.libs:add("portaudio")
if config.portaudio.include_path then
settings.cc.includes:add(config.portaudio.include_path)
end
portaudio = {}
else
pa_settings = settings:copy()
pa_hostapis = {}
if config.alsa.value == 1 then pa_hostapis["alsa"] = 1 end
if config.dsound.value == 1 then
pa_hostapis["dsound"] = 1
else
pa_settings.cc.defines:add("PA_NO_DS")
end
if config.coreaudio.value == 1 then pa_hostapis["coreaudio"] = 1 end
if config.oss_sys.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_SYS_SOUNDCARD_H")
elseif config.oss_linux.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_LINUX_SOUNDCARD_H")
elseif config.oss_machine.value == 1 then
pa_hostapis["oss"] = 1
pa_settings.cc.defines:add("HAVE_MACHINE_SOUNDCARD_H")
end
pa_settings.cc.defines:add("PA_NO_WMME")
pa_settings.cc.defines:add("PA_NO_ASIO")
pa_settings.cc.includes:add("src/engine/external/portaudio/include")
pa_settings.cc.includes:add("src/engine/external/portaudio/src/common")
pa_settings.cc.includes:add("src/engine/external/portaudio/src/os/" .. pa_platform)
pa_api_files = {}
for api,v in pa_hostapis do
pa_settings.cc.defines:add("PA_USE_"..string.upper(api))
pa_api_files[api] = Collect("src/engine/external/portaudio/src/hostapi/" .. api .. "/*.c")
end
portaudio = Compile(pa_settings,
Collect("src/engine/external/portaudio/src/common/*.c"),
Collect("src/engine/external/portaudio/src/os/" .. pa_platform .. "/*.c"),
pa_api_files)
settings.cc.includes:add("src/engine/external/portaudio/include")
end
end
-- compile zlib if needed
if config.zlib.value == 1 then
settings.linker.libs:add("z")
@ -291,6 +303,7 @@ function build(settings)
client_settings.linker.libs:add("X11")
client_settings.linker.libs:add("GL")
client_settings.linker.libs:add("GLU")
if use_sdl then client_settings.linker.libs:add("SDL") end
end
elseif family == "windows" then
client_settings.linker.libs:add("opengl32")

311
scripts/SDL_keysym.h Normal file
View file

@ -0,0 +1,311 @@
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2006 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#ifndef _SDL_keysym_h
#define _SDL_keysym_h
/* What we really want is a mapping of every raw key on the keyboard.
To support international keyboards, we use the range 0xA1 - 0xFF
as international virtual keycodes. We'll follow in the footsteps of X11...
The names of the keys
*/
typedef enum {
/* The keyboard syms have been cleverly chosen to map to ASCII */
SDLK_UNKNOWN = 0,
SDLK_FIRST = 0,
SDLK_BACKSPACE = 8,
SDLK_TAB = 9,
SDLK_CLEAR = 12,
SDLK_RETURN = 13,
SDLK_PAUSE = 19,
SDLK_ESCAPE = 27,
SDLK_SPACE = 32,
SDLK_EXCLAIM = 33,
SDLK_QUOTEDBL = 34,
SDLK_HASH = 35,
SDLK_DOLLAR = 36,
SDLK_AMPERSAND = 38,
SDLK_QUOTE = 39,
SDLK_LEFTPAREN = 40,
SDLK_RIGHTPAREN = 41,
SDLK_ASTERISK = 42,
SDLK_PLUS = 43,
SDLK_COMMA = 44,
SDLK_MINUS = 45,
SDLK_PERIOD = 46,
SDLK_SLASH = 47,
SDLK_0 = 48,
SDLK_1 = 49,
SDLK_2 = 50,
SDLK_3 = 51,
SDLK_4 = 52,
SDLK_5 = 53,
SDLK_6 = 54,
SDLK_7 = 55,
SDLK_8 = 56,
SDLK_9 = 57,
SDLK_COLON = 58,
SDLK_SEMICOLON = 59,
SDLK_LESS = 60,
SDLK_EQUALS = 61,
SDLK_GREATER = 62,
SDLK_QUESTION = 63,
SDLK_AT = 64,
/*
Skip uppercase letters
*/
SDLK_LEFTBRACKET = 91,
SDLK_BACKSLASH = 92,
SDLK_RIGHTBRACKET = 93,
SDLK_CARET = 94,
SDLK_UNDERSCORE = 95,
SDLK_BACKQUOTE = 96,
SDLK_a = 97,
SDLK_b = 98,
SDLK_c = 99,
SDLK_d = 100,
SDLK_e = 101,
SDLK_f = 102,
SDLK_g = 103,
SDLK_h = 104,
SDLK_i = 105,
SDLK_j = 106,
SDLK_k = 107,
SDLK_l = 108,
SDLK_m = 109,
SDLK_n = 110,
SDLK_o = 111,
SDLK_p = 112,
SDLK_q = 113,
SDLK_r = 114,
SDLK_s = 115,
SDLK_t = 116,
SDLK_u = 117,
SDLK_v = 118,
SDLK_w = 119,
SDLK_x = 120,
SDLK_y = 121,
SDLK_z = 122,
SDLK_DELETE = 127,
/* End of ASCII mapped keysyms */
/* International keyboard syms */
SDLK_WORLD_0 = 160, /* 0xA0 */
SDLK_WORLD_1 = 161,
SDLK_WORLD_2 = 162,
SDLK_WORLD_3 = 163,
SDLK_WORLD_4 = 164,
SDLK_WORLD_5 = 165,
SDLK_WORLD_6 = 166,
SDLK_WORLD_7 = 167,
SDLK_WORLD_8 = 168,
SDLK_WORLD_9 = 169,
SDLK_WORLD_10 = 170,
SDLK_WORLD_11 = 171,
SDLK_WORLD_12 = 172,
SDLK_WORLD_13 = 173,
SDLK_WORLD_14 = 174,
SDLK_WORLD_15 = 175,
SDLK_WORLD_16 = 176,
SDLK_WORLD_17 = 177,
SDLK_WORLD_18 = 178,
SDLK_WORLD_19 = 179,
SDLK_WORLD_20 = 180,
SDLK_WORLD_21 = 181,
SDLK_WORLD_22 = 182,
SDLK_WORLD_23 = 183,
SDLK_WORLD_24 = 184,
SDLK_WORLD_25 = 185,
SDLK_WORLD_26 = 186,
SDLK_WORLD_27 = 187,
SDLK_WORLD_28 = 188,
SDLK_WORLD_29 = 189,
SDLK_WORLD_30 = 190,
SDLK_WORLD_31 = 191,
SDLK_WORLD_32 = 192,
SDLK_WORLD_33 = 193,
SDLK_WORLD_34 = 194,
SDLK_WORLD_35 = 195,
SDLK_WORLD_36 = 196,
SDLK_WORLD_37 = 197,
SDLK_WORLD_38 = 198,
SDLK_WORLD_39 = 199,
SDLK_WORLD_40 = 200,
SDLK_WORLD_41 = 201,
SDLK_WORLD_42 = 202,
SDLK_WORLD_43 = 203,
SDLK_WORLD_44 = 204,
SDLK_WORLD_45 = 205,
SDLK_WORLD_46 = 206,
SDLK_WORLD_47 = 207,
SDLK_WORLD_48 = 208,
SDLK_WORLD_49 = 209,
SDLK_WORLD_50 = 210,
SDLK_WORLD_51 = 211,
SDLK_WORLD_52 = 212,
SDLK_WORLD_53 = 213,
SDLK_WORLD_54 = 214,
SDLK_WORLD_55 = 215,
SDLK_WORLD_56 = 216,
SDLK_WORLD_57 = 217,
SDLK_WORLD_58 = 218,
SDLK_WORLD_59 = 219,
SDLK_WORLD_60 = 220,
SDLK_WORLD_61 = 221,
SDLK_WORLD_62 = 222,
SDLK_WORLD_63 = 223,
SDLK_WORLD_64 = 224,
SDLK_WORLD_65 = 225,
SDLK_WORLD_66 = 226,
SDLK_WORLD_67 = 227,
SDLK_WORLD_68 = 228,
SDLK_WORLD_69 = 229,
SDLK_WORLD_70 = 230,
SDLK_WORLD_71 = 231,
SDLK_WORLD_72 = 232,
SDLK_WORLD_73 = 233,
SDLK_WORLD_74 = 234,
SDLK_WORLD_75 = 235,
SDLK_WORLD_76 = 236,
SDLK_WORLD_77 = 237,
SDLK_WORLD_78 = 238,
SDLK_WORLD_79 = 239,
SDLK_WORLD_80 = 240,
SDLK_WORLD_81 = 241,
SDLK_WORLD_82 = 242,
SDLK_WORLD_83 = 243,
SDLK_WORLD_84 = 244,
SDLK_WORLD_85 = 245,
SDLK_WORLD_86 = 246,
SDLK_WORLD_87 = 247,
SDLK_WORLD_88 = 248,
SDLK_WORLD_89 = 249,
SDLK_WORLD_90 = 250,
SDLK_WORLD_91 = 251,
SDLK_WORLD_92 = 252,
SDLK_WORLD_93 = 253,
SDLK_WORLD_94 = 254,
SDLK_WORLD_95 = 255, /* 0xFF */
/* Numeric keypad */
SDLK_KP0 = 256,
SDLK_KP1 = 257,
SDLK_KP2 = 258,
SDLK_KP3 = 259,
SDLK_KP4 = 260,
SDLK_KP5 = 261,
SDLK_KP6 = 262,
SDLK_KP7 = 263,
SDLK_KP8 = 264,
SDLK_KP9 = 265,
SDLK_KP_PERIOD = 266,
SDLK_KP_DIVIDE = 267,
SDLK_KP_MULTIPLY = 268,
SDLK_KP_MINUS = 269,
SDLK_KP_PLUS = 270,
SDLK_KP_ENTER = 271,
SDLK_KP_EQUALS = 272,
/* Arrows + Home/End pad */
SDLK_UP = 273,
SDLK_DOWN = 274,
SDLK_RIGHT = 275,
SDLK_LEFT = 276,
SDLK_INSERT = 277,
SDLK_HOME = 278,
SDLK_END = 279,
SDLK_PAGEUP = 280,
SDLK_PAGEDOWN = 281,
/* Function keys */
SDLK_F1 = 282,
SDLK_F2 = 283,
SDLK_F3 = 284,
SDLK_F4 = 285,
SDLK_F5 = 286,
SDLK_F6 = 287,
SDLK_F7 = 288,
SDLK_F8 = 289,
SDLK_F9 = 290,
SDLK_F10 = 291,
SDLK_F11 = 292,
SDLK_F12 = 293,
SDLK_F13 = 294,
SDLK_F14 = 295,
SDLK_F15 = 296,
/* Key state modifier keys */
SDLK_NUMLOCK = 300,
SDLK_CAPSLOCK = 301,
SDLK_SCROLLOCK = 302,
SDLK_RSHIFT = 303,
SDLK_LSHIFT = 304,
SDLK_RCTRL = 305,
SDLK_LCTRL = 306,
SDLK_RALT = 307,
SDLK_LALT = 308,
SDLK_RMETA = 309,
SDLK_LMETA = 310,
SDLK_LSUPER = 311, /* Left "Windows" key */
SDLK_RSUPER = 312, /* Right "Windows" key */
SDLK_MODE = 313, /* "Alt Gr" key */
SDLK_COMPOSE = 314, /* Multi-key compose key */
/* Miscellaneous function keys */
SDLK_HELP = 315,
SDLK_PRINT = 316,
SDLK_SYSREQ = 317,
SDLK_BREAK = 318,
SDLK_MENU = 319,
SDLK_POWER = 320, /* Power Macintosh power key */
SDLK_EURO = 321, /* Some european keyboards */
SDLK_UNDO = 322, /* Atari keyboard has Undo */
/* Add any other keys here */
SDLK_LAST
} SDLKey;
/* Enumeration of valid key mods (possibly OR'd together) */
typedef enum {
KMOD_NONE = 0x0000,
KMOD_LSHIFT= 0x0001,
KMOD_RSHIFT= 0x0002,
KMOD_LCTRL = 0x0040,
KMOD_RCTRL = 0x0080,
KMOD_LALT = 0x0100,
KMOD_RALT = 0x0200,
KMOD_LMETA = 0x0400,
KMOD_RMETA = 0x0800,
KMOD_NUM = 0x1000,
KMOD_CAPS = 0x2000,
KMOD_MODE = 0x4000,
KMOD_RESERVED = 0x8000
} SDLMod;
#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL)
#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT)
#define KMOD_ALT (KMOD_LALT|KMOD_RALT)
#define KMOD_META (KMOD_LMETA|KMOD_RMETA)
#endif /* _SDL_keysym_h */

View file

@ -7,6 +7,10 @@ lines = [line.strip() for line in file(glfw).readlines()]
# genereate keys.h file
f = file("src/engine/e_keys.h", "w")
keynames_sdl = []
for i in range(0, 512):
keynames_sdl += ["&%d"%i]
keynames = {}
KEY_MOUSE_FIRST = 256+128
KEY_MOUSE_WHEEL_DOWN = KEY_MOUSE_FIRST-2
@ -15,9 +19,9 @@ KEY_MOUSE_WHEEL_UP = KEY_MOUSE_FIRST-1
print >>f, "#ifndef ENGINE_KEYS_H"
print >>f, "#define ENGINE_KEYS_H"
print >>f, '/* AUTO GENERATED! DO NOT EDIT MANUALLY! */'
print >>f, ""
print >>f, "enum"
print >>f, "{"
print >>f, "#ifdef CONFIG_NO_SDL"
# do keys
for line in lines:
@ -60,12 +64,45 @@ for line in lines:
# add to keynames
exec("%s = %s" % (key, value))
exec("keynames[%s] = '%s'" % (value, key))
print >>f, "\tKEY_LAST"
print >>f, "#else"
highestid = 0
for line in open("scripts/SDL_keysym.h"):
l = line.strip().split("=")
if len(l) == 2 and "SDLK_" in line:
key = l[0].strip().replace("SDLK_", "KEY_")
value = int(l[1].split(",")[0].strip())
print >>f, "\t%s = %d,"%(key, value)
keynames_sdl[value] = key.replace("KEY_", "").lower()
if value > highestid:
highestid =value
print >>f, "\tKEY_MOUSE_1 = %d,"%(highestid+1); keynames_sdl[highestid+1] = "mouse1"
print >>f, "\tKEY_MOUSE_2 = %d,"%(highestid+2); keynames_sdl[highestid+2] = "mouse2"
print >>f, "\tKEY_MOUSE_3 = %d,"%(highestid+3); keynames_sdl[highestid+3] = "mouse3"
print >>f, "\tKEY_MOUSE_4 = %d,"%(highestid+4); keynames_sdl[highestid+4] = "mouse4"
print >>f, "\tKEY_MOUSE_5 = %d,"%(highestid+5); keynames_sdl[highestid+5] = "mouse5"
print >>f, "\tKEY_MOUSE_6 = %d,"%(highestid+6); keynames_sdl[highestid+6] = "mouse6"
print >>f, "\tKEY_MOUSE_7 = %d,"%(highestid+7); keynames_sdl[highestid+7] = "mouse7"
print >>f, "\tKEY_MOUSE_8 = %d,"%(highestid+8); keynames_sdl[highestid+8] = "mouse8"
print >>f, "\tKEY_MOUSE_WHEEL_UP = %d,"%(highestid+9); keynames_sdl[highestid+9] = "mousewheelup"
print >>f, "\tKEY_MOUSE_WHEEL_DOWN = %d,"%(highestid+10); keynames_sdl[highestid+10] = "mousewheeldown"
print >>f, "\tKEY_LAST,"
print >>f, "\tKEY_DEL=KEY_DELETE,"
print >>f, "\tKEY_ENTER=KEY_RETURN,"
print >>f, "\tKEY_KP_SUBTRACT=KEY_KP_MINUS,"
print >>f, "\tKEY_KP_ADD=KEY_KP_PLUS,"
print >>f, "\tKEY_ESC=KEY_ESCAPE"
print >>f, "#endif"
print >>f, "};"
print >>f, ""
print >>f, "#endif"
f.close()
# generate keynames.c file
@ -76,6 +113,7 @@ print >>f, "#include <string.h>"
print >>f, ""
print >>f, "static const char key_strings[512][16] ="
print >>f, "{"
print >>f, "#ifdef CONFIG_NO_SDL"
for i in range(0, 512):
n = "&%d"%i
if i >= 48 and i <= 57 or i >= 65 and i <= 90:
@ -83,7 +121,12 @@ for i in range(0, 512):
elif i in keynames:
n = keynames[i][4:].lower().replace("_", "")
print >>f, "\t\"%s\"," % n
print >>f, "#else"
print >>f, ""
for n in keynames_sdl:
print >>f, '\t"%s",'%n
print >>f, "#endif"
print >>f, "};"
print >>f, ""
print >>f, "const char *inp_key_name(int k) { if (k >= 0 && k < 512) return key_strings[k]; else return key_strings[0]; }"

View file

@ -1,5 +1,13 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <GL/glfw.h>
#ifdef CONFIG_NO_SDL
#include <GL/glfw.h>
#else
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#include <engine/external/pnglite/pnglite.h>
#include <base/system.h>
@ -77,6 +85,11 @@ static TEXTURE textures[MAX_TEXTURES];
static int first_free_texture;
static int memory_usage = 0;
#ifdef CONFIG_NO_SDL
#else
SDL_Surface *screen_surface;
#endif
#if 0
typedef struct { unsigned char r, g, b, a; } PIXEL;
@ -289,12 +302,14 @@ static void draw_quad()
flush();
}
#ifdef CONFIG_NO_SDL
static void screen_resize(int width, int height)
{
screen_width = width;
screen_height = height;
glViewport(0, 0, screen_width, screen_height);
}
#endif
int gfx_init()
{
@ -303,7 +318,6 @@ int gfx_init()
screen_width = config.gfx_screen_width;
screen_height = config.gfx_screen_height;
glfwInit();
if(config.dbg_stress)
{
@ -311,6 +325,10 @@ int gfx_init()
screen_height = 240;
}
#ifdef CONFIG_NO_SDL
glfwInit();
/* set antialiasing */
if(config.gfx_fsaa_samples)
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, config.gfx_fsaa_samples);
@ -357,6 +375,62 @@ int gfx_init()
/* We don't want to see the window when we run the stress testing */
if(config.dbg_stress)
glfwIconifyWindow();
#else
if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0)
{
dbg_msg("gfx", "Unable to init SDL: %s\n", SDL_GetError());
return -1;
}
atexit(SDL_Quit);
{
const SDL_VideoInfo *info;
int flags = SDL_OPENGL;
info = SDL_GetVideoInfo();
/* set flags */
flags = SDL_OPENGL;
flags |= SDL_GL_DOUBLEBUFFER;
flags |= SDL_HWPALETTE;
flags |= SDL_RESIZABLE;
if(info->hw_available)
flags |= SDL_HWSURFACE;
else
flags |= SDL_SWSURFACE;
if(info->blit_hw)
flags |= SDL_HWACCEL;
if(config.gfx_fullscreen)
flags |= SDL_FULLSCREEN;
/* set gl attributes */
if(config.gfx_fsaa_samples)
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, config.gfx_fsaa_samples);
}
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
/* set caption */
SDL_WM_SetCaption("Teeworlds", "Teeworlds");
/* create window */
screen_surface = SDL_SetVideoMode(screen_width, screen_height, 0, flags);
if(screen_surface == NULL)
{
dbg_msg("gfx", "Unable to set video mode: %s\n", SDL_GetError());
return -1;
}
}
SDL_ShowCursor(0);
#endif
/* Init vertices */
if (vertices)
@ -447,12 +521,20 @@ void gfx_mask_op(int mask, int write)
int gfx_window_active()
{
#ifdef CONFIG_NO_SDL
return glfwGetWindowParam(GLFW_ACTIVE) == GL_TRUE ? 1 : 0;
#else
return 1; /* TODO: SDL*/
#endif
}
int gfx_window_open()
{
#ifdef CONFIG_NO_SDL
return glfwGetWindowParam(GLFW_OPENED) == GL_TRUE ? 1 : 0;
#else
return 1; /* TODO: SDL*/
#endif
}
VIDEO_MODE fakemodes[] = {
@ -490,12 +572,52 @@ int gfx_get_video_modes(VIDEO_MODE *list, int maxcount)
return count;
}
#ifdef CONFIG_NO_SDL
return glfwGetVideoModes((GLFWvidmode *)list, maxcount);
#else
{
/* TODO: fix this code on osx or windows */
int num_modes = 0;
SDL_Rect **modes;
modes = SDL_ListModes(NULL, SDL_OPENGL|SDL_GL_DOUBLEBUFFER|SDL_FULLSCREEN);
if(modes == NULL)
{
/* no modes */
}
else if(modes == (SDL_Rect**)-1)
{
/* all modes */
}
else
{
int i;
for(i = 0; modes[i]; ++i)
{
if(num_modes == maxcount)
break;
list[num_modes].width = modes[i]->w;
list[num_modes].height = modes[i]->h;
list[num_modes].red = 8;
list[num_modes].green = 8;
list[num_modes].blue = 8;
num_modes++;
}
}
}
return 1; /* TODO: SDL*/
#endif
}
void gfx_set_vsync(int val)
{
#ifdef CONFIG_NO_SDL
glfwSwapInterval(val);
#else
/* TODO: SDL*/
#endif
}
int gfx_unload_texture(int index)
@ -697,8 +819,13 @@ void gfx_shutdown()
{
if (vertices)
mem_free(vertices);
#ifdef CONFIG_NO_SDL
glfwCloseWindow();
glfwTerminate();
#else
/* TODO: SDL, is this correct? */
SDL_Quit();
#endif
}
void gfx_screenshot()
@ -783,19 +910,26 @@ void gfx_swap()
{
static PERFORMACE_INFO pscope = {"glfwSwapBuffers", 0};
perf_start(&pscope);
#ifdef CONFIG_NO_SDL
glfwSwapBuffers();
#else
SDL_GL_SwapBuffers();
#endif
perf_end();
}
if(render_enable && config.gfx_finish)
glFinish();
#ifdef CONFIG_NO_SDL
{
static PERFORMACE_INFO pscope = {"glfwPollEvents", 0};
perf_start(&pscope);
glfwPollEvents();
perf_end();
}
#else
#endif
}
void gfx_screenshot_direct(const char *filename)
@ -1350,10 +1484,16 @@ void gfx_clip_disable()
void gfx_minimize()
{
#ifdef CONFIG_NO_SDL
glfwIconifyWindow();
#else
#endif
}
void gfx_maximize()
{
#ifdef CONFIG_NO_SDL
glfwRestoreWindow();
#else
#endif
}

View file

@ -1,14 +1,25 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <string.h>
#include <GL/glfw.h>
#ifdef CONFIG_NO_SDL
#include <GL/glfw.h>
#else
#include <SDL/SDL.h>
#endif
#include <base/system.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
static int keyboard_state[2][1024]; /* TODO: fix this!! */
#ifdef CONFIG_NO_SDL
static int keyboard_state[2][1024] = {{0}}; /* TODO: fix this!! */
#else
static unsigned char keyboard_state[2][1024] = {{0}}; /* TODO: fix this!! */
#endif
static int keyboard_current = 0;
#ifdef CONFIG_NO_SDL
static int keyboard_first = 1;
#endif
static struct
@ -20,14 +31,16 @@ static struct
static unsigned char input_state[2][1024] = {{0}, {0}};
static int input_current = 0;
#ifdef CONFIG_NO_SDL
static unsigned int last_release = 0;
#endif
static unsigned int release_delta = -1;
void inp_mouse_relative(int *x, int *y)
{
static int last_x = 0, last_y = 0;
static int last_sens = 100.0f;
int nx, ny;
int nx = 0, ny = 0;
float sens = config.inp_mousesens/100.0f;
if(last_sens != config.inp_mousesens)
@ -37,8 +50,9 @@ void inp_mouse_relative(int *x, int *y)
last_sens = config.inp_mousesens;
}
#ifdef CONFIG_NO_SDL
glfwGetMousePos(&nx, &ny);
nx *= sens;
ny *= sens;
@ -46,6 +60,12 @@ void inp_mouse_relative(int *x, int *y)
*y = ny-last_y;
last_x = nx;
last_y = ny;
#else
SDL_GetRelativeMouseState(&nx, &ny);
*x = nx*sens;
*y = ny*sens;
#endif
}
enum
@ -88,6 +108,7 @@ INPUT_EVENT inp_get_event(int index)
return input_events[index];
}
#ifdef CONFIG_NO_SDL
static void char_callback(int character, int action)
{
if(action == GLFW_PRESS && character < 256)
@ -177,6 +198,25 @@ void inp_mouse_mode_relative()
/*if (!config.gfx_debug_resizable)*/
glfwDisable(GLFW_MOUSE_CURSOR);
}
#else
void inp_init()
{
SDL_EnableUNICODE(1);
}
void inp_mouse_mode_absolute()
{
SDL_ShowCursor(1);
SDL_WM_GrabInput(SDL_GRAB_OFF);
}
void inp_mouse_mode_relative()
{
SDL_ShowCursor(0);
SDL_WM_GrabInput(SDL_GRAB_ON);
}
#endif
int inp_mouse_doubleclick()
{
@ -211,8 +251,9 @@ int inp_button_pressed(int button) { return keyboard_state[keyboard_current][but
void inp_update()
{
#ifdef CONFIG_NO_SDL
int i, v;
/* clear and begin count on the other one */
mem_zero(&input_count[input_current], sizeof(input_count[input_current]));
mem_copy(input_state[input_current], input_state[input_current^1], sizeof(input_state[input_current]));
@ -234,6 +275,75 @@ void inp_update()
v = glfwGetKey(i) == GLFW_PRESS ? 1 : 0;
keyboard_state[keyboard_current][i] = v;
}
#else
int i;
/* clear and begin count on the other one */
mem_zero(&input_count[input_current], sizeof(input_count[input_current]));
mem_copy(input_state[input_current], input_state[input_current^1], sizeof(input_state[input_current]));
input_current^=1;
{
Uint8 *state = SDL_GetKeyState(&i);
if(i >= KEY_LAST)
i = KEY_LAST-1;
mem_copy(keyboard_state[keyboard_current], state, i);
}
keyboard_state[keyboard_current][KEY_MOUSE_1] = 0;
keyboard_state[keyboard_current][KEY_MOUSE_2] = 0;
keyboard_state[keyboard_current][KEY_MOUSE_3] = 0;
i = SDL_GetMouseState(NULL, NULL);
if(i&SDL_BUTTON(1)) keyboard_state[keyboard_current][KEY_MOUSE_1] = 1;
if(i&SDL_BUTTON(2)) keyboard_state[keyboard_current][KEY_MOUSE_2] = 1;
if(i&SDL_BUTTON(3)) keyboard_state[keyboard_current][KEY_MOUSE_3] = 1;
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
int key = -1;
int action = INPFLAG_PRESS;
switch (event.type)
{
/* handle keys */
case SDL_KEYDOWN:
if(event.key.keysym.unicode < 255)
add_event(event.key.keysym.unicode, 0, 0);
key = event.key.keysym.sym;
break;
case SDL_KEYUP:
action = INPFLAG_RELEASE;
key = event.key.keysym.sym;
break;
/* handle mouse buttons */
case SDL_MOUSEBUTTONUP:
action = INPFLAG_RELEASE;
case SDL_MOUSEBUTTONDOWN:
key = KEY_MOUSE_1+event.button.button-1;
break;
/* other messages */
case SDL_QUIT:
exit(0);
}
/* */
if(key != -1)
{
input_count[input_current^1][key].presses++;
input_state[input_current^1][key] = 1;
add_event(0, key, action);
}
}
}
#endif
if(inp_key_pressed('q'))
exit(1);
/* handle mouse wheel */
/*

View file

@ -3,8 +3,14 @@
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#ifdef CONFIG_NO_SDL
#include <portaudio.h>
#else
#include <SDL/SDL.h>
#endif
#include <engine/external/wavpack/wavpack.h>
#include <portaudio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
@ -232,16 +238,24 @@ static void mix(short *final_out, unsigned frames)
}
}
#ifdef CONFIG_NO_SDL
static PaStream *stream;
static int pacallback(const void *in, void *out, unsigned long frames, const PaStreamCallbackTimeInfo* time, PaStreamCallbackFlags status, void *user)
{
mix(out, frames);
return 0;
}
#else
static void sdlcallback(void *unused, Uint8 *stream, int len)
{
mix((short *)stream, len/2/2);
}
#endif
static PaStream *stream;
int snd_init()
{
#ifdef CONFIG_NO_SDL
PaStreamParameters params;
PaError err = Pa_Initialize();
@ -293,7 +307,36 @@ int snd_init()
pacallback, /* specify our custom callback */
0x0); /* pass our data through to callback */
err = Pa_StartStream(stream);
#else
SDL_AudioSpec format;
sound_lock = lock_create();
if(!config.snd_enable)
return 0;
mixing_rate = config.snd_rate;
/* Set 16-bit stereo audio at 22Khz */
format.freq = config.snd_rate;
format.format = AUDIO_S16;
format.channels = 2;
format.samples = 512; /* A good value for games */
format.callback = sdlcallback;
format.userdata = NULL;
/* Open the audio device and start playing sound! */
if(SDL_OpenAudio(&format, NULL) < 0)
{
dbg_msg("client/sound", "unable to open audio: %s", SDL_GetError());
return -1;
}
else
dbg_msg("client/sound", "sound init successful");
SDL_PauseAudio(0);
#endif
sound_enabled = 1;
snd_update(); /* update the volume */
return 0;
@ -319,9 +362,12 @@ int snd_update()
int snd_shutdown()
{
#ifdef CONFIG_NO_SDL
Pa_StopStream(stream);
Pa_Terminate();
#else
SDL_CloseAudio();
#endif
lock_destroy(sound_lock);
return 0;

View file

@ -4,6 +4,7 @@
static const char key_strings[512][16] =
{
#ifdef CONFIG_NO_SDL
"&0",
"&1",
"&2",
@ -516,6 +517,521 @@ static const char key_strings[512][16] =
"&509",
"&510",
"&511",
#else
"first",
"&1",
"&2",
"&3",
"&4",
"&5",
"&6",
"&7",
"backspace",
"tab",
"&10",
"&11",
"clear",
"return",
"&14",
"&15",
"&16",
"&17",
"&18",
"pause",
"&20",
"&21",
"&22",
"&23",
"&24",
"&25",
"&26",
"escape",
"&28",
"&29",
"&30",
"&31",
"space",
"exclaim",
"quotedbl",
"hash",
"dollar",
"&37",
"ampersand",
"quote",
"leftparen",
"rightparen",
"asterisk",
"plus",
"comma",
"minus",
"period",
"slash",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"colon",
"semicolon",
"less",
"equals",
"greater",
"question",
"at",
"&65",
"&66",
"&67",
"&68",
"&69",
"&70",
"&71",
"&72",
"&73",
"&74",
"&75",
"&76",
"&77",
"&78",
"&79",
"&80",
"&81",
"&82",
"&83",
"&84",
"&85",
"&86",
"&87",
"&88",
"&89",
"&90",
"leftbracket",
"backslash",
"rightbracket",
"caret",
"underscore",
"backquote",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"&123",
"&124",
"&125",
"&126",
"delete",
"&128",
"&129",
"&130",
"&131",
"&132",
"&133",
"&134",
"&135",
"&136",
"&137",
"&138",
"&139",
"&140",
"&141",
"&142",
"&143",
"&144",
"&145",
"&146",
"&147",
"&148",
"&149",
"&150",
"&151",
"&152",
"&153",
"&154",
"&155",
"&156",
"&157",
"&158",
"&159",
"world_0",
"world_1",
"world_2",
"world_3",
"world_4",
"world_5",
"world_6",
"world_7",
"world_8",
"world_9",
"world_10",
"world_11",
"world_12",
"world_13",
"world_14",
"world_15",
"world_16",
"world_17",
"world_18",
"world_19",
"world_20",
"world_21",
"world_22",
"world_23",
"world_24",
"world_25",
"world_26",
"world_27",
"world_28",
"world_29",
"world_30",
"world_31",
"world_32",
"world_33",
"world_34",
"world_35",
"world_36",
"world_37",
"world_38",
"world_39",
"world_40",
"world_41",
"world_42",
"world_43",
"world_44",
"world_45",
"world_46",
"world_47",
"world_48",
"world_49",
"world_50",
"world_51",
"world_52",
"world_53",
"world_54",
"world_55",
"world_56",
"world_57",
"world_58",
"world_59",
"world_60",
"world_61",
"world_62",
"world_63",
"world_64",
"world_65",
"world_66",
"world_67",
"world_68",
"world_69",
"world_70",
"world_71",
"world_72",
"world_73",
"world_74",
"world_75",
"world_76",
"world_77",
"world_78",
"world_79",
"world_80",
"world_81",
"world_82",
"world_83",
"world_84",
"world_85",
"world_86",
"world_87",
"world_88",
"world_89",
"world_90",
"world_91",
"world_92",
"world_93",
"world_94",
"world_95",
"kp0",
"kp1",
"kp2",
"kp3",
"kp4",
"kp5",
"kp6",
"kp7",
"kp8",
"kp9",
"kp_period",
"kp_divide",
"kp_multiply",
"kp_minus",
"kp_plus",
"kp_enter",
"kp_equals",
"up",
"down",
"right",
"left",
"insert",
"home",
"end",
"pageup",
"pagedown",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15",
"&297",
"&298",
"&299",
"numlock",
"capslock",
"scrollock",
"rshift",
"lshift",
"rctrl",
"lctrl",
"ralt",
"lalt",
"rmeta",
"lmeta",
"lsuper",
"rsuper",
"mode",
"compose",
"help",
"print",
"sysreq",
"break",
"menu",
"power",
"euro",
"undo",
"mouse1",
"mouse2",
"mouse3",
"mouse4",
"mouse5",
"mouse6",
"mouse7",
"mouse8",
"mousewheelup",
"mousewheeldown",
"&333",
"&334",
"&335",
"&336",
"&337",
"&338",
"&339",
"&340",
"&341",
"&342",
"&343",
"&344",
"&345",
"&346",
"&347",
"&348",
"&349",
"&350",
"&351",
"&352",
"&353",
"&354",
"&355",
"&356",
"&357",
"&358",
"&359",
"&360",
"&361",
"&362",
"&363",
"&364",
"&365",
"&366",
"&367",
"&368",
"&369",
"&370",
"&371",
"&372",
"&373",
"&374",
"&375",
"&376",
"&377",
"&378",
"&379",
"&380",
"&381",
"&382",
"&383",
"&384",
"&385",
"&386",
"&387",
"&388",
"&389",
"&390",
"&391",
"&392",
"&393",
"&394",
"&395",
"&396",
"&397",
"&398",
"&399",
"&400",
"&401",
"&402",
"&403",
"&404",
"&405",
"&406",
"&407",
"&408",
"&409",
"&410",
"&411",
"&412",
"&413",
"&414",
"&415",
"&416",
"&417",
"&418",
"&419",
"&420",
"&421",
"&422",
"&423",
"&424",
"&425",
"&426",
"&427",
"&428",
"&429",
"&430",
"&431",
"&432",
"&433",
"&434",
"&435",
"&436",
"&437",
"&438",
"&439",
"&440",
"&441",
"&442",
"&443",
"&444",
"&445",
"&446",
"&447",
"&448",
"&449",
"&450",
"&451",
"&452",
"&453",
"&454",
"&455",
"&456",
"&457",
"&458",
"&459",
"&460",
"&461",
"&462",
"&463",
"&464",
"&465",
"&466",
"&467",
"&468",
"&469",
"&470",
"&471",
"&472",
"&473",
"&474",
"&475",
"&476",
"&477",
"&478",
"&479",
"&480",
"&481",
"&482",
"&483",
"&484",
"&485",
"&486",
"&487",
"&488",
"&489",
"&490",
"&491",
"&492",
"&493",
"&494",
"&495",
"&496",
"&497",
"&498",
"&499",
"&500",
"&501",
"&502",
"&503",
"&504",
"&505",
"&506",
"&507",
"&508",
"&509",
"&510",
"&511",
#endif
};
const char *inp_key_name(int k) { if (k >= 0 && k < 512) return key_strings[k]; else return key_strings[0]; }

View file

@ -1,9 +1,9 @@
#ifndef ENGINE_KEYS_H
#define ENGINE_KEYS_H
/* AUTO GENERATED! DO NOT EDIT MANUALLY! */
enum
{
#ifdef CONFIG_NO_SDL
KEY_UNKNOWN = -1,
KEY_SPACE = 32,
KEY_SPECIAL = 256,
@ -82,6 +82,257 @@ enum
KEY_MOUSE_7 = KEY_MOUSE_FIRST+6,
KEY_MOUSE_8 = KEY_MOUSE_FIRST+7,
KEY_LAST
#else
KEY_UNKNOWN = 0,
KEY_FIRST = 0,
KEY_BACKSPACE = 8,
KEY_TAB = 9,
KEY_CLEAR = 12,
KEY_RETURN = 13,
KEY_PAUSE = 19,
KEY_ESCAPE = 27,
KEY_SPACE = 32,
KEY_EXCLAIM = 33,
KEY_QUOTEDBL = 34,
KEY_HASH = 35,
KEY_DOLLAR = 36,
KEY_AMPERSAND = 38,
KEY_QUOTE = 39,
KEY_LEFTPAREN = 40,
KEY_RIGHTPAREN = 41,
KEY_ASTERISK = 42,
KEY_PLUS = 43,
KEY_COMMA = 44,
KEY_MINUS = 45,
KEY_PERIOD = 46,
KEY_SLASH = 47,
KEY_0 = 48,
KEY_1 = 49,
KEY_2 = 50,
KEY_3 = 51,
KEY_4 = 52,
KEY_5 = 53,
KEY_6 = 54,
KEY_7 = 55,
KEY_8 = 56,
KEY_9 = 57,
KEY_COLON = 58,
KEY_SEMICOLON = 59,
KEY_LESS = 60,
KEY_EQUALS = 61,
KEY_GREATER = 62,
KEY_QUESTION = 63,
KEY_AT = 64,
KEY_LEFTBRACKET = 91,
KEY_BACKSLASH = 92,
KEY_RIGHTBRACKET = 93,
KEY_CARET = 94,
KEY_UNDERSCORE = 95,
KEY_BACKQUOTE = 96,
KEY_a = 97,
KEY_b = 98,
KEY_c = 99,
KEY_d = 100,
KEY_e = 101,
KEY_f = 102,
KEY_g = 103,
KEY_h = 104,
KEY_i = 105,
KEY_j = 106,
KEY_k = 107,
KEY_l = 108,
KEY_m = 109,
KEY_n = 110,
KEY_o = 111,
KEY_p = 112,
KEY_q = 113,
KEY_r = 114,
KEY_s = 115,
KEY_t = 116,
KEY_u = 117,
KEY_v = 118,
KEY_w = 119,
KEY_x = 120,
KEY_y = 121,
KEY_z = 122,
KEY_DELETE = 127,
KEY_WORLD_0 = 160,
KEY_WORLD_1 = 161,
KEY_WORLD_2 = 162,
KEY_WORLD_3 = 163,
KEY_WORLD_4 = 164,
KEY_WORLD_5 = 165,
KEY_WORLD_6 = 166,
KEY_WORLD_7 = 167,
KEY_WORLD_8 = 168,
KEY_WORLD_9 = 169,
KEY_WORLD_10 = 170,
KEY_WORLD_11 = 171,
KEY_WORLD_12 = 172,
KEY_WORLD_13 = 173,
KEY_WORLD_14 = 174,
KEY_WORLD_15 = 175,
KEY_WORLD_16 = 176,
KEY_WORLD_17 = 177,
KEY_WORLD_18 = 178,
KEY_WORLD_19 = 179,
KEY_WORLD_20 = 180,
KEY_WORLD_21 = 181,
KEY_WORLD_22 = 182,
KEY_WORLD_23 = 183,
KEY_WORLD_24 = 184,
KEY_WORLD_25 = 185,
KEY_WORLD_26 = 186,
KEY_WORLD_27 = 187,
KEY_WORLD_28 = 188,
KEY_WORLD_29 = 189,
KEY_WORLD_30 = 190,
KEY_WORLD_31 = 191,
KEY_WORLD_32 = 192,
KEY_WORLD_33 = 193,
KEY_WORLD_34 = 194,
KEY_WORLD_35 = 195,
KEY_WORLD_36 = 196,
KEY_WORLD_37 = 197,
KEY_WORLD_38 = 198,
KEY_WORLD_39 = 199,
KEY_WORLD_40 = 200,
KEY_WORLD_41 = 201,
KEY_WORLD_42 = 202,
KEY_WORLD_43 = 203,
KEY_WORLD_44 = 204,
KEY_WORLD_45 = 205,
KEY_WORLD_46 = 206,
KEY_WORLD_47 = 207,
KEY_WORLD_48 = 208,
KEY_WORLD_49 = 209,
KEY_WORLD_50 = 210,
KEY_WORLD_51 = 211,
KEY_WORLD_52 = 212,
KEY_WORLD_53 = 213,
KEY_WORLD_54 = 214,
KEY_WORLD_55 = 215,
KEY_WORLD_56 = 216,
KEY_WORLD_57 = 217,
KEY_WORLD_58 = 218,
KEY_WORLD_59 = 219,
KEY_WORLD_60 = 220,
KEY_WORLD_61 = 221,
KEY_WORLD_62 = 222,
KEY_WORLD_63 = 223,
KEY_WORLD_64 = 224,
KEY_WORLD_65 = 225,
KEY_WORLD_66 = 226,
KEY_WORLD_67 = 227,
KEY_WORLD_68 = 228,
KEY_WORLD_69 = 229,
KEY_WORLD_70 = 230,
KEY_WORLD_71 = 231,
KEY_WORLD_72 = 232,
KEY_WORLD_73 = 233,
KEY_WORLD_74 = 234,
KEY_WORLD_75 = 235,
KEY_WORLD_76 = 236,
KEY_WORLD_77 = 237,
KEY_WORLD_78 = 238,
KEY_WORLD_79 = 239,
KEY_WORLD_80 = 240,
KEY_WORLD_81 = 241,
KEY_WORLD_82 = 242,
KEY_WORLD_83 = 243,
KEY_WORLD_84 = 244,
KEY_WORLD_85 = 245,
KEY_WORLD_86 = 246,
KEY_WORLD_87 = 247,
KEY_WORLD_88 = 248,
KEY_WORLD_89 = 249,
KEY_WORLD_90 = 250,
KEY_WORLD_91 = 251,
KEY_WORLD_92 = 252,
KEY_WORLD_93 = 253,
KEY_WORLD_94 = 254,
KEY_WORLD_95 = 255,
KEY_KP0 = 256,
KEY_KP1 = 257,
KEY_KP2 = 258,
KEY_KP3 = 259,
KEY_KP4 = 260,
KEY_KP5 = 261,
KEY_KP6 = 262,
KEY_KP7 = 263,
KEY_KP8 = 264,
KEY_KP9 = 265,
KEY_KP_PERIOD = 266,
KEY_KP_DIVIDE = 267,
KEY_KP_MULTIPLY = 268,
KEY_KP_MINUS = 269,
KEY_KP_PLUS = 270,
KEY_KP_ENTER = 271,
KEY_KP_EQUALS = 272,
KEY_UP = 273,
KEY_DOWN = 274,
KEY_RIGHT = 275,
KEY_LEFT = 276,
KEY_INSERT = 277,
KEY_HOME = 278,
KEY_END = 279,
KEY_PAGEUP = 280,
KEY_PAGEDOWN = 281,
KEY_F1 = 282,
KEY_F2 = 283,
KEY_F3 = 284,
KEY_F4 = 285,
KEY_F5 = 286,
KEY_F6 = 287,
KEY_F7 = 288,
KEY_F8 = 289,
KEY_F9 = 290,
KEY_F10 = 291,
KEY_F11 = 292,
KEY_F12 = 293,
KEY_F13 = 294,
KEY_F14 = 295,
KEY_F15 = 296,
KEY_NUMLOCK = 300,
KEY_CAPSLOCK = 301,
KEY_SCROLLOCK = 302,
KEY_RSHIFT = 303,
KEY_LSHIFT = 304,
KEY_RCTRL = 305,
KEY_LCTRL = 306,
KEY_RALT = 307,
KEY_LALT = 308,
KEY_RMETA = 309,
KEY_LMETA = 310,
KEY_LSUPER = 311,
KEY_RSUPER = 312,
KEY_MODE = 313,
KEY_COMPOSE = 314,
KEY_HELP = 315,
KEY_PRINT = 316,
KEY_SYSREQ = 317,
KEY_BREAK = 318,
KEY_MENU = 319,
KEY_POWER = 320,
KEY_EURO = 321,
KEY_UNDO = 322,
KEY_MOUSE_1 = 323,
KEY_MOUSE_2 = 324,
KEY_MOUSE_3 = 325,
KEY_MOUSE_4 = 326,
KEY_MOUSE_5 = 327,
KEY_MOUSE_6 = 328,
KEY_MOUSE_7 = 329,
KEY_MOUSE_8 = 330,
KEY_MOUSE_WHEEL_UP = 331,
KEY_MOUSE_WHEEL_DOWN = 332,
KEY_LAST,
KEY_DEL=KEY_DELETE,
KEY_ENTER=KEY_RETURN,
KEY_KP_SUBTRACT=KEY_KP_MINUS,
KEY_KP_ADD=KEY_KP_PLUS,
KEY_ESC=KEY_ESCAPE
#endif
};
#endif

View file

@ -6,7 +6,7 @@
bool BINDS::BINDS_SPECIAL::on_input(INPUT_EVENT e)
{
// don't handle invalid events and keys that arn't set to anything
if(e.key >= KEY_F1 && e.key <= KEY_F25 && binds->keybindings[e.key][0] != 0)
if(e.key >= KEY_F1 && e.key <= KEY_F15 && binds->keybindings[e.key][0] != 0)
{
int stroke = 0;
if(e.flags&INPFLAG_PRESS)
@ -86,9 +86,14 @@ void BINDS::set_defaults()
bind(KEY_F2, "toggle_remote_console");
bind(KEY_TAB, "+scoreboard");
bind(KEY_F10, "screenshot");
#ifdef CONFIG_NO_SDL
bind('A', "+left");
bind('D', "+right");
#else
bind('a', "+left");
bind('d', "+right");
#endif
bind(KEY_SPACE, "+jump");
bind(KEY_MOUSE_1, "+fire");
bind(KEY_MOUSE_2, "+hook");
@ -103,8 +108,13 @@ void BINDS::set_defaults()
bind(KEY_MOUSE_WHEEL_UP, "+prevweapon");
bind(KEY_MOUSE_WHEEL_DOWN, "+nextweapon");
#ifdef CONFIG_NO_SDL
bind('T', "chat all");
bind('Y', "chat team");
#else
bind('t', "chat all");
bind('y', "chat team");
#endif
bind(KEY_F3, "vote yes");
bind(KEY_F4, "vote no");

View file

@ -295,7 +295,7 @@ bool CONSOLE::on_input(INPUT_EVENT e)
{
if(console_state == CONSOLE_CLOSED)
return false;
if(e.key >= KEY_F1 && e.key <= KEY_F25)
if(e.key >= KEY_F1 && e.key <= KEY_F15)
return false;
if(e.key == KEY_ESC && (e.flags&INPFLAG_PRESS))