示例#1
0
static void events(void) {
	SDL_Event event;

	static const int button_map[] = {
		[SDL_BUTTON_LEFT] = 1,
		[SDL_BUTTON_RIGHT] = 2,
		[SDL_BUTTON_MIDDLE] = 3,
		// SDL2 Additional buttons
		[SDL_BUTTON_X1] = 4,
		[SDL_BUTTON_X2] = 5,
	};

	while (SDL_PollEvent(&event)) {
		switch (event.type) {
			case SDL_QUIT : loop_run = 0; break;

			case SDL_KEYDOWN :	event_key(event.key.keysym.sym&511, 1); break;
			case SDL_KEYUP :	event_key(event.key.keysym.sym&511, 0); break;

			case SDL_MOUSEMOTION :
				event_mouse(0, 0, event.motion.x, event.motion.y,
						event.motion.xrel, event.motion.yrel); break;

			case SDL_MOUSEBUTTONUP :
			case SDL_MOUSEBUTTONDOWN :
				event_mouse(button_map[event.button.button],
						event.button.type == SDL_MOUSEBUTTONDOWN ? 1:0,
						event.button.x, event.button.y, 0, 0); break;
				break;
		}
	}
}
示例#2
0
文件: event.c 项目: nocrew/ostis
int event_parse(SDL_Event ev)
{
  switch(ev.type) {
  case SDL_KEYDOWN:
    return event_key(ev.key, EVENT_PRESS);
  case SDL_KEYUP:
    return event_key(ev.key, EVENT_RELEASE);
  case SDL_MOUSEMOTION:
    return event_mouse(ev.motion);
  case SDL_MOUSEBUTTONDOWN:
    return event_button(ev.button, EVENT_PRESS);
  case SDL_MOUSEBUTTONUP:
    return event_button(ev.button, EVENT_RELEASE);
  case SDL_JOYAXISMOTION:
    return event_joystick(ev.jaxis);
  case SDL_JOYBUTTONDOWN:
  case SDL_JOYBUTTONUP:
    return event_fire(ev.jbutton);
  case SDL_WINDOWEVENT:
    if(ev.window.windowID == screen_window_id) {
      if(ev.window.event == SDL_WINDOWEVENT_RESIZED) {
        if((ev.window.data1 % 512) == 0 && (ev.window.data2 % 314) == 0)
          screen_make_texture(SDL_SCALING_NEAREST);
        else
          screen_make_texture(SDL_SCALING_LINEAR);
      }
    }
    break;
  case SDL_QUIT:
    if(debugger)
      return EVENT_DEBUG;
    else {
      SDL_Quit();
      exit(0);
    }
  }

  return EVENT_NONE;
}
示例#3
0
BOOL gamecore_proc(void) {

	int		event;

#ifndef DISABLE_DIALOG
	if (gamecore.gamecfg.enablepopup) {
		int x, y;
		UINT btn;
		UINT key;
		BOOL r;
		btn = inputmng_getmouse(&x, &y);
		key = inputmng_getkey();
		if (btn & RBUTTON_DOWNBIT) {
			r = sysmenu_menuopen(TRUE, x, y);
		}
		else if (key & KEY_MENU) {
			r = sysmenu_menuopen(TRUE, 0, 0);
		}
		else {
			r = FAILURE;
		}
		if (r == SUCCESS) {
			inputmng_resetmouse(0);
			inputmng_resetkey(0);
			menubase_modalproc();
			event = gamecore.event;
			if ((event >= GAMEEV_SUCCESS) && (event < GAMEEV_FADEIN)) {
				vramdraw_setrect(mainvram, NULL);
				vramdraw_draw();
			}
		}
	}
	if (menuvram != NULL) {
		menubase_proc();
	}
#endif

	event = gamecore.event;
	if ((event >= GAMEEV_SUCCESS) && (event < GAMEEV_FADEIN)) {
		anime_exec();
	}
	switch(event) {
		case GAMEEV_SUCCESS:
			event = script_dispatch();
			break;

		case GAMEEV_TEXTOUT:
			event = textdisp_exec();
			break;

		case GAMEEV_WAITMOUSE:
			event = event_mouse();
			break;

		case GAMEEV_CMDWIN:
			event = event_cmdwin();
			break;

		case GAMEEV_WAITPCMEND:
			event = event_waitpcmend();
			break;

		case GAMEEV_MSGCLK:
			event = event_msgclk();
			break;

		case GAMEEV_IRCLK:
			event = event_irclk();
			break;

		case GAMEEV_WAIT:
			event = event_wait();
			break;

		case GAMEEV_FADEIN:
			event = effect_fadeinexec();
			break;

		case GAMEEV_FADEOUT:
			event = effect_fadeoutexec();
			break;

		case GAMEEV_EFFECT:
			event = effect_exec();
			break;

		case GAMEEV_GRAYSCALE:
			event = effect_grayscale();
			break;

		case GAMEEV_SCROLL:
			event = effect_scroll();
			break;

		case GAMEEV_QUAKE:
			event = effect_quake();
			break;

		case GAMEEV_FORCE:
			event = GAMEEV_SUCCESS;
			break;

		case GAMEEV_EXIT:
			return(FAILURE);
	}

	gamecore.event = event;
	if (event < 0) {
		const char *e;
		e = gamecore_seterrorevent(event);
#ifndef DISABLE_DIALOG
		if (e) {
			menumbox(e, gamecore.suf.key, MBOX_ICONSTOP | MBOX_OK);
			return(FAILURE);
		}
#endif
		TRACEOUT(("error: %d", event));
		TRACEOUT(("system terminate."));
	}
	return(SUCCESS);
}