static void process_events( void ) { /* Our SDL event placeholder. */ SDL_Event event; /* Grab all the events off the queue. */ while( SDL_PollEvent( &event ) ) { switch( event.type ) { case SDL_KEYUP: handle_key_up( &event.key.keysym ); break; case SDL_KEYDOWN: /* Handle key presses. */ handle_key_down( &event.key.keysym ); break; case SDL_QUIT: /* Handle quit requests (like Ctrl-c). */ quit_tutorial( 0 ); break; } } }
int moth_gui::read_book(moth_book *book) { SDL_Event event; this->book = book; create_textures(); index.name = "START"; book->build_index(index); while(running) { while(SDL_PollEvent(&event)) { switch( event.type ) { case SDL_KEYDOWN: handle_key_down(&event.key.keysym); break; case SDL_KEYUP: handle_key_up(&event.key.keysym); break; case SDL_MOUSEMOTION: handle_mouse_motion(&event.motion); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: handle_mouse_button(&event.button); break; case SDL_VIDEORESIZE: handle_resize(&event.resize); break; case SDL_QUIT: running = 0; break; } } show_pages(); } return SUCCESS; }
void View::key_up(SDL_keysym key) { cout << "key up!: " << key.sym << endl; if (!handle_key_up(key)) { // throw Unhandled_Key(key); } }
static void process_events(void) { /* Our SDL event placeholder. */ SDL_Event event; /* Only poll + sleep if we are autoscrolling or doing * something else that is interactive */ if (((autoscroll) && autoscroll_var) || key_button_down) { if (!SDL_PollEvent(&event)) { /* If we add a sleep, the scrolling won't be super smooth. * Regardless, I think we need to find something to make sure we * don't eat 100% cpu just checking for events. * * I found that 10ms is not a bad wait. Theoretically we want to * wait 1000ms / fps (usually 60) -> 16ms. * */ usleep(16000); if (autoscroll) { if (key_button_down & LEAST_KEY_DOWN) autoscroll_var += 1; if (key_button_down & LEAST_KEY_UP) autoscroll_var -= 1; scroll -= autoscroll_var; } else { if (key_button_down & LEAST_KEY_DOWN) scroll -= 5; if (key_button_down & LEAST_KEY_UP) scroll += 5; } redraw = 1; } } else { SDL_WaitEvent(&event); } next_event: switch (event.type) { case SDL_KEYDOWN: /* Handle key presses. */ handle_key_down(&event.key.keysym); break; case SDL_KEYUP: handle_key_up(&event.key.keysym); break; case SDL_QUIT: /* Handle quit requests (like Ctrl-c). */ quit_tutorial(0); break; case SDL_VIDEORESIZE: handle_resize(event.resize); break; case SDL_VIDEOEXPOSE: redraw = 1; break; case SDL_MOUSEBUTTONDOWN: handle_mouse_down(&event.button); break; case SDL_MOUSEBUTTONUP: handle_mouse_up(&event.button); break; case SDL_MOUSEMOTION: handle_mouse_motion(&event.motion); break; /* A thread completed its rendering * * The thread structure of the completed job is contained * within the data1 pointer of the event. */ case LEAST_PAGE_COMPLETE: finish_page_render((struct least_thread*)event.user.data1); redraw = 1; break; } /* Clear event, just in case SDL doesn't do this (TODO) */ memset(&event, 0, sizeof(SDL_Event)); /* If there are more events, handle them before drawing. * This is required for scrolling with the mouse - without this, * it is pretty slow and lags. */ if (SDL_PollEvent(&event)) { goto next_event; } }
static int loop(void) { SDL_Event e; int d = 1; int ax, ay, dx, dy; /* Process SDL events. */ while (d && SDL_PollEvent(&e)) { switch (e.type) { case SDL_QUIT: return 0; case SDL_MOUSEMOTION: /* Convert to OpenGL coordinates. */ ax = +e.motion.x; ay = -e.motion.y + video.window_h; dx = +e.motion.xrel; dy = (config_get_d(CONFIG_MOUSE_INVERT) ? +e.motion.yrel : -e.motion.yrel); /* Convert to pixels. */ ax = ROUND(ax * video.device_scale); ay = ROUND(ay * video.device_scale); dx = ROUND(dx * video.device_scale); dy = ROUND(dy * video.device_scale); st_point(ax, ay, dx, dy); break; case SDL_MOUSEBUTTONDOWN: d = st_click(e.button.button, 1); break; case SDL_MOUSEBUTTONUP: d = st_click(e.button.button, 0); break; case SDL_KEYDOWN: d = handle_key_dn(&e); break; case SDL_KEYUP: d = handle_key_up(&e); break; case SDL_WINDOWEVENT: switch (e.window.event) { case SDL_WINDOWEVENT_FOCUS_LOST: if (video_get_grab()) goto_state(&st_pause); break; case SDL_WINDOWEVENT_MOVED: if (config_get_d(CONFIG_DISPLAY) != video_display()) config_set_d(CONFIG_DISPLAY, video_display()); break; case SDL_WINDOWEVENT_RESIZED: log_printf("Resize event (%u, %dx%d)\n", e.window.windowID, e.window.data1, e.window.data2); break; case SDL_WINDOWEVENT_SIZE_CHANGED: log_printf("Size change event (%u, %dx%d)\n", e.window.windowID, e.window.data1, e.window.data2); break; } break; case SDL_TEXTINPUT: text_input_str(e.text.text, 1); break; case SDL_JOYAXISMOTION: st_stick(e.jaxis.axis, JOY_VALUE(e.jaxis.value)); break; case SDL_JOYBUTTONDOWN: d = st_buttn(e.jbutton.button, 1); break; case SDL_JOYBUTTONUP: d = st_buttn(e.jbutton.button, 0); break; case SDL_MOUSEWHEEL: st_wheel(e.wheel.x, e.wheel.y); break; } } /* Process events via the tilt sensor API. */ if (tilt_stat()) { int b; int s; st_angle(tilt_get_x(), tilt_get_z()); while (tilt_get_button(&b, &s)) { const int X = config_get_d(CONFIG_JOYSTICK_AXIS_X0); const int Y = config_get_d(CONFIG_JOYSTICK_AXIS_Y0); const int L = config_get_d(CONFIG_JOYSTICK_DPAD_L); const int R = config_get_d(CONFIG_JOYSTICK_DPAD_R); const int U = config_get_d(CONFIG_JOYSTICK_DPAD_U); const int D = config_get_d(CONFIG_JOYSTICK_DPAD_D); if (b == L || b == R || b == U || b == D) { static int pad[4] = { 0, 0, 0, 0 }; /* Track the state of the D-pad buttons. */ if (b == L) pad[0] = s; else if (b == R) pad[1] = s; else if (b == U) pad[2] = s; else if (b == D) pad[3] = s; /* Convert D-pad button events into joystick axis motion. */ if (pad[0] && !pad[1]) st_stick(X, -1.0f); else if (pad[1] && !pad[0]) st_stick(X, +1.0f); else st_stick(X, 0.0f); if (pad[2] && !pad[3]) st_stick(Y, -1.0f); else if (pad[3] && !pad[2]) st_stick(Y, +1.0f); else st_stick(Y, 0.0f); } else d = st_buttn(b, s); } } return d; }
static int loop(void) { SDL_Event e; int d = 1; /* Process SDL events. */ while (d && SDL_PollEvent(&e)) { switch (e.type) { case SDL_QUIT: return 0; case SDL_MOUSEMOTION: st_point(+e.motion.x, -e.motion.y + config_get_d(CONFIG_HEIGHT), +e.motion.xrel, config_get_d(CONFIG_MOUSE_INVERT) ? +e.motion.yrel : -e.motion.yrel); break; case SDL_MOUSEBUTTONDOWN: d = st_click(e.button.button, 1); break; case SDL_MOUSEBUTTONUP: d = st_click(e.button.button, 0); break; case SDL_KEYDOWN: d = handle_key_dn(&e); break; case SDL_KEYUP: d = handle_key_up(&e); break; /* FIXME: SDL_ACTIVEEVENT not available. * http://instead.googlecode.com/svn/trunk/src/sdl-instead/input.c */ /* case SDL_ACTIVEEVENT: if (e.active.state == SDL_APPINPUTFOCUS) if (e.active.gain == 0 && video_get_grab()) goto_state(&st_pause); break; */ case SDL_JOYAXISMOTION: st_stick(e.jaxis.axis, JOY_VALUE(e.jaxis.value)); break; case SDL_JOYBUTTONDOWN: d = st_buttn(e.jbutton.button, 1); break; case SDL_JOYBUTTONUP: d = st_buttn(e.jbutton.button, 0); break; } } /* Process events via the tilt sensor API. */ if (tilt_stat()) { int b; int s; st_angle(tilt_get_x(), tilt_get_z()); while (tilt_get_button(&b, &s)) { const int X = config_get_d(CONFIG_JOYSTICK_AXIS_X); const int Y = config_get_d(CONFIG_JOYSTICK_AXIS_Y); const int L = config_get_d(CONFIG_JOYSTICK_DPAD_L); const int R = config_get_d(CONFIG_JOYSTICK_DPAD_R); const int U = config_get_d(CONFIG_JOYSTICK_DPAD_U); const int D = config_get_d(CONFIG_JOYSTICK_DPAD_D); if (b == L || b == R || b == U || b == D) { static int pad[4] = { 0, 0, 0, 0 }; /* Track the state of the D-pad buttons. */ if (b == L) pad[0] = s; else if (b == R) pad[1] = s; else if (b == U) pad[2] = s; else if (b == D) pad[3] = s; /* Convert D-pad button events into joystick axis motion. */ if (pad[0] && !pad[1]) st_stick(X, -1.0f); else if (pad[1] && !pad[0]) st_stick(X, +1.0f); else st_stick(X, 0.0f); if (pad[2] && !pad[3]) st_stick(Y, -1.0f); else if (pad[3] && !pad[2]) st_stick(Y, +1.0f); else st_stick(Y, 0.0f); } else d = st_buttn(b, s); } } return d; }