39 u_int8 * input::keystate=NULL;
40 u_int8 * input::p_keystate=NULL;
41 bool input::text_input =
false;
44 u_int16 input::mouse_posx, input::mouse_posy;
45 bool input::mouse_button[3];
46 std::queue<std::string> input::input_queue;
50 const u_int8 *state = SDL_GetKeyboardState(&keystatelength);
51 keystate=
new u_int8[keystatelength];
52 memcpy(keystate, state, keystatelength);
55 p_keystate=
new u_int8[keystatelength];
56 memset(p_keystate, 0, keystatelength);
66 static SDL_Event
event;
68 while (SDL_PollEvent(&event))
74 SDL_Scancode idx =
event.key.keysym.scancode;
75 if (!event.key.repeat)
82 if (idx == SDL_SCANCODE_BACKSPACE ||
83 idx == SDL_SCANCODE_DELETE ||
84 idx == SDL_SCANCODE_RETURN)
86 input_queue.push(std::string(1, (
char)event.key.keysym.sym));
94 SDL_Scancode idx =
event.key.keysym.scancode;
102 input_queue.push(event.text.text);
113 SDL_Scancode idx = SDL_GetScancodeFromKey(key);
115 if((ret)&&(p_keystate[idx])) p_keystate[idx]--;
122 SDL_Scancode idx = SDL_GetScancodeFromKey(key);
124 if((ret)&&(!(--p_keystate[idx]))) keystate[idx]=0;
130 static SDL_Event
event;
133 if(SDL_PeepEvents(&event,1,SDL_GETEVENT,SDL_KEYDOWN,SDL_KEYDOWN)==1)
136 if(p_keystate[event.key.keysym.scancode]) p_keystate[
event.key.keysym.scancode]--;
137 keystate[
event.key.keysym.scancode]=0;
139 if (b)
return(event.key.keysym.sym);
145 if (!input_queue.empty())
147 std::string utf8_result(input_queue.front());
154 void input::start_text_input()
156 while(!input_queue.empty()) input_queue.pop();
157 SDL_StartTextInput();
161 void input::stop_text_input()
170 memset(p_keystate, 0, keystatelength);
#define s_int32
32 bits long signed integer
#define u_int16
16 bits long unsigned integer
#define u_int8
8 bits long unsigned integer