- Timestamp:
- 06/03/13 00:44:38 (12 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/detail/io_event_list.inc
r67 r93 2 2 NV_IO_EVENT( EV_MOUSE_BUTTON ) 3 3 NV_IO_EVENT( EV_MOUSE_MOVE ) 4 NV_IO_EVENT( EV_ACTIVE ) 5 NV_IO_EVENT( EV_RESIZE ) 4 6 NV_IO_EVENT( EV_SYSTEM ) 7 NV_IO_EVENT( EV_QUIT ) -
trunk/nv/detail/key_list.inc
r67 r93 12 12 NV_KEY( KEY_RIGHT , 20 ) 13 13 NV_KEY( KEY_DOWN , 21 ) 14 NV_KEY( KEY_DELETE , 22 ) 15 NV_KEY( KEY_INSERT , 23 ) 16 NV_KEY( KEY_CENTER , 24 ) 14 17 15 18 NV_KEY( KEY_ESCAPE , 27 ) 16 19 20 NV_KEY( KEY_SPACE , 32 ) 17 21 18 NV_KEY( KEY_SPACE , 32 ) 22 NV_KEY( KEY_QUOTE , 39 ) 23 24 NV_KEY( KEY_COMMA , 44 ) 25 NV_KEY( KEY_MINUS , 45 ) 26 NV_KEY( KEY_PERIOD , 46 ) 27 NV_KEY( KEY_SLASH , 47 ) 28 29 NV_KEY( KEY_SCOLON , 59 ) 30 NV_KEY( KEY_EQUALS , 61 ) 31 32 NV_KEY( KEY_LBRACKET, 91 ) 33 NV_KEY( KEY_BSLASH , 92 ) 34 NV_KEY( KEY_RBRACKET, 93 ) 35 36 NV_KEY( KEY_BQUOTE , 96 ) 19 37 20 38 NV_KEY( KEY_0 , 48 ) … … 55 73 NV_KEY( KEY_Y , 89 ) 56 74 NV_KEY( KEY_Z , 90 ) 75 76 NV_KEY( KEY_F1 , 131 ) 77 NV_KEY( KEY_F2 , 132 ) 78 NV_KEY( KEY_F3 , 133 ) 79 NV_KEY( KEY_F4 , 134 ) 80 NV_KEY( KEY_F5 , 135 ) 81 NV_KEY( KEY_F6 , 136 ) 82 NV_KEY( KEY_F7 , 137 ) 83 NV_KEY( KEY_F8 , 138 ) 84 NV_KEY( KEY_F9 , 139 ) 85 NV_KEY( KEY_F10 , 140 ) 86 NV_KEY( KEY_F11 , 141 ) 87 NV_KEY( KEY_F12 , 142 ) -
trunk/nv/gl/gl_window.hh
r44 r93 27 27 string get_title() const; 28 28 void set_title( const string& title ); 29 virtual bool is_event_pending(); 30 virtual bool poll_event( io_event& event ); 29 31 virtual context* get_context() { return m_context; } 30 ~gl_window(); 32 virtual void swap_buffers(); 33 virtual ~gl_window(); 31 34 private: 32 35 uint16 m_width; -
trunk/nv/interface/window.hh
r44 r93 15 15 #include <nv/common.hh> 16 16 #include <nv/string.hh> 17 #include <nv/io_event.hh> 17 18 18 19 namespace nv … … 27 28 virtual void set_title( const string& title ) = 0; 28 29 virtual context* get_context() = 0; 30 virtual bool is_event_pending() = 0; 31 virtual bool poll_event( io_event& event ) = 0; 32 virtual void swap_buffers() = 0; 33 virtual ~window() = 0 {}; 29 34 }; 30 35 -
trunk/nv/io_event.hh
r78 r93 89 89 }; 90 90 91 struct resize_event 92 { 93 sint32 x; 94 sint32 y; 95 }; 96 97 struct active_event 98 { 99 bool gain; 100 }; 101 91 102 struct system_event 92 103 { … … 104 115 mouse_button_event mbutton; 105 116 mouse_move_event mmove; 117 resize_event resize; 118 active_event active; 106 119 system_event system; 107 120 }; -
trunk/src/gl/gl_window.cc
r44 r93 10 10 11 11 using namespace nv; 12 13 static bool sdl_key_event_to_io_event( const SDL_KeyboardEvent& ke, io_event& kevent ) 14 { 15 kevent.type = EV_KEY; 16 kevent.key.pressed = ( ke.state != SDL_RELEASED ); 17 kevent.key.ascii = 0; 18 kevent.key.code = KEY_NONE; 19 20 // if result is a typable char place it into the structure 21 if (ke.keysym.unicode >= 32 && ke.keysym.unicode < 128 ) 22 { 23 kevent.key.ascii = (char)ke.keysym.unicode; 24 } 25 26 // Get the Key value from the SDL Keyboard event 27 int result = ke.keysym.sym; 28 29 // Check the control and shift states 30 kevent.key.alt = (ke.keysym.mod & KMOD_ALT ) != 0; 31 kevent.key.control = (ke.keysym.mod & KMOD_CTRL ) != 0; 32 kevent.key.shift = (ke.keysym.mod & KMOD_SHIFT ) != 0; 33 34 // if result is a typable char from the directly transformable ranges 35 if ( ( result >= KEY_A && result <= KEY_Z ) || 36 ( result >= KEY_0 && result <= KEY_9 ) || 37 result == ' ' ) 38 { 39 kevent.key.code = static_cast<key_code>(result); 40 } 41 42 // if result is a typable char from the a..z range 43 if ( result >= KEY_A + 32 && result <= KEY_Z + 32 ) 44 { 45 kevent.key.code = static_cast<key_code>(result - 32); 46 } 47 48 if ( result >= SDLK_F1 && result <= SDLK_F12 ) 49 { 50 kevent.key.code = static_cast<key_code>(result - SDLK_F1 + KEY_F1 ); 51 } 52 53 // other recognized codes 54 switch ( result ) 55 { 56 case SDLK_BACKSPACE : kevent.key.code = KEY_BACK; break; 57 case SDLK_TAB : kevent.key.code = KEY_TAB; break; 58 case SDLK_RETURN : kevent.key.code = KEY_ENTER; break; 59 case SDLK_PAGEUP : kevent.key.code = KEY_PGUP; break; 60 case SDLK_PAGEDOWN : kevent.key.code = KEY_PGDOWN; break; 61 case SDLK_END : kevent.key.code = KEY_END; break; 62 case SDLK_HOME : kevent.key.code = KEY_HOME; break; 63 case SDLK_LEFT : kevent.key.code = KEY_LEFT; break; 64 case SDLK_UP : kevent.key.code = KEY_UP; break; 65 case SDLK_RIGHT : kevent.key.code = KEY_RIGHT; break; 66 case SDLK_DOWN : kevent.key.code = KEY_DOWN; break; 67 case SDLK_DELETE : kevent.key.code = KEY_DELETE; break; 68 case SDLK_INSERT : kevent.key.code = KEY_INSERT; break; 69 case SDLK_KP5 : kevent.key.code = KEY_CENTER; break; 70 case SDLK_ESCAPE : kevent.key.code = KEY_ESCAPE; break; 71 case SDLK_QUOTE : kevent.key.code = KEY_QUOTE; break; 72 case SDLK_COMMA : kevent.key.code = KEY_COMMA; break; 73 case SDLK_MINUS : kevent.key.code = KEY_MINUS; break; 74 case SDLK_PERIOD : kevent.key.code = KEY_PERIOD; break; 75 case SDLK_SLASH : kevent.key.code = KEY_SLASH; break; 76 case SDLK_SEMICOLON : kevent.key.code = KEY_SCOLON; break; 77 case SDLK_LEFTBRACKET : kevent.key.code = KEY_LBRACKET; break; 78 case SDLK_BACKSLASH : kevent.key.code = KEY_BSLASH; break; 79 case SDLK_RIGHTBRACKET : kevent.key.code = KEY_RBRACKET; break; 80 case SDLK_BACKQUOTE : kevent.key.code = KEY_BQUOTE; break; 81 default : break; 82 } 83 84 // If key was understood by nv, then it's valid, otherwise ignored 85 return kevent.key.ascii != 0 || kevent.key.code != 0; 86 } 87 88 static bool sdl_mouse_button_to_io_event( const SDL_MouseButtonEvent& mb, io_event& mevent ) 89 { 90 mevent.type = EV_MOUSE_BUTTON; 91 mevent.mbutton.button = MOUSE_NONE; 92 mevent.mbutton.pressed = (mb.state != SDL_RELEASED); 93 mevent.mbutton.x = mb.x; 94 mevent.mbutton.y = mb.y; 95 96 switch ( mb.button ) 97 { 98 case SDL_BUTTON_LEFT : mevent.mbutton.button = MOUSE_LEFT; break; 99 case SDL_BUTTON_MIDDLE : mevent.mbutton.button = MOUSE_MIDDLE; break; 100 case SDL_BUTTON_RIGHT : mevent.mbutton.button = MOUSE_RIGHT; break; 101 case SDL_BUTTON_WHEELUP : mevent.mbutton.button = MOUSE_WHEEL_UP; break; 102 case SDL_BUTTON_WHEELDOWN : mevent.mbutton.button = MOUSE_WHEEL_DOWN; break; 103 default : break; 104 } 105 106 return mevent.mbutton.button != MOUSE_NONE; 107 } 108 109 static bool sdl_mouse_motion_to_io_event( const SDL_MouseMotionEvent& mm, io_event& mevent ) 110 { 111 mevent.type = EV_MOUSE_MOVE; 112 mevent.mmove.pressed = (mm.state != SDL_RELEASED); 113 mevent.mmove.x = mm.x; 114 mevent.mmove.y = mm.y; 115 return true; 116 } 117 118 static bool sdl_event_to_io_event( const SDL_Event& e, io_event& ioevent ) 119 { 120 switch ( e.type ) 121 { 122 case SDL_KEYDOWN : return sdl_key_event_to_io_event( e.key, ioevent ); 123 case SDL_KEYUP : return sdl_key_event_to_io_event( e.key, ioevent ); 124 case SDL_MOUSEMOTION : return sdl_mouse_motion_to_io_event( e.motion, ioevent ); 125 case SDL_MOUSEBUTTONDOWN : return sdl_mouse_button_to_io_event( e.button, ioevent ); 126 case SDL_MOUSEBUTTONUP : return sdl_mouse_button_to_io_event( e.button, ioevent ); 127 case SDL_ACTIVEEVENT : 128 ioevent.type = EV_ACTIVE; 129 ioevent.active.gain = (e.active.gain != 0); 130 return e.active.state == SDL_APPINPUTFOCUS; 131 case SDL_VIDEORESIZE : 132 ioevent.type = EV_RESIZE; 133 ioevent.resize.x = e.resize.w; 134 ioevent.resize.y = e.resize.h; 135 return true; 136 case SDL_SYSWMEVENT : ioevent.type = EV_SYSTEM; return true; 137 case SDL_QUIT : ioevent.type = EV_QUIT; return true; 138 case SDL_NOEVENT : return false; 139 case SDL_VIDEOEXPOSE : return false; 140 case SDL_JOYAXISMOTION : return false; 141 case SDL_JOYBALLMOTION : return false; 142 case SDL_JOYHATMOTION : return false; 143 case SDL_JOYBUTTONDOWN : return false; 144 case SDL_JOYBUTTONUP : return false; 145 default : return false; 146 } 147 } 148 12 149 13 150 gl_window::gl_window( uint16 width, uint16 height ) … … 55 192 } 56 193 194 bool gl_window::is_event_pending() 195 { 196 return SDL_PollEvent( nullptr ) != 0; 197 } 198 199 bool gl_window::poll_event( io_event& event ) 200 { 201 SDL_Event sdl_event; 202 if ( SDL_PollEvent( &sdl_event ) == 0 ) return false; 203 return sdl_event_to_io_event( sdl_event, event ); 204 } 205 206 void gl_window::swap_buffers() 207 { 208 SDL_GL_SwapBuffers(); 209 } 210 57 211 gl_window::~gl_window() 58 212 { -
trunk/tests/render_test/rl.cc
r90 r93 1 #include <nv/lib/sdl12.hh>2 1 #include <nv/interface/vertex_buffer.hh> 3 2 #include <nv/gl/gl_device.hh> … … 205 204 m_char_program->set_uniform( "tex", 0 ); 206 205 m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_char_program, m_char_va, 6 ); 207 208 SDL_GL_SwapBuffers(); 209 SDL_Event event;210 while( SDL_PollEvent(&event))206 m_window->swap_buffers(); 207 208 nv::io_event event; 209 while(m_window->poll_event(event)) 211 210 { 212 211 switch (event.type) 213 212 { 214 case SDL_QUIT:213 case nv::EV_QUIT: 215 214 keypress = 1; 216 215 break; 217 case SDL_KEYDOWN:218 switch (event.key.keysym.sym)216 case nv::EV_KEY: 217 if (event.key.pressed) 219 218 { 220 case SDLK_ESCAPE: keypress = 1; break; 221 case SDLK_LEFT: move.x = move.x - 1.0f; break; 222 case SDLK_RIGHT: move.x = move.x + 1.0f; break; 223 case SDLK_UP: move.z = move.z - 1.0f; break; 224 case SDLK_DOWN: move.z = move.z + 1.0f; break; 219 switch (event.key.code) 220 { 221 case nv::KEY_ESCAPE : keypress = 1; break; 222 case nv::KEY_LEFT : move.x = move.x - 1.0f; break; 223 case nv::KEY_RIGHT : move.x = move.x + 1.0f; break; 224 case nv::KEY_UP : move.z = move.z - 1.0f; break; 225 case nv::KEY_DOWN : move.z = move.z + 1.0f; break; 226 } 225 227 } 226 228 break;
Note: See TracChangeset
for help on using the changeset viewer.