| 844 | EVENTDEBUG(VAR(debugevents, 0, 0, 2)); |
| 845 | |
| 846 | void checkinput() |
| 847 | { |
| 848 | SDL_Event event; |
| 849 | Uint32 lasttype = 0, lastbut = 0; |
| 850 | int tdx=0,tdy=0; |
| 851 | int focused = 0; |
| 852 | while(events.length() || SDL_PollEvent(&event)) |
| 853 | { |
| 854 | if(events.length()) event = events.remove(0); |
| 855 | |
| 856 | EVENTDEBUG(int thres = 1; defformatstring(eb)("EVENT %d", event.type)); |
| 857 | |
| 858 | if (focused && event.type != SDL_WINDOWEVENT) { if (grabinput != (focused > 0)) inputgrab(grabinput = focused > 0, shouldgrab); focused = 0; } |
| 859 | |
| 860 | switch(event.type) |
| 861 | { |
| 862 | case SDL_QUIT: |
| 863 | quit(); |
| 864 | break; |
| 865 | |
| 866 | case SDL_KEYDOWN: |
| 867 | if(bootstrapentropy > 0 && (--bootstrapentropy & 2)) mapscreenshot(NULL, false, -1, 1000.0f / (1000 + rnd(400)), 0, 0); |
| 868 | case SDL_KEYUP: |
| 869 | EVENTDEBUG(thres = 2; concatstring(eb, event.type == SDL_KEYUP ? "(SDL_KEYUP)" : "(SDL_KEYDOWN)")); |
| 870 | entropy_add_byte(event.key.keysym.sym ^ totalmillis); |
| 871 | EVENTDEBUG(concatformatstring(eb, " sym %d (%Xh), scancode %d (%Xh), state %d, repeat %d", event.key.keysym.sym, event.key.keysym.sym, event.key.keysym.scancode, event.key.keysym.scancode, event.key.state, event.key.repeat)); |
| 872 | if(event.key.keysym.sym == SDLK_SCANCODE_MASK) event.key.keysym.sym |= event.key.keysym.scancode; // workaround SDL 2.0.5 bug which returns sym == 40000000h for all dead keys |
| 873 | if(!event.key.repeat || keyrepeatmask) keypress(event.key.keysym.sym, event.key.keysym.scancode, event.key.state==SDL_PRESSED, (SDL_Keymod)event.key.keysym.mod); |
| 874 | break; |
| 875 | |
| 876 | case SDL_TEXTINPUT: |
| 877 | EVENTDEBUG(thres = 2; concatformatstring(eb, "(SDL_TEXTINPUT) %s %d %d", escapestring(event.text.text), textinputmask, int(event.text.timestamp - textinputtime))); |
| 878 | if(textinputmask && int(event.text.timestamp - textinputtime) >= 5) // mute textinput for a few milliseconds, to avoid receiving the "t" that switched on the console |
| 879 | { |
| 880 | processtextinput(event.text.text); |
| 881 | } |
| 882 | break; |
| 883 | |
| 884 | case SDL_WINDOWEVENT: |
| 885 | { |
| 886 | EVENTDEBUG(concatstring(eb, "(SDL_WINDOWEVENT) ")); |
| 887 | switch(event.window.event) |
| 888 | { |
| 889 | case SDL_WINDOWEVENT_SHOWN: // window has been shown |
| 890 | EVENTDEBUG(concatstring(eb, " SDL_WINDOWEVENT_SHOWN")); |
| 891 | break; |
| 892 | |
| 893 | case SDL_WINDOWEVENT_HIDDEN: // window has been hidden |
| 894 | EVENTDEBUG(concatstring(eb, " SDL_WINDOWEVENT_HIDDEN")); |
| 895 | break; |
| 896 | |
| 897 | case SDL_WINDOWEVENT_EXPOSED: // window has been exposed and should be redrawn |
| 898 | EVENTDEBUG(concatstring(eb, " SDL_WINDOWEVENT_EXPOSED")); |
| 899 | break; |
| 900 | |
| 901 | case SDL_WINDOWEVENT_MOVED: // window has been moved to data1, data2 |
| 902 | EVENTDEBUG(concatformatstring(eb, " SDL_WINDOWEVENT_MOVED x %d, y %d", event.window.data1, event.window.data2)); |
| 903 | if(!(SDL_GetWindowFlags(screen) & SDL_WINDOW_FULLSCREEN)) centerwindow = false; |
no test coverage detected