| 699 | #endif |
| 700 | |
| 701 | int CInput::Update() |
| 702 | { |
| 703 | const int64_t Now = time_get(); |
| 704 | if(m_LastUpdate != 0) |
| 705 | { |
| 706 | const float Diff = (Now - m_LastUpdate) / (float)time_freq(); |
| 707 | m_UpdateTime = m_UpdateTime == 0.0f ? Diff : (m_UpdateTime * 0.8f + Diff * 0.2f); |
| 708 | } |
| 709 | m_LastUpdate = Now; |
| 710 | |
| 711 | // keep the counter between 1..0xFFFFFFFF, 0 means not pressed |
| 712 | m_InputCounter = (m_InputCounter % std::numeric_limits<decltype(m_InputCounter)>::max()) + 1; |
| 713 | |
| 714 | SDL_Event Event; |
| 715 | bool IgnoreKeys = false; |
| 716 | |
| 717 | const auto &&AddKeyEventChecked = [&](int Key, int Flags) { |
| 718 | if(Key != KEY_UNKNOWN && !IgnoreKeys && (!(Flags & IInput::FLAG_PRESS) || !HasComposition())) |
| 719 | { |
| 720 | AddKeyEvent(Key, Flags); |
| 721 | } |
| 722 | }; |
| 723 | |
| 724 | #if defined(CONF_PLATFORM_EMSCRIPTEN) |
| 725 | if(EmscriptenQuit) |
| 726 | { |
| 727 | return 1; |
| 728 | } |
| 729 | #endif |
| 730 | |
| 731 | while(SDL_PollEvent(&Event)) |
| 732 | { |
| 733 | switch(Event.type) |
| 734 | { |
| 735 | case SDL_SYSWMEVENT: |
| 736 | ProcessSystemMessage(Event.syswm.msg); |
| 737 | break; |
| 738 | |
| 739 | case SDL_TEXTEDITING: |
| 740 | HandleTextEditingEvent(Event.edit.text, Event.edit.start, Event.edit.length); |
| 741 | break; |
| 742 | |
| 743 | #if SDL_VERSION_ATLEAST(2, 0, 22) |
| 744 | case SDL_TEXTEDITING_EXT: |
| 745 | HandleTextEditingEvent(Event.editExt.text, Event.editExt.start, Event.editExt.length); |
| 746 | SDL_free(Event.editExt.text); |
| 747 | break; |
| 748 | #endif |
| 749 | |
| 750 | case SDL_TEXTINPUT: |
| 751 | m_CompositionString = ""; |
| 752 | m_CompositionCursor = 0; |
| 753 | AddTextEvent(Event.text.text); |
| 754 | break; |
| 755 | |
| 756 | // handle keys |
| 757 | case SDL_KEYDOWN: |
| 758 | AddKeyEventChecked(TranslateKeyEventKey(Event.key), IInput::FLAG_PRESS | (Event.key.repeat != 0 ? FLAG_REPEAT : 0)); |
nothing calls this directly
no test coverage detected