| 607 | } |
| 608 | |
| 609 | void SystemWindow::GetInput( SystemEvents& out_events ) |
| 610 | { |
| 611 | out_events.clear(); |
| 612 | |
| 613 | SDL_Event event; |
| 614 | while( SDL_PollEvent(&event) ) |
| 615 | { |
| 616 | switch(event.type) |
| 617 | { |
| 618 | case SDL_WINDOWEVENT: |
| 619 | if( event.window.event == SDL_WINDOWEVENT_CLOSE ) |
| 620 | { |
| 621 | out_events.emplace_back(); |
| 622 | out_events.back().type= SystemEvent::Type::Quit; |
| 623 | } |
| 624 | break; |
| 625 | |
| 626 | case SDL_QUIT: |
| 627 | out_events.emplace_back(); |
| 628 | out_events.back().type= SystemEvent::Type::Quit; |
| 629 | break; |
| 630 | |
| 631 | case SDL_KEYUP: |
| 632 | case SDL_KEYDOWN: |
| 633 | out_events.emplace_back(); |
| 634 | out_events.back().type= SystemEvent::Type::Key; |
| 635 | out_events.back().event.key.key_code= TranslateKey( event.key.keysym.scancode ); |
| 636 | out_events.back().event.key.pressed= event.type == SDL_KEYUP ? false : true; |
| 637 | out_events.back().event.key.modifiers= TranslateKeyModifiers( event.key.keysym.mod ); |
| 638 | break; |
| 639 | |
| 640 | case SDL_MOUSEBUTTONUP: |
| 641 | case SDL_MOUSEBUTTONDOWN: |
| 642 | out_events.emplace_back(); |
| 643 | out_events.back().type= SystemEvent::Type::MouseKey; |
| 644 | out_events.back().event.mouse_key.mouse_button= TranslateMouseButton( event.button.button ); |
| 645 | out_events.back().event.mouse_key.x= event.button.x; |
| 646 | out_events.back().event.mouse_key.y= event.button.y; |
| 647 | out_events.back().event.mouse_key.pressed= event.type == SDL_MOUSEBUTTONUP ? false : true; |
| 648 | break; |
| 649 | |
| 650 | case SDL_MOUSEMOTION: |
| 651 | out_events.emplace_back(); |
| 652 | out_events.back().type= SystemEvent::Type::MouseMove; |
| 653 | out_events.back().event.mouse_move.dx= event.motion.xrel; |
| 654 | out_events.back().event.mouse_move.dy= event.motion.yrel; |
| 655 | break; |
| 656 | |
| 657 | case SDL_TEXTINPUT: |
| 658 | // Accept only visible ASCII |
| 659 | if( event.text.text[0] >= 32 ) |
| 660 | // && event.text.text[0] < 128 ) |
| 661 | { |
| 662 | out_events.emplace_back(); |
| 663 | out_events.back().type= SystemEvent::Type::CharInput; |
| 664 | out_events.back().event.char_input.ch= event.text.text[0]; |
| 665 | } |
| 666 | break; |
no test coverage detected