Esempio n. 1
0
	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              
	}
Esempio n. 2
0
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
}