void osgSDLViewer::handleEvents(SDL_Event& event) { switch(event.type) { case SDL_USEREVENT: //handleUserEvents(&event); break; case SDL_KEYDOWN: // Quit when user presses Esc key. switch(event.key.keysym.sym) { case SDLK_ESCAPE: mDone = true; break; default: OnKeyDown( event.key.keysym.sym, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; } break; case SDL_KEYUP: OnKeyUp( event.key.keysym.sym ); break; case SDL_MOUSEMOTION: OnMouseMoved( event.button.button, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; case SDL_MOUSEBUTTONUP: OnMouseButtonUp( event.button.button, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; case SDL_MOUSEBUTTONDOWN: OnMouseButtonDown( event.button.button, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; case SDL_ACTIVEEVENT: if ( event.active.state & SDL_APPACTIVE ) { if ( event.active.gain ) { mMinimized = false; OnWindowActive(); } else { mMinimized = true; OnWindowInactive(); } } break; case SDL_VIDEORESIZE: { resize(event.resize.w, event.resize.h); } break; case SDL_QUIT: mDone = true; break; default: break; } // End switch }
void CWindow::MessagePump () { #ifdef WIN32 MSG msg; while (true) { // Manage the messages if some are waiting if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) { if (!GetMessage (&msg, NULL, 0, 0 )) { m_hWnd = NULL; break; } TranslateMessage (&msg); DispatchMessage (&msg); } // No message to manage ? else { if (m_Active) { // call the virtual activity method OnWindowActive (); } else { // make sure we go to sleep if we have nothing else to do WaitMessage(); } } } #else SDL_Event event; bool quit = false; WinProc(WM_ACTIVATEAPP, WA_ACTIVE, 0); // Start main game loop here while (!quit) { while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: WinProc(WM_KEYDOWN, event.key.keysym.sym, event.key.keysym.mod); break; case SDL_KEYUP: WinProc(WM_KEYUP, event.key.keysym.sym, event.key.keysym.mod); break; case SDL_JOYAXISMOTION: // Handle Joystick Motion WinProc(SDL_JOYAXISMOTION, (WPARAM)&event.jaxis, (LPARAM)&event); break; case SDL_JOYBUTTONDOWN: // Handle Joystick buttons case SDL_JOYBUTTONUP: WinProc(event.type, (WPARAM)&event.jbutton, (LPARAM)&event); break; case SDL_VIDEORESIZE: // resize our window WinProc(WM_SIZE, (WPARAM)&event.resize, (LPARAM)&event); break; case SDL_ACTIVEEVENT: if (event.active.state != SDL_APPMOUSEFOCUS) { if (event.active.gain) WinProc(WM_ACTIVATEAPP, WA_ACTIVE, 0); else WinProc(WM_ACTIVATEAPP, 0, 0); } break; case SDL_QUIT: WinProc(WM_CLOSE, (WPARAM)&event, 0); quit = true; break; } } if (m_Active) { // call the virtual activity method OnWindowActive (); SDL_Delay(1); // rest for the cpu } } #endif }