コード例 #1
0
DWORD unix_process(DWORD lparam)
{
	SDL_Event event;

	while( SDL_PollEvent(&event) ) {
		switch(event.type) {
			case SDL_ACTIVEEVENT:
				if( (event.active.state & SDL_APPACTIVE) || (event.active.state & SDL_APPINPUTFOCUS) ) {
					if (fAppActive != event.active.gain) {
						if(!Cmdline_no_unfocus_pause)
						{
							if (fAppActive)
								game_pause();
							else
								game_unpause();
						}
					}
					fAppActive = event.active.gain;
					gr_activate(fAppActive);
				}
				break;

			case SDL_KEYDOWN:
				/*if( (event.key.keysym.mod & KMOD_ALT) && (event.key.keysym.sym == SDLK_RETURN) ) {
					Gr_screen_mode_switch = 1;
					gr_activate(1);
					break;
				}*/

				if( SDLtoFS2[event.key.keysym.sym] ) {
					key_mark( SDLtoFS2[event.key.keysym.sym], 1, 0 );
				}
				break;

			case SDL_KEYUP:
				/*if( (event.key.keysym.mod & KMOD_ALT) && (event.key.keysym.sym == SDLK_RETURN) ) {
					Gr_screen_mode_switch = 0;
					break;
				}*/

				if (SDLtoFS2[event.key.keysym.sym]) {
					key_mark( SDLtoFS2[event.key.keysym.sym], 0, 0 );
				}
				break;

			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				if (event.button.button == SDL_BUTTON_LEFT)
					mouse_mark_button( MOUSE_LEFT_BUTTON, event.button.state );
				else if (event.button.button == SDL_BUTTON_MIDDLE)
					mouse_mark_button( MOUSE_MIDDLE_BUTTON, event.button.state );
				else if (event.button.button == SDL_BUTTON_RIGHT)
					mouse_mark_button( MOUSE_RIGHT_BUTTON, event.button.state );

				break;

			case SDL_JOYHATMOTION:
				joy_set_hat_state( event.jhat.value );
				break;

			case SDL_JOYBUTTONDOWN:
			case SDL_JOYBUTTONUP:
				if (event.jbutton.button < JOY_NUM_BUTTONS) {
					joy_set_button_state( event.jbutton.button, event.jbutton.state );
				}
				break;
		}
	}

	return 0;
}
コード例 #2
0
DWORD unix_process2(DWORD lparam)
{
	SDL_Event event;
	while(SDL_PollEvent(&event)) {
		switch(event.type) {
		case SDL_ACTIVEEVENT:
			if (event.active.state & (SDL_APPACTIVE | SDL_APPINPUTFOCUS)) {
				mprintf(("SDL_ACTIVEEVENT (%02x, %02x) happened\n",
							event.active.state, event.active.gain));
				fAppActive = event.active.gain;
			}
			break;

		case SDL_KEYDOWN: {
      case SDL_KEYUP:
			if (event.key.keysym.scancode <= 8) {
				Assert(event.key.keysym.scancode == 0);
				break;
			}
			
			// the keycode returned by SDL seems to be 8 higher than Win32...
			byte keydata = event.key.keysym.scancode - 8;
			int latency = 0; // don't think we can get this from SDL

			int mark;
			if (event.type == SDL_KEYDOWN) {
				mprintf(("Key press detected: Scancode: %02X, keycode: %02X\n", 
							keydata, event.key.keysym.sym));
				mark = 1;
			} else {
				mprintf(("Key release detected: Scancode: %02X, keycode: %02X\n", 
							keydata, event.key.keysym.sym));
				mark = 0;
			}

			byte trans_key = sdl_key_translation[keydata];
			if (trans_key) {
				// SDL scancodes are different than Win32 in some cases...
				mprintf(("  Translating to %02x\n", trans_key));
				keydata = trans_key;
			}

			key_mark( keydata, mark, latency );
			break;
		}

		case SDL_MOUSEBUTTONDOWN:
		case SDL_MOUSEBUTTONUP:
		{
			int state = (event.button.state == SDL_PRESSED);
			uint button;
			switch (event.button.button) {
			case SDL_BUTTON_LEFT:
				mouse_mark_button(MOUSE_LEFT_BUTTON, state);
				break;
			case SDL_BUTTON_MIDDLE:
				mouse_mark_button(MOUSE_MIDDLE_BUTTON, state);
				break;
			case SDL_BUTTON_RIGHT:
				mouse_mark_button(MOUSE_RIGHT_BUTTON, state);
				break;
			}
		}
		}
	}


	  // mharris TODO
//  	  XEvent event_return;
//  	  while (true) {
//  			 XNextEvent(display, &event_return);
//  			 if (event_return.type = DestroyNotify)
//  					break;
//  	  }
	return 0;
}