mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-29 21:13:00 +00:00 
			
		
		
		
	migrated to SDL3
This commit is contained in:
		| @@ -165,7 +165,7 @@ void fix_font_size(int& size) { | ||||
|  | ||||
| #if CAP_SDL | ||||
|  | ||||
| #if !CAP_SDL2 | ||||
| #if SDLVER == 1 | ||||
| #if HDR | ||||
| typedef SDL_Surface SDL_Renderer; | ||||
| #define srend s | ||||
| @@ -174,7 +174,7 @@ typedef SDL_Surface SDL_Renderer; | ||||
|  | ||||
| EX SDL_Surface *s; | ||||
| EX SDL_Surface *s_screen; | ||||
| #if CAP_SDL2 | ||||
| #if SDLVER >= 2 | ||||
| EX SDL_Renderer *s_renderer, *s_software_renderer; | ||||
| #if HDR | ||||
| #define srend s_software_renderer | ||||
| @@ -196,10 +196,14 @@ EX color_t& qpixel(SDL_Surface *surf, int x, int y) { | ||||
|   } | ||||
|  | ||||
| EX void present_surface() { | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   SDL_UpdateTexture(s_texture, nullptr, s->pixels, s->w * sizeof (Uint32)); | ||||
|   SDL_RenderClear(s_renderer); | ||||
|   #if SDLVER >= 3 | ||||
|   SDL_RenderTexture(s_renderer, s_texture, nullptr, nullptr); | ||||
|   #else | ||||
|   SDL_RenderCopy(s_renderer, s_texture, nullptr, nullptr); | ||||
|   #endif | ||||
|   SDL_RenderPresent(s_renderer); | ||||
|   #else | ||||
|   SDL_UpdateRect(s, 0, 0, 0, 0);   | ||||
| @@ -209,7 +213,7 @@ EX void present_surface() { | ||||
| EX void present_screen() { | ||||
| #if CAP_GL | ||||
|   if(vid.usingGL) { | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     SDL_GL_SwapWindow(s_window); | ||||
|     #else | ||||
|     SDL_GL_SwapBuffers(); | ||||
| @@ -610,7 +614,7 @@ EX void init_glfont(int size) { | ||||
|     fix_font_size(siz); | ||||
|     if(ch < 128) { | ||||
|       str[0] = ch; | ||||
|       txt = TTF_RenderText_Blended(cfont->font[siz], str, white); | ||||
|       txt = TTF_RenderUTF8_Blended(cfont->font[siz], str, white); | ||||
|       } | ||||
|     else { | ||||
|       txt = TTF_RenderUTF8_Blended(cfont->font[siz], natchars[ch-128], white); | ||||
| @@ -620,7 +624,7 @@ EX void init_glfont(int size) { | ||||
|     generateFont(ch, txt); | ||||
| #endif | ||||
|     sdltogl(txt, f, ch); | ||||
|     SDL_FreeSurface(txt);     | ||||
|     SDL_DestroySurface(txt); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
| @@ -895,7 +899,9 @@ EX bool displaystr(int x, int y, int shift, int size, const char *str, color_t c | ||||
|   bool clicked = (mousex >= rect.x && mousey >= rect.y && mousex <= rect.x+rect.w && mousey <= rect.y+rect.h); | ||||
|    | ||||
|   if(shift) { | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER == 3 | ||||
|     SDL_Surface* txt2 = SDL_ConvertSurface(txt, SDL_PIXELFORMAT_RGBA8888); | ||||
|     #elif SDLVER == 2 | ||||
|     SDL_Surface* txt2 = SDL_ConvertSurfaceFormat(txt, SDL_PIXELFORMAT_RGBA8888, 0); | ||||
|     #else | ||||
|     SDL_Surface* txt2 = SDL_DisplayFormat(txt); | ||||
| @@ -909,12 +915,12 @@ EX bool displaystr(int x, int y, int shift, int size, const char *str, color_t c | ||||
|       qpixel(s, rect.x+xx+shift, rect.y+yy) |= color & 0x00FFFF; | ||||
|     SDL_UnlockSurface(s); | ||||
|     SDL_UnlockSurface(txt2); | ||||
|     SDL_FreeSurface(txt2); | ||||
|     SDL_DestroySurface(txt2); | ||||
|     } | ||||
|   else { | ||||
|     SDL_BlitSurface(txt, NULL, s,&rect);  | ||||
|     } | ||||
|   SDL_FreeSurface(txt); | ||||
|   SDL_DestroySurface(txt); | ||||
|    | ||||
|   return clicked; | ||||
| #endif | ||||
| @@ -1256,19 +1262,19 @@ EX bool need_to_apply_screen_settings() { | ||||
|   } | ||||
|  | ||||
| EX void close_renderer() { | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   if(s_renderer) SDL_DestroyRenderer(s_renderer), s_renderer = nullptr; | ||||
|   if(s_texture) SDL_DestroyTexture(s_texture), s_texture = nullptr; | ||||
|   if(s) SDL_FreeSurface(s), s = nullptr; | ||||
|   if(s) SDL_DestroySurface(s), s = nullptr; | ||||
|   if(s_software_renderer) SDL_DestroyRenderer(s_software_renderer), s_software_renderer = nullptr; | ||||
|   #endif | ||||
|   } | ||||
|  | ||||
| EX void close_window() { | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   close_renderer(); | ||||
|   if(s_have_context) { | ||||
|     SDL_GL_DeleteContext(s_context), s_have_context = false; | ||||
|     SDL_GL_DestroyContext(s_context), s_have_context = false; | ||||
|     } | ||||
|   if(s_window) SDL_DestroyWindow(s_window), s_window = nullptr; | ||||
|   #endif | ||||
| @@ -1289,7 +1295,7 @@ EX void apply_screen_settings() { | ||||
|   #endif | ||||
|  | ||||
|   #if CAP_SDL | ||||
|   #if !CAP_SDL2 | ||||
|   #if SDLVER == 1 | ||||
|   if(need_to_reopen_window()) | ||||
|     SDL_QuitSubSystem(SDL_INIT_VIDEO); | ||||
|   #endif | ||||
| @@ -1352,12 +1358,12 @@ EX void setvideomode() { | ||||
| #if CAP_GL | ||||
|   vid.usingGL = vid.wantGL; | ||||
|   if(vid.usingGL) { | ||||
|     flags = SDL12(SDL_OPENGL | SDL_HWSURFACE, SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI); | ||||
|     flags = SDL12(SDL_OPENGL | SDL_HWSURFACE, SDL_WINDOW_OPENGL | SDL_WINDOW_HIGH_PIXEL_DENSITY); | ||||
|     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); | ||||
|     SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); | ||||
|  | ||||
|     vid.current_vsync = want_vsync(); | ||||
|     #if !ISMOBWEB && !CAP_SDL2 | ||||
|     #if !ISMOBWEB && SDLVER == 1 | ||||
|     if(vid.current_vsync)  | ||||
|       SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 1 ); | ||||
|     else | ||||
| @@ -1393,15 +1399,15 @@ EX void setvideomode() { | ||||
|   #endif | ||||
|   #endif | ||||
|    | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   if(s_renderer) SDL_DestroyRenderer(s_renderer), s_renderer = nullptr; | ||||
|   #endif | ||||
|  | ||||
|   auto create_win = [&] { | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     if(s_window && current_window_flags != (flags | sizeflag)) { | ||||
|       if(s_have_context) { | ||||
|         SDL_GL_DeleteContext(s_context), s_have_context = false; | ||||
|         SDL_GL_DestroyContext(s_context), s_have_context = false; | ||||
|         glhr::glew = false; | ||||
|         } | ||||
|       SDL_DestroyWindow(s_window), s_window = nullptr; | ||||
| @@ -1409,10 +1415,7 @@ EX void setvideomode() { | ||||
|     if(s_window) | ||||
|       SDL_SetWindowSize(s_window, vid.xres, vid.yres); | ||||
|     else | ||||
|       s_window = SDL_CreateWindow(CUSTOM_CAPTION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,  | ||||
|       vid.xres, vid.yres, | ||||
|       flags | sizeflag | ||||
|       ); | ||||
|       s_window = SDL_CreateWindow(CUSTOM_CAPTION, vid.xres, vid.yres, flags | sizeflag); | ||||
|     current_window_flags = (flags | sizeflag); | ||||
|     #else | ||||
|     s = SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | sizeflag); | ||||
| @@ -1441,15 +1444,23 @@ EX void setvideomode() { | ||||
|     create_win(); | ||||
|     } | ||||
|    | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   if(s_renderer) SDL_DestroyRenderer(s_renderer), s_renderer = nullptr; | ||||
|  | ||||
|   #if SDLVER >= 3 | ||||
|   s_renderer = SDL_CreateRenderer(s_window, nullptr); | ||||
|   SDL_SetRenderVSync(s_renderer, vid.current_vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED); | ||||
|   // todo VSYNC -- , SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER | ||||
|   #else | ||||
|   s_renderer = SDL_CreateRenderer(s_window, -1, vid.current_vsync ? SDL_RENDERER_PRESENTVSYNC : 0); | ||||
|   SDL_GetRendererOutputSize(s_renderer, &vid.xres, &vid.yres); | ||||
|   #endif | ||||
|  | ||||
|   SDL_GetCurrentRenderOutputSize(s_renderer, &vid.xres, &vid.yres); | ||||
|    | ||||
|   if(s_texture) SDL_DestroyTexture(s_texture), s_texture = nullptr; | ||||
|   s_texture = SDL_CreateTexture(s_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, vid.xres, vid.yres); | ||||
|    | ||||
|   if(s) SDL_FreeSurface(s), s = nullptr; | ||||
|   if(s) SDL_DestroySurface(s), s = nullptr; | ||||
|   s = shot::empty_surface(vid.xres, vid.yres, false); | ||||
|    | ||||
|   if(s_software_renderer) SDL_DestroyRenderer(s_software_renderer), s_software_renderer = nullptr; | ||||
| @@ -1469,8 +1480,8 @@ EX void setvideomode() { | ||||
|       glDisable(GL_MULTISAMPLE_ARB); | ||||
|       } | ||||
|    | ||||
|     #if CAP_SDL2 | ||||
|     if(s_have_context) SDL_GL_DeleteContext(s_context), s_have_context = false; | ||||
|     #if SDLVER >= 2 | ||||
|     if(s_have_context) SDL_GL_DestroyContext(s_context), s_have_context = false; | ||||
|     if(!s_have_context) s_context = SDL_GL_CreateContext(s_window); | ||||
|     s_have_context = true; glhr::glew = false; | ||||
|     #endif | ||||
| @@ -1487,13 +1498,14 @@ EX bool noGUI = false; | ||||
|  | ||||
| #if CAP_SDL | ||||
| EX bool sdl_on = false; | ||||
| EX int SDL_Init1(Uint32 flags) { | ||||
| EX bool SDL_Init1(Uint32 flags) { | ||||
|   if(!sdl_on) { | ||||
|     sdl_on = true; | ||||
|     return SDL_Init(flags); | ||||
|     return !SDL_error_in(SDL_Init(flags)); | ||||
|     } | ||||
|   else { | ||||
|     return !SDL_error_in(SDL_InitSubSystem(flags)); | ||||
|     } | ||||
|   else   | ||||
|     return SDL_InitSubSystem(flags); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| @@ -1510,7 +1522,7 @@ EX void set_cfont() { | ||||
|  | ||||
| EX void init_font() { | ||||
| #if CAP_SDLTTF | ||||
|   if(TTF_Init() != 0) { | ||||
|   if(SDL_error_in(TTF_Init())) { | ||||
|     printf("Failed to initialize TTF.\n"); | ||||
|     exit(2); | ||||
|     } | ||||
| @@ -1542,7 +1554,7 @@ EX void close_font() { | ||||
|  | ||||
| EX void init_graph() { | ||||
| #if CAP_SDL | ||||
|   if (SDL_Init1(SDL_INIT_VIDEO) == -1) | ||||
|   if (!SDL_Init1(SDL_INIT_VIDEO)) | ||||
|   { | ||||
|     printf("Failed to initialize video.\n"); | ||||
|     exit(2); | ||||
| @@ -1552,7 +1564,15 @@ EX void init_graph() { | ||||
|   get_canvas_size(); | ||||
| #else | ||||
|   if(!vid.xscr) { | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 3 | ||||
|     int count; | ||||
|     auto displays = SDL_GetDisplays(&count); | ||||
|     if(!count) { println(hlog, "error: no displays"); return; } | ||||
|     const SDL_DisplayMode* dm = SDL_GetCurrentDisplayMode(displays[0]); | ||||
|     if(!dm) println(hlog, "SDL_GetCurrentDisplayMode error: ", SDL_GetError()); | ||||
|     if(dm) vid.xscr = vid.xres = dm->w; | ||||
|     if(dm) vid.yscr = vid.yres = dm->h; | ||||
|     #elif SDLVER >= 2 | ||||
|     SDL_DisplayMode dm; | ||||
|     SDL_GetCurrentDisplayMode(0, &dm); | ||||
|     vid.xscr = vid.xres = dm.w; | ||||
| @@ -1565,7 +1585,7 @@ EX void init_graph() { | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| #if !CAP_SDL2 | ||||
| #if SDLVER == 1 | ||||
|   SDL_WM_SetCaption(CUSTOM_CAPTION, CUSTOM_CAPTION); | ||||
| #endif | ||||
| #endif | ||||
| @@ -1587,7 +1607,7 @@ EX void init_graph() { | ||||
|     exit(2); | ||||
|     } | ||||
|      | ||||
|   #if !CAP_SDL2 | ||||
|   #if SDLVER == 1 | ||||
|   SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); | ||||
|   SDL_EnableUNICODE(1); | ||||
|   #endif | ||||
|   | ||||
| @@ -118,7 +118,7 @@ EX color_t rainbow_color(ld sat, ld hue) { | ||||
|  | ||||
| /** Adjust col to SDL_gfx functions. No adjustment is needed in SDL 1.2, but it is needed in SDL2 */ | ||||
| EX color_t align(color_t col) { | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   swap(part(col, 0), part(col, 3)); | ||||
|   swap(part(col, 1), part(col, 2)); | ||||
|   #endif | ||||
|   | ||||
							
								
								
									
										129
									
								
								control.cpp
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								control.cpp
									
									
									
									
									
								
							| @@ -32,7 +32,7 @@ EX int slider_x; | ||||
| EX function <void(int sym, int uni)> keyhandler = [] (int sym, int uni) {}; | ||||
| EX function <bool(SDL_Event &ev)> joyhandler = [] (SDL_Event &ev) {return false;}; | ||||
|  | ||||
| #if CAP_SDL2 | ||||
| #if SDLVER >= 2 | ||||
| EX void ignore_text(const SDL_TextInputEvent&) {} | ||||
| EX function <void(const SDL_TextInputEvent&)> texthandler = ignore_text; | ||||
| #endif | ||||
| @@ -40,7 +40,7 @@ EX function <void(const SDL_TextInputEvent&)> texthandler = ignore_text; | ||||
| EX void reset_handlers() { | ||||
|   keyhandler = [] (int sym, int uni) {}; | ||||
|   joyhandler = [] (SDL_Event &ev) {return false;}; | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   texthandler = ignore_text; | ||||
|   #endif | ||||
|   } | ||||
| @@ -253,10 +253,14 @@ EX void initJoysticks_async() { | ||||
|  | ||||
| EX void countJoysticks() { | ||||
|   DEBB(DF_INIT, ("opening joysticks")); | ||||
|   #if SDLVER <= 2 | ||||
|   numsticks = SDL_NumJoysticks(); | ||||
|   #else | ||||
|   SDL_GetJoysticks(&numsticks); | ||||
|   #endif | ||||
|   if(numsticks > 8) numsticks = 8; | ||||
|   for(int i=0; i<numsticks; i++) { | ||||
|     sticks[i] = SDL_JoystickOpen(i); | ||||
|     sticks[i] = SDL_OpenJoystick(i); | ||||
|     /* printf("axes = %d, balls = %d, buttons = %d, hats = %d\n", | ||||
|       SDL_JoystickNumAxes(sticks[i]), | ||||
|       SDL_JoystickNumBalls(sticks[i]), | ||||
| @@ -271,7 +275,7 @@ EX void initJoysticks() { | ||||
|   DEBBI(DF_INIT, ("init joystick")); | ||||
|  | ||||
|   DEBB(DF_INIT, ("init joystick subsystem")); | ||||
|   if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1) | ||||
|   if (SDL_error_in(SDL_InitSubSystem(SDL_INIT_JOYSTICK))) | ||||
|   { | ||||
|     printf("Failed to initialize joysticks.\n"); | ||||
|     numsticks = 0; | ||||
| @@ -285,7 +289,7 @@ EX void initJoysticks() { | ||||
| EX void closeJoysticks() { | ||||
|   DEBB(DF_INIT, ("close joysticks")); | ||||
|   for(int i=0; i<numsticks; i++) { | ||||
|     SDL_JoystickClose(sticks[i]), sticks[i] = NULL; | ||||
|     SDL_CloseJoystick(sticks[i]), sticks[i] = NULL; | ||||
|     } | ||||
|   numsticks = 0; | ||||
|   } | ||||
| @@ -834,8 +838,10 @@ EX void mainloopiter() { | ||||
|     oldmousepan = mousepan; | ||||
|     #if CAP_MOUSEGRAB | ||||
|     if(mousepan) {     | ||||
|       #if CAP_SDL2 | ||||
|       SDL_SetRelativeMouseMode(SDL_TRUE); | ||||
|       #if SDLVER >= 3 | ||||
|       SDL_SetWindowRelativeMouseMode(s_window, true); | ||||
|       #elif SDLVER >= 2 | ||||
|       SDL_SetRelativeMouseMode(SDL23(SDL_TRUE, true)); | ||||
|       #else | ||||
|       SDL_WM_GrabInput(SDL_GRAB_ON); | ||||
|       SDL_ShowCursor(SDL_DISABLE); | ||||
| @@ -843,8 +849,10 @@ EX void mainloopiter() { | ||||
|       mouseaim_x = mouseaim_y = 0; | ||||
|       } | ||||
|     else { | ||||
|       #if CAP_SDL2 | ||||
|       SDL_SetRelativeMouseMode(SDL_FALSE); | ||||
|       #if SDLVER >= 3 | ||||
|       SDL_SetWindowRelativeMouseMode(s_window, false); | ||||
|       #elif SDLVER >= 2 | ||||
|       SDL_SetRelativeMouseMode(SDL23(SDL_FALSE, false)); | ||||
|       #else | ||||
|       SDL_WM_GrabInput( SDL_GRAB_OFF ); | ||||
|       SDL_ShowCursor(SDL_ENABLE); | ||||
| @@ -860,7 +868,7 @@ EX void mainloopiter() { | ||||
| #endif | ||||
|  | ||||
|   if(timetowait > 0) { | ||||
|     #if !CAP_SDL2 | ||||
|     #if SDLVER == 1 | ||||
|     SDL_Delay(timetowait); | ||||
|     #endif | ||||
|     } | ||||
| @@ -890,10 +898,9 @@ EX void mainloopiter() { | ||||
|  | ||||
|   getcshift = 1; | ||||
|    | ||||
|   #if CAP_SDL2 | ||||
|    | ||||
|   const Uint8 *keystate = SDL_GetKeyboardState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|  | ||||
|   #if SDLVER >= 2 | ||||
|   pandora_rightclick = keystate[SDL_SCANCODE_RCTRL]; | ||||
|   pandora_leftclick = keystate[SDL_SCANCODE_RSHIFT]; | ||||
|  | ||||
| @@ -909,9 +916,6 @@ EX void mainloopiter() { | ||||
|   if(keystate[SDL_SCANCODE_LALT] || keystate[SDL_SCANCODE_RALT]) getcshift *= 10; | ||||
|  | ||||
|   #else | ||||
|  | ||||
|   Uint8 *keystate = SDL_GetKeyState(NULL); | ||||
|  | ||||
|   pandora_rightclick = keystate[SDLK_RCTRL]; | ||||
|   pandora_leftclick = keystate[SDLK_RSHIFT]; | ||||
|  | ||||
| @@ -1002,7 +1006,7 @@ EX void mainloopiter() { | ||||
|     ld t = (ticks - lastticks) * shiftmul / 1000.; | ||||
|     lastticks = ticks; | ||||
|      | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     if(keystate[SDL_SCANCODE_END] && GDIM == 3 && DEFAULTNOR(SDL_SCANCODE_END)) full_forward_camera(-t); | ||||
|     if(keystate[SDL_SCANCODE_HOME] && GDIM == 3 && DEFAULTNOR(SDL_SCANCODE_HOME)) full_forward_camera(t); | ||||
|     if(keystate[SDL_SCANCODE_RIGHT] && DEFAULTNOR(SDL_SCANCODE_RIGHT)) full_rotate_camera(0, -t); | ||||
| @@ -1032,7 +1036,7 @@ EX void mainloopiter() { | ||||
|     ld t = (ticks - lastticks) * shiftmul / 1000.; | ||||
|     lastticks = ticks; | ||||
|  | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     #define dkey(x) keystate[int(x - 'a' + 4)] && DEFAULTNOR(x - 'a' + 4) | ||||
|     #else | ||||
|     #define dkey(x) keystate[int(x)] && DEFAULTNOR(x) | ||||
| @@ -1073,7 +1077,7 @@ EX void mainloopiter() { | ||||
|   if(((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_MMASK)) && !mouseout2()) | ||||
|     currently_scrolling = true; | ||||
|  | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   if(timetowait > 0) { | ||||
|     if(SDL_WaitEventTimeout(&ev, timetowait)) handle_event(ev); | ||||
|     } | ||||
| @@ -1102,7 +1106,14 @@ EX void handle_event(SDL_Event& ev) { | ||||
|       countJoysticks(); | ||||
|       } */ | ||||
|  | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER == 3 | ||||
|     if(ev.type == SDL_EVENT_WINDOW_MOUSE_ENTER) outoffocus = false; | ||||
|     if(ev.type == SDL_EVENT_WINDOW_MOUSE_LEAVE) outoffocus = true; | ||||
|     if(ev.type == SDL_EVENT_WINDOW_EXPOSED) drawscreen(); | ||||
|     if(ev.type == SDL_EVENT_WINDOW_RESIZED) resize_screen_to(ev.window.data1, ev.window.data2); | ||||
|     #endif | ||||
|  | ||||
|     #if SDLVER == 2 | ||||
|     if(ev.type == SDL_WINDOWEVENT) { | ||||
|       auto w = ev.window.event; | ||||
|       if(w == SDL_WINDOWEVENT_ENTER) | ||||
| @@ -1114,8 +1125,9 @@ EX void handle_event(SDL_Event& ev) { | ||||
|       if(w == SDL_WINDOWEVENT_RESIZED) | ||||
|         resize_screen_to(ev.window.data1, ev.window.data2); | ||||
|       } | ||||
|     #endif | ||||
|      | ||||
|     #else | ||||
|     #if SDLVER == 1 | ||||
|     if(ev.type == SDL_ACTIVEEVENT) { | ||||
|       if(ev.active.state & SDL_APPINPUTFOCUS) { | ||||
|         if(ev.active.gain) { | ||||
| @@ -1136,7 +1148,7 @@ EX void handle_event(SDL_Event& ev) { | ||||
|     #endif | ||||
|  | ||||
| #if CAP_SDLJOY     | ||||
|     if(ev.type == SDL_JOYAXISMOTION && normal && DEFAULTCONTROL) { | ||||
|     if(ev.type == SDL_EVENT_JOYSTICK_AXIS_MOTION && normal && DEFAULTCONTROL) { | ||||
|       if(ev.jaxis.which == 0) { | ||||
|         if(ev.jaxis.axis == 0) | ||||
|           joyx = ev.jaxis.value; | ||||
| @@ -1159,64 +1171,65 @@ EX void handle_event(SDL_Event& ev) { | ||||
|      | ||||
|     if(joyhandler && joyhandler(ev)) ; | ||||
|  | ||||
|     else if(ev.type == SDL_JOYHATMOTION && !normal) { | ||||
|     else if(ev.type == SDL_EVENT_JOYSTICK_HAT_MOTION && !normal) { | ||||
|       if(ev.jhat.value == SDL_HAT_UP) sym = SDLK_UP; | ||||
|       if(ev.jhat.value == SDL_HAT_DOWN) sym = SDLK_DOWN; | ||||
|       if(ev.jhat.value == SDL_HAT_LEFT) sym = SDLK_LEFT; | ||||
|       if(ev.jhat.value == SDL_HAT_RIGHT) sym = SDLK_RIGHT; | ||||
|       } | ||||
|  | ||||
|     else if(ev.type == SDL_JOYBUTTONDOWN && normal && DEFAULTCONTROL) { | ||||
|     else if(ev.type == SDL_EVENT_JOYSTICK_BUTTON_DOWN && normal && DEFAULTCONTROL) { | ||||
|       flashMessages(); | ||||
|       movepcto(joydir); | ||||
|       joy_ignore_next = true; | ||||
|       checkjoy(); | ||||
|       } | ||||
|  | ||||
|     else if(ev.type == SDL_JOYBUTTONDOWN && !normal) { | ||||
|     else if(ev.type == SDL_EVENT_JOYSTICK_BUTTON_DOWN && !normal) { | ||||
|       sym = uni = SDLK_RETURN; | ||||
|       } | ||||
| #endif | ||||
|  | ||||
|     if(ev.type == SDL_KEYDOWN) { | ||||
|     if(ev.type == SDL_EVENT_KEY_DOWN) { | ||||
|       flashMessages(); | ||||
|       mousing = false; | ||||
|       sym = ev.key.keysym.sym; | ||||
|       #if CAP_SDL2 | ||||
|       uni = ev.key.keysym.sym; | ||||
|       if(uni == '=' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '+'; | ||||
|       if(uni == '1' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '!'; | ||||
|       if(uni == '2' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '@'; | ||||
|       if(uni == '3' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '#'; | ||||
|       if(uni == '4' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '$'; | ||||
|       if(uni == '5' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '%'; | ||||
|       if(uni == '6' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '^'; | ||||
|       if(uni == '7' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '&'; | ||||
|       if(uni == '8' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '*'; | ||||
|       if(uni == '9' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = '('; | ||||
|       if(uni == '0' && (ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT))) uni = ')'; | ||||
|       sym = SDL23(ev.key.keysym.sym, ev.key.key); | ||||
|       auto mod = SDL23(ev.key.keysym.mod, ev.key.mod); | ||||
|       #if SDLVER >= 2 | ||||
|       uni = SDL23(ev.key.keysym.sym, ev.key.key); | ||||
|       if(uni == '=' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '+'; | ||||
|       if(uni == '1' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '!'; | ||||
|       if(uni == '2' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '@'; | ||||
|       if(uni == '3' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '#'; | ||||
|       if(uni == '4' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '$'; | ||||
|       if(uni == '5' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '%'; | ||||
|       if(uni == '6' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '^'; | ||||
|       if(uni == '7' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '&'; | ||||
|       if(uni == '8' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '*'; | ||||
|       if(uni == '9' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = '('; | ||||
|       if(uni == '0' && (mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT))) uni = ')'; | ||||
|       if(uni >= 'a' && uni <= 'z') { | ||||
|         if(ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) uni -= 32; | ||||
|         else if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) uni -= 96;         | ||||
|         if(mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT)) uni -= 32; | ||||
|         else if(mod & (SDL_KMOD_LCTRL | SDL_KMOD_RCTRL)) uni -= 96;         | ||||
|         }       | ||||
|       #else | ||||
|       uni = ev.key.keysym.unicode; | ||||
|       if(uni == 0 && (sym >= 'a' && sym <= 'z')) { | ||||
|         if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) uni = sym - 96; | ||||
|         if(ev.key.keysym.mod & (SDL_KMOD_LCTRL | SDL_KMOD_RCTRL)) uni = sym - 96; | ||||
|         } | ||||
|       if(ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) shiftmul = -1; | ||||
|       if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) shiftmul /= 10; | ||||
|       if(ev.key.keysym.mod & (SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT)) shiftmul = -1; | ||||
|       if(ev.key.keysym.mod & (SDL_KMOD_LCTRL | SDL_KMOD_RCTRL)) shiftmul /= 10; | ||||
|       #endif | ||||
|       numlock_on = ev.key.keysym.mod & KMOD_NUM; | ||||
|       if(sym == SDLK_RETURN && (ev.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) { | ||||
|       numlock_on = mod & SDL_KMOD_NUM; | ||||
|       if(sym == SDLK_RETURN && (mod & (SDL_KMOD_LALT | SDL_KMOD_RALT))) { | ||||
|         sym = 0; uni = 0; | ||||
|         vid.want_fullscreen = !vid.want_fullscreen; | ||||
|         apply_screen_settings(); | ||||
|         } | ||||
|       } | ||||
|      | ||||
|     #if CAP_SDL2 | ||||
|     if(ev.type == SDL_TEXTINPUT) { | ||||
|     #if SDLVER >= 2 | ||||
|     if(ev.type == SDL_EVENT_TEXT_INPUT) { | ||||
|       texthandler(ev.text); | ||||
|       } | ||||
|     #endif | ||||
| @@ -1228,8 +1241,8 @@ EX void handle_event(SDL_Event& ev) { | ||||
|      | ||||
|     bool rollchange = (cmode & sm::OVERVIEW) && getcstat >= 2000 && cheater; | ||||
|  | ||||
|     if(ev.type == SDL_MOUSEBUTTONDOWN || ev.type == SDL_MOUSEBUTTONUP SDL12(, || ev.type == SDL_MOUSEWHEEL)) { | ||||
|       mousepressed = ev.type == SDL_MOUSEBUTTONDOWN; | ||||
|     if(ev.type == SDL_EVENT_MOUSE_BUTTON_DOWN || ev.type == SDL_EVENT_MOUSE_BUTTON_UP SDL12(, || ev.type == SDL_EVENT_MOUSE_WHEEL)) { | ||||
|       mousepressed = ev.type == SDL_EVENT_MOUSE_BUTTON_DOWN; | ||||
|       if(mousepressed) flashMessages(); | ||||
|       mousing = true; | ||||
|       which_pointer = 0; | ||||
| @@ -1237,8 +1250,8 @@ EX void handle_event(SDL_Event& ev) { | ||||
|       holdmouse = false; | ||||
|       invslider = false; | ||||
|        | ||||
|       bool down = ev.type == SDL_MOUSEBUTTONDOWN SDL12(, || ev.type == SDL_MOUSEWHEEL); | ||||
|       bool up = ev.type == SDL_MOUSEBUTTONUP; | ||||
|       bool down = ev.type == SDL_EVENT_MOUSE_BUTTON_DOWN SDL12(, || ev.type == SDL_EVENT_MOUSE_WHEEL); | ||||
|       bool up = ev.type == SDL_EVENT_MOUSE_BUTTON_UP; | ||||
|        | ||||
|       bool act = false; | ||||
|        | ||||
| @@ -1273,8 +1286,8 @@ EX void handle_event(SDL_Event& ev) { | ||||
|         sym = getcstat, uni = getcstat, shiftmul = getcshift; | ||||
|         } | ||||
|        | ||||
|       else if(SDL12(ev.button.button==SDL_BUTTON_WHEELDOWN || ev.button.button == SDL_BUTTON_WHEELUP, ev.type == SDL_MOUSEWHEEL)) { | ||||
|         #if CAP_SDL2 | ||||
|       else if(SDL12(ev.button.button==SDL_BUTTON_WHEELDOWN || ev.button.button == SDL_BUTTON_WHEELUP, ev.type == SDL_EVENT_MOUSE_WHEEL)) { | ||||
|         #if SDLVER >= 2 | ||||
|         ld dir = ev.wheel.y * 0.25; | ||||
|         #else | ||||
|         ld dir = ev.button.button == SDL_BUTTON_WHEELUP ? 0.25 : -0.25; | ||||
| @@ -1304,7 +1317,7 @@ EX void handle_event(SDL_Event& ev) { | ||||
|         } | ||||
|       } | ||||
|  | ||||
|     if(ev.type == SDL_MOUSEMOTION) { | ||||
|     if(ev.type == SDL_EVENT_MOUSE_MOTION) { | ||||
|       mouseoh = mouseh; | ||||
|        | ||||
|       int lmousex = mousex, lmousey = mousey; | ||||
| @@ -1350,7 +1363,7 @@ EX void handle_event(SDL_Event& ev) { | ||||
|         } | ||||
|       } | ||||
|  | ||||
|     if(ev.type == SDL_QUIT) { | ||||
|     if(ev.type == SDL_EVENT_QUIT) { | ||||
|       #if CAP_DAILY | ||||
|       if(daily::on) daily::handleQuit(3); | ||||
|       else | ||||
| @@ -1429,7 +1442,7 @@ EX bool interpret_as_direction(int sym, int uni) { | ||||
|   #ifdef FAKE_SDL | ||||
|   return false; | ||||
|   #else | ||||
|   return (sym >= SDLK_KP0 && sym <= SDLK_KP9 && !numlock_on); | ||||
|   return (sym >= int(SDLK_KP0) && sym <= int(SDLK_KP9) && !numlock_on); | ||||
|   #endif | ||||
|   } | ||||
|  | ||||
|   | ||||
							
								
								
									
										12
									
								
								dialogs.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								dialogs.cpp
									
									
									
									
									
								
							| @@ -1455,7 +1455,7 @@ EX namespace dialog { | ||||
|      | ||||
|     display(); | ||||
|  | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     texthandler = [&ne] (const SDL_TextInputEvent& ev) { | ||||
|       if(key_actions.count(ev.text[0])) return; | ||||
|       ne.s += ev.text; | ||||
| @@ -1466,7 +1466,7 @@ EX namespace dialog { | ||||
|     keyhandler = [this, &ne] (int sym, int uni) { | ||||
|       handleNavigation(sym, uni); | ||||
|       if((uni >= '0' && uni <= '9') || among(uni, '.', '+', '-', '*', '/', '^', '(', ')', ',', '|', 3) || (uni >= 'a' && uni <= 'z')) { | ||||
|         #if !CAP_SDL2 | ||||
|         #if SDLVER == 1 | ||||
|         if(uni == 3) ne.s += "pi"; | ||||
|         else ne.s += uni; | ||||
|         apply_edit(); | ||||
| @@ -1791,7 +1791,7 @@ EX namespace dialog { | ||||
|     dialog::addItem("cancel", SDLK_ESCAPE); | ||||
|     dialog::display(); | ||||
|  | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     texthandler = [this] (const SDL_TextInputEvent& ev) { | ||||
|       int i = isize(*cfileptr) - (editext?0:4); | ||||
|       cfileptr->insert(i, ev.text); | ||||
| @@ -1819,7 +1819,7 @@ EX namespace dialog { | ||||
|       highlight_text = "//missing"; | ||||
|       list_skip = 0; | ||||
|       } | ||||
|     #if !CAP_SDL2 | ||||
|     #if SDLVER == 1 | ||||
|     else if(uni >= 32 && uni < 127) { | ||||
|       s.insert(i, s0 + char(uni)); | ||||
|       highlight_text = "//missing"; | ||||
| @@ -1946,7 +1946,7 @@ EX namespace dialog { | ||||
|       if(reaction) reaction(); | ||||
|       } | ||||
|     else if((u2 = checker(sym, uni)) != "") { | ||||
|       #if !CAP_SDL2 | ||||
|       #if SDLVER == 1 | ||||
|       for(char c: u2) { | ||||
|         es.insert(editpos, 1, c); | ||||
|         editpos ++; | ||||
| @@ -1959,7 +1959,7 @@ EX namespace dialog { | ||||
|     } | ||||
|  | ||||
|   void string_dialog::handle_textinput() { | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     texthandler = [this] (const SDL_TextInputEvent& ev) { | ||||
|       auto& es = *edited_string; | ||||
|       string txt = ev.text; | ||||
|   | ||||
| @@ -253,7 +253,7 @@ EX void glflush() { | ||||
| #if CAP_SDL && !ISMOBILE | ||||
|  | ||||
| SDL_Surface *aux; | ||||
| #if CAP_SDL2 | ||||
| #if SDLVER >= 2 | ||||
| SDL_Renderer *auxrend; | ||||
| #else | ||||
| #define auxrend aux | ||||
| @@ -2661,15 +2661,15 @@ EX void drawqueue() { | ||||
|   if(current_display->separate_eyes() && !vid.usingGL) { | ||||
|  | ||||
|     if(aux && (aux->w != s->w || aux->h != s->h)) { | ||||
|       SDL_FreeSurface(aux); | ||||
|       #if CAP_SDL2 | ||||
|       SDL_DestroySurface(aux); | ||||
|       #if SDLVER >= 2 | ||||
|       SDL_DestroyRenderer(auxrend); | ||||
|       #endif | ||||
|       } | ||||
|    | ||||
|     if(!aux) { | ||||
|       aux = SDL_CreateRGBSurface(SDL_SWSURFACE,s->w,s->h,32,0,0,0,0); | ||||
|       #if CAP_SDL2 | ||||
|       #if SDLVER >= 2 | ||||
|       auxrend = SDL_CreateSoftwareRenderer(aux); | ||||
|       #endif | ||||
|       } | ||||
|   | ||||
| @@ -99,7 +99,7 @@ bool rawdisplaystr(int x, int y, int shift, int size, const char *str, int color | ||||
|   bool clicked = (mousex >= rect.x && mousey >= rect.y && mousex <= rect.x+rect.w && mousey <= rect.y+rect.h); | ||||
|    | ||||
|   SDL_BlitSurface(txt, NULL, s,&rect);  | ||||
|   SDL_FreeSurface(txt); | ||||
|   SDL_DestroySurface(txt); | ||||
|    | ||||
|   return clicked; | ||||
|   } | ||||
|   | ||||
| @@ -5549,7 +5549,7 @@ EX void drawthemap() { | ||||
|     } | ||||
|  | ||||
|   #if CAP_SDL | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|   lmouseover = mouseover; | ||||
|   lmouseover_distant = lmouseover; | ||||
|   bool useRangedOrb = (!(vid.shifttarget & 1) && haveRangedOrb() && lmouseover && lmouseover->cpdist > 1) || (keystate[SDL12(SDLK_RSHIFT, SDL_SCANCODE_RSHIFT)] | keystate[SDL12(SDLK_LSHIFT, SDL_SCANCODE_LSHIFT)]); | ||||
| @@ -6045,7 +6045,7 @@ EX void drawscreen() { | ||||
|   #if CAP_GL | ||||
|   if(!vid.usingGL)  | ||||
|   #endif | ||||
|     SDL_FillRect(s, NULL, backcolor); | ||||
|     SDL_FillSurfaceRect(s, NULL, backcolor); | ||||
|   #endif | ||||
|     | ||||
|   // displaynum(vx,100, 0, 24, 0xc0c0c0, celldist(cwt.at), ":"); | ||||
|   | ||||
							
								
								
									
										23
									
								
								history.cpp
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								history.cpp
									
									
									
									
									
								
							| @@ -143,14 +143,14 @@ namespace spiral { | ||||
|       SDL_Event event; | ||||
|       while(SDL_PollEvent(&event)) switch (event.type) { | ||||
|  | ||||
|         #if !CAP_SDL2 | ||||
|         #if SDLVER == 1 | ||||
|         case SDL_VIDEORESIZE: { | ||||
|           resize_screen_to(event.resize.w, event.resize.h); | ||||
|           precompute(); | ||||
|           break; | ||||
|           } | ||||
|         #endif | ||||
|         #if CAP_SDL2 | ||||
|         #if SDLVER == 2 | ||||
|         case SDL_WINDOWEVENT: { | ||||
|           if(event.window.event == SDL_WINDOWEVENT_RESIZED) | ||||
|           resize_screen_to(event.window.data1, event.window.data2); | ||||
| @@ -158,13 +158,20 @@ namespace spiral { | ||||
|           break; | ||||
|           } | ||||
|         #endif | ||||
|         case SDL_QUIT: case SDL_MOUSEBUTTONDOWN: | ||||
|         #if SDLVER == 3 | ||||
|         case SDL_EVENT_WINDOW_RESIZED: { | ||||
|           resize_screen_to(event.window.data1, event.window.data2); | ||||
|           precompute(); | ||||
|           break; | ||||
|           } | ||||
|         #endif | ||||
|         case SDL_EVENT_QUIT: case SDL_EVENT_MOUSE_BUTTON_DOWN: | ||||
|           goto breakloop; | ||||
|  | ||||
|         case SDL_KEYDOWN: { | ||||
|           int sym = event.key.keysym.sym; | ||||
|         case SDL_EVENT_KEY_DOWN: { | ||||
|           int sym = SDL23(event.key.keysym.sym, event.key.key); | ||||
|           int uni = 0; | ||||
|           numlock_on = event.key.keysym.mod & KMOD_NUM; | ||||
|           numlock_on = SDL23(event.key.keysym.mod, event.key.mod) & SDL_KMOD_NUM; | ||||
|           if(DKEY == SDLK_RIGHT) velx++; | ||||
|           if(DKEY == SDLK_LEFT) velx--; | ||||
|           if(DKEY == SDLK_UP) vely++; | ||||
| @@ -481,7 +488,7 @@ EX namespace history { | ||||
|         if(dospiral)  | ||||
|           bands.push_back(band); | ||||
|         else  | ||||
|           SDL_FreeSurface(band); | ||||
|           SDL_DestroySurface(band); | ||||
|         }; | ||||
|        | ||||
|       if(!band) { | ||||
| @@ -557,7 +564,7 @@ EX namespace history { | ||||
|      | ||||
|     if(dospiral) { | ||||
|       spiral::loop(bands); | ||||
|       for(int i=0; i<isize(bands); i++) SDL_FreeSurface(bands[i]); | ||||
|       for(int i=0; i<isize(bands); i++) SDL_DestroySurface(bands[i]); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|   | ||||
							
								
								
									
										34
									
								
								multi.cpp
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								multi.cpp
									
									
									
									
									
								
							| @@ -188,17 +188,17 @@ string listkeys(config& scfg, int id) { | ||||
|   string lk = ""; | ||||
|   for(int i=0; i<SCANCODES; i++) | ||||
|     if(scfg.keyaction[i] == id) | ||||
|       #if CAP_SDL2 | ||||
|       #if SDLVER >= 2 | ||||
|       lk = lk + " " + SDL_GetScancodeName(SDL_Scancode(i)); | ||||
|       #else | ||||
|       lk = lk + " " + SDL_GetKeyName(SDLKey(i)); | ||||
|       #endif | ||||
| #if CAP_SDLJOY | ||||
|   for(int i=0; i<numsticks; i++) for(int k=0; k<SDL_JoystickNumButtons(sticks[i]) && k<MAXBUTTON; k++) | ||||
|   for(int i=0; i<numsticks; i++) for(int k=0; k<SDL_GetNumJoystickButtons(sticks[i]) && k<MAXBUTTON; k++) | ||||
|     if(scfg.joyaction[i][k] == id) { | ||||
|       lk = lk + " " + cts('A'+i)+"-B"+its(k); | ||||
|       } | ||||
|   for(int i=0; i<numsticks; i++) for(int k=0; k<SDL_JoystickNumHats(sticks[i]) && k<MAXHAT; k++) | ||||
|   for(int i=0; i<numsticks; i++) for(int k=0; k<SDL_GetNumJoystickHats(sticks[i]) && k<MAXHAT; k++) | ||||
|     for(int d=0; d<4; d++) | ||||
|       if(scfg.hataction[i][k][d] == id) { | ||||
|         lk = lk + " " + cts('A'+i)+"-"+"URDL"[d]; | ||||
| @@ -293,7 +293,7 @@ struct key_configurer { | ||||
|  | ||||
| #if CAP_SDLJOY     | ||||
|     joyhandler = [this] (SDL_Event& ev) {  | ||||
|       if(ev.type == SDL_JOYBUTTONDOWN && setwhat) { | ||||
|       if(ev.type == SDL_EVENT_JOYSTICK_BUTTON_DOWN && setwhat) { | ||||
|         int joyid = ev.jbutton.which; | ||||
|         int button = ev.jbutton.button; | ||||
|         if(joyid < 8 && button < 32) | ||||
| @@ -302,7 +302,7 @@ struct key_configurer { | ||||
|         return true; | ||||
|         } | ||||
|    | ||||
|       else if(ev.type == SDL_JOYHATMOTION && setwhat) { | ||||
|       else if(ev.type == SDL_EVENT_JOYSTICK_HAT_MOTION && setwhat) { | ||||
|         int joyid = ev.jhat.which; | ||||
|         int hat = ev.jhat.hat; | ||||
|         int dir = 4; | ||||
| @@ -357,8 +357,8 @@ struct joy_configurer { | ||||
|     getcstat = ' '; | ||||
|     numaxeconfigs = 0; | ||||
|     for(int j=0; j<numsticks; j++) { | ||||
|       for(int ax=0; ax<SDL_JoystickNumAxes(sticks[j]) && ax < MAXAXE; ax++) if(numaxeconfigs<24) { | ||||
|         int y = SDL_JoystickGetAxis(sticks[j], ax); | ||||
|       for(int ax=0; ax<SDL_GetNumJoystickAxes(sticks[j]) && ax < MAXAXE; ax++) if(numaxeconfigs<24) { | ||||
|         int y = SDL_GetJoystickAxis(sticks[j], ax); | ||||
|         string buf = " "; | ||||
|         if(configdead) | ||||
|           buf += its(y); | ||||
| @@ -614,7 +614,7 @@ void pressaction(int id) { | ||||
|   } | ||||
|  | ||||
| EX int key_to_scan(int sym) { | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|   return SDL_GetScancodeFromKey(sym); | ||||
|   #else | ||||
|   return sym; | ||||
| @@ -669,7 +669,7 @@ EX void initConfig() { | ||||
|    | ||||
|   int* t = scfg.keyaction; | ||||
|    | ||||
|   #if CAP_SDL2 | ||||
|   #if SDLVER >= 2 | ||||
|  | ||||
|   t[SDL_SCANCODE_W] = 16 + 4; | ||||
|   t[SDL_SCANCODE_D] = 16 + 5; | ||||
| @@ -830,7 +830,7 @@ EX void initConfig() { | ||||
| EX void get_actions(config& scfg) { | ||||
|  | ||||
|   #if !ISMOBILE | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|  | ||||
|   for(auto& a: action_states_flat) a.last = a.held, a.held = 0; | ||||
|  | ||||
| @@ -842,20 +842,20 @@ EX void get_actions(config& scfg) { | ||||
| #if CAP_SDLJOY   | ||||
|   for(int j=0; j<numsticks; j++) { | ||||
|  | ||||
|     for(int b=0; b<SDL_JoystickNumButtons(sticks[j]) && b<MAXBUTTON; b++) | ||||
|       if(SDL_JoystickGetButton(sticks[j], b)) | ||||
|     for(int b=0; b<SDL_GetNumJoystickButtons(sticks[j]) && b<MAXBUTTON; b++) | ||||
|       if(SDL_GetJoystickButton(sticks[j], b)) | ||||
|         pressaction(scfg.joyaction[j][b]); | ||||
|  | ||||
|     for(int b=0; b<SDL_JoystickNumHats(sticks[j]) && b<MAXHAT; b++) { | ||||
|       int stat = SDL_JoystickGetHat(sticks[j], b); | ||||
|     for(int b=0; b<SDL_GetNumJoystickHats(sticks[j]) && b<MAXHAT; b++) { | ||||
|       int stat = SDL_GetJoystickHat(sticks[j], b); | ||||
|       if(stat & SDL_HAT_UP) pressaction(scfg.hataction[j][b][0]); | ||||
|       if(stat & SDL_HAT_RIGHT) pressaction(scfg.hataction[j][b][1]); | ||||
|       if(stat & SDL_HAT_DOWN) pressaction(scfg.hataction[j][b][2]); | ||||
|       if(stat & SDL_HAT_LEFT) pressaction(scfg.hataction[j][b][3]); | ||||
|       } | ||||
|      | ||||
|     for(int b=0; b<SDL_JoystickNumAxes(sticks[j]) && b<MAXAXE; b++) { | ||||
|       int value = SDL_JoystickGetAxis(sticks[j], b); | ||||
|     for(int b=0; b<SDL_GetNumJoystickAxes(sticks[j]) && b<MAXAXE; b++) { | ||||
|       int value = SDL_GetJoystickAxis(sticks[j], b); | ||||
|       int dz = scfg.deadzoneval[j][b]; | ||||
|       if(value > dz) value -= dz; else if(value < -dz) value += dz; | ||||
|       else value = 0; | ||||
| @@ -876,7 +876,7 @@ EX void handleInput(int delta, config &scfg) { | ||||
|  | ||||
|   get_actions(scfg); | ||||
|  | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|  | ||||
|   if(keystate[SDL12(SDLK_LCTRL, SDL_SCANCODE_LCTRL)] || keystate[SDL12(SDLK_RCTRL, SDL_SCANCODE_RCTRL)]) d /= 5; | ||||
|    | ||||
|   | ||||
							
								
								
									
										16
									
								
								mymake.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								mymake.cpp
									
									
									
									
									
								
							| @@ -72,6 +72,10 @@ void set_linux() { | ||||
|     opts = "-DFHS -DLINUX -I/usr/include/SDL2"; | ||||
|     libs = " -lSDL2 -lSDL2_ttf -lSDL2_mixer -lSDL2_gfx -lGLEW -lGL -lpng -rdynamic -lpthread -lz"; | ||||
|     } | ||||
|   else if(sdlver == 3) { | ||||
|     opts = "-DFHS -DLINUX -I/usr/include/SDL3"; | ||||
|     libs = " -lSDL3 -lSDL3_ttf -lSDL3_mixer -lSDL3_gfx -lGLEW -lGL -lpng -rdynamic -lpthread -lz"; | ||||
|     } | ||||
|   else if(sdlver == 1) { | ||||
|     opts = "-DFHS -DLINUX -I/usr/include/SDL"; | ||||
|     libs = " -lSDL -lSDL_ttf -lSDL_mixer -lSDL_gfx -lGLEW -lGL -lpng -rdynamic -lpthread -lz"; | ||||
| @@ -114,6 +118,7 @@ void set_mingw64_cross() { | ||||
|   libs = " hyper64.res -static-libgcc -lopengl32"; | ||||
|   if(sdlver == 1) libs += " -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf"; | ||||
|   if(sdlver == 2) libs += " -lSDL2 -lSDL2_gfx -lSDL2_mixer -lSDL2_ttf"; | ||||
|   if(sdlver == 3) libs += " -lSDL3 -lSDL3_gfx -lSDL3_mixer -lSDL3_ttf"; | ||||
|   libs += " -lpthread -lz -lglew32 -lpng"; | ||||
|   setvbuf(stdout, NULL, _IONBF, 0); // MinGW is quirky with output buffering | ||||
|   if(!file_exists("hyper64.res")) | ||||
| @@ -238,7 +243,7 @@ int main(int argc, char **argv) { | ||||
|       set_os(os); | ||||
|       obj_dir += "/sdl1"; | ||||
|       setdir += "../"; | ||||
|       opts += " -DCAP_SDL2=0"; | ||||
|       opts += " -DSDLVER=1"; | ||||
|       } | ||||
|     else if(s == "-sdl0") { | ||||
|       sdlver = 0; | ||||
| @@ -252,7 +257,14 @@ int main(int argc, char **argv) { | ||||
|       set_os(os); | ||||
|       obj_dir += "/sdl2"; | ||||
|       setdir += "../"; | ||||
|       opts += " -DCAP_SDL2=1"; | ||||
|       opts += " -DSDLVER=2"; | ||||
|       } | ||||
|     else if(s == "-sdl3") { | ||||
|       sdlver = 3; | ||||
|       set_os(os); | ||||
|       obj_dir += "/sdl3"; | ||||
|       setdir += "../"; | ||||
|       opts += " -DSDLVER=3"; | ||||
|       } | ||||
|     else if(s.substr(0, 2) == "-f" || s.substr(0, 2) == "-m") { | ||||
|       opts += " " + s; | ||||
|   | ||||
							
								
								
									
										28
									
								
								netgen.cpp
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								netgen.cpp
									
									
									
									
									
								
							| @@ -342,12 +342,12 @@ EX namespace netgen { | ||||
|     dynamicval<SDL_Surface*> ds(s); | ||||
|  | ||||
|     s = net = SDL_CreateRGBSurface(SDL_SWSURFACE,SX*nscale,SY*nscale,32,0,0,0,0); | ||||
|     #if CAP_SDL2 | ||||
|     #if SDLVER >= 2 | ||||
|     dynamicval<SDL_Renderer*> dr(srend); | ||||
|     srend = SDL_CreateSoftwareRenderer(s); | ||||
|     #endif | ||||
|  | ||||
|     SDL_FillRect(net, NULL, 0xFFFFFF); | ||||
|     SDL_FillSurfaceRect(net, NULL, 0xFFFFFF); | ||||
|      | ||||
|     int pateks = 0; | ||||
|     for(int i=0; i<CELLS; i++) patek[i].resize(ct[i]); | ||||
| @@ -442,9 +442,9 @@ EX namespace netgen { | ||||
|       IMAGESAVE(quarter, hr::format("papermodel-page%d%d" IMAGEEXT, iy, ix).c_str()); | ||||
|       } | ||||
|      | ||||
|     SDL_FreeSurface(net); | ||||
|     SDL_FreeSurface(quarter); | ||||
|     #if CAP_SDL2 | ||||
|     SDL_DestroySurface(net); | ||||
|     SDL_DestroySurface(quarter); | ||||
|     #if SDLVER >= 2 | ||||
|     SDL_DestroyRenderer(srend); | ||||
|     #endif | ||||
|     } | ||||
| @@ -624,28 +624,32 @@ EX namespace netgen { | ||||
|       SDL_Event event; | ||||
|        | ||||
|       while(SDL_PollEvent(&event)) switch (event.type) { | ||||
|         case SDL_QUIT: | ||||
|         case SDL_EVENT_QUIT: | ||||
|           exit(1); | ||||
|           return; | ||||
|      | ||||
|         case SDL_MOUSEBUTTONDOWN: { | ||||
|         case SDL_EVENT_MOUSE_BUTTON_DOWN: { | ||||
|           clicked(event.button.x, event.button.y, event.button.button); | ||||
|           break; | ||||
|           } | ||||
|          | ||||
|         case SDL_MOUSEBUTTONUP: { | ||||
|         case SDL_EVENT_MOUSE_BUTTON_UP: { | ||||
|           clicked(event.button.x, event.button.y, 16+event.button.button); | ||||
|           break; | ||||
|           } | ||||
|          | ||||
|         case SDL_MOUSEMOTION: { | ||||
|         case SDL_EVENT_MOUSE_MOTION: { | ||||
|           clicked(event.motion.x, event.motion.y, 32); | ||||
|           break; | ||||
|           } | ||||
|          | ||||
|         case SDL_KEYDOWN: {           | ||||
|         case SDL_EVENT_KEY_DOWN: { | ||||
|           #if SDLVER >= 3 | ||||
|           int key = event.key.key; | ||||
|           #else | ||||
|           int key = event.key.keysym.sym; | ||||
|           #if CAP_SDL2 | ||||
|           #endif | ||||
|           #if SDLVER >= 2 | ||||
|           int uni = key; | ||||
|           #else | ||||
|           int uni = event.key.keysym.unicode; | ||||
| @@ -663,7 +667,7 @@ EX namespace netgen { | ||||
|           break; | ||||
|           } | ||||
|      | ||||
|         case SDL_KEYUP: { | ||||
|         case SDL_EVENT_KEY_UP: { | ||||
|           rs = 0; | ||||
|           rz = 0;           | ||||
|           break; | ||||
|   | ||||
| @@ -226,7 +226,7 @@ renderbuffer::~renderbuffer() { | ||||
| #endif | ||||
| #if CAP_SDL | ||||
|   if(srf)  | ||||
|     SDL_FreeSurface(srf); | ||||
|     SDL_DestroySurface(srf); | ||||
| #endif | ||||
|   } | ||||
|  | ||||
| @@ -238,7 +238,7 @@ void renderbuffer::clear(color_t col) { | ||||
|     } | ||||
|   #endif | ||||
|   #if CAP_SDL | ||||
|   SDL_FillRect(srf, NULL, col); | ||||
|   SDL_FillSurfaceRect(srf, NULL, col); | ||||
|   #endif | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -153,7 +153,7 @@ void pass_time() { | ||||
|     ld delta = t - last_t; | ||||
|     dynamicval<eGeometry> g(geometry, geometry == gTwistedProduct ? geometry : gCubeTiling); | ||||
|  | ||||
|     const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|     const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|     if(keystate['a'] || forcekey == 'a') current = apply_lorentz(current, lorentz(0, 2, delta*accel)), ang = 180, acc = true; | ||||
|     if(keystate['d'] || forcekey == 'd') current = apply_lorentz(current, lorentz(0, 2, -delta*accel)), ang = 0, acc = true;  | ||||
|     if(keystate['w'] || forcekey == 'w') current = apply_lorentz(current, lorentz(1, 2, delta*accel)), ang = 90, acc = true;  | ||||
|   | ||||
| @@ -432,7 +432,7 @@ void bantar_anim() { | ||||
|      | ||||
|     SDL_Event ev; | ||||
|     while(SDL_PollEvent(&ev))  | ||||
|       if(ev.type == SDL_KEYDOWN || ev.type == SDL_MOUSEBUTTONDOWN) | ||||
|       if(ev.type == SDL_EVENT_KEY_DOWN || ev.type == SDL_EVENT_MOUSE_BUTTON_DOWN) | ||||
|         breakanim = true;       | ||||
|     } | ||||
|   mapeditor::drawplayer = true; | ||||
|   | ||||
| @@ -384,7 +384,7 @@ bool last_mkey = false; | ||||
| extern int mousepx, mousepy; | ||||
|  | ||||
| void game_frame() {   | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|   if(keystate['3']) | ||||
|     current_room->place_block_full(mousepx / block_x, mousepy / block_y, 0); | ||||
|   if(keystate['1']) | ||||
|   | ||||
							
								
								
									
										2
									
								
								rug.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								rug.cpp
									
									
									
									
									
								
							| @@ -1347,7 +1347,7 @@ EX void actDraw() { | ||||
|   #endif | ||||
|  | ||||
|   #if CAP_HOLDKEYS | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|   if(keystate[SDL12(SDLK_LALT, SDL_SCANCODE_LALT)]) alpha /= 10; | ||||
|   #endif | ||||
|  | ||||
|   | ||||
							
								
								
									
										91
									
								
								savepng.cpp
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								savepng.cpp
									
									
									
									
									
								
							| @@ -5,17 +5,24 @@ | ||||
|  * http://www.libpng.org/pub/png/src/libpng-LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| #ifdef CAP_SDL2 | ||||
| #if CAP_SDL2 | ||||
| #define USE_SDL2 | ||||
| #endif | ||||
| #ifndef SDLVER | ||||
| #define SDLVER 1 | ||||
| #endif | ||||
|  | ||||
| #ifdef USE_SDL2 | ||||
| #include <SDL2/SDL.h> | ||||
| #else | ||||
| #if SDLVER == 1 | ||||
| #include <SDL/SDL.h> | ||||
| #define SDL23(x,y) x | ||||
| #endif | ||||
| #if SDLVER == 2 | ||||
| #include <SDL2/SDL.h> | ||||
| #define SDL23(x,y) x | ||||
| #endif | ||||
| #if SDLVER == 3 | ||||
| #include <SDL3/SDL.h> | ||||
| #define SDL23(x,y) y | ||||
| #endif | ||||
|  | ||||
| #include <cstdlib> | ||||
| #include <png.h> | ||||
|  | ||||
| #define SUCCESS 0 | ||||
| @@ -35,6 +42,18 @@ | ||||
| #define amask 0xFF000000 | ||||
| #endif | ||||
|  | ||||
| #if SDLVER >= 3 | ||||
| struct pixformat { int BitsPerPixel; int BytesPerPixel; Uint32 Rmask, Gmask, Bmask, Amask; }; | ||||
|  | ||||
| pixformat get_format(SDL_PixelFormat val) { pixformat pf; SDL_GetMasksForPixelFormat(val, &pf.BitsPerPixel, &pf.Rmask, &pf.Gmask, &pf.Bmask, &pf.Amask); pf.BytesPerPixel = (pf.BitsPerPixel+7) / 8; return pf; } | ||||
|  | ||||
| #else | ||||
|  | ||||
| SDL_PixelFormat get_format(SDL_PixelFormat *val) { return *val; } | ||||
|  | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /* libpng callbacks */  | ||||
| static void png_error_SDL(png_structp ctx, png_const_charp str) | ||||
| { | ||||
| @@ -42,8 +61,13 @@ static void png_error_SDL(png_structp ctx, png_const_charp str) | ||||
| } | ||||
| static void png_write_SDL(png_structp png_ptr, png_bytep data, png_size_t length) | ||||
| { | ||||
| 	SDL_RWops *rw = (SDL_RWops*)png_get_io_ptr(png_ptr); | ||||
| 	#if SDLVER >= 3 | ||||
|         SDL_IOStream *rw = (SDL_IOStream*)png_get_io_ptr(png_ptr); | ||||
| 	SDL_WriteIO(rw, data, length); | ||||
| 	#else | ||||
|         SDL_RWops *rw = (SDL_RWops*)png_get_io_ptr(png_ptr); | ||||
| 	SDL_RWwrite(rw, data, sizeof(png_byte), length); | ||||
| 	#endif | ||||
| } | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| @@ -54,8 +78,10 @@ SDL_Surface *SDL_PNGFormatAlpha(SDL_Surface *src) | ||||
| 	SDL_Surface *surf; | ||||
| 	SDL_Rect rect = { 0, 0, 0, 0 }; | ||||
|  | ||||
| 	auto pf = get_format(src->format); | ||||
|  | ||||
| 	/* NO-OP for images < 32bpp and 32bpp images that already have Alpha channel */  | ||||
| 	if (src->format->BitsPerPixel <= 24 || src->format->Amask) { | ||||
| 	if (pf.BitsPerPixel <= 24 || pf.Amask) { | ||||
| 		src->refcount++; | ||||
| 		return src; | ||||
| 	} | ||||
| @@ -63,22 +89,31 @@ SDL_Surface *SDL_PNGFormatAlpha(SDL_Surface *src) | ||||
| 	/* Convert 32bpp alpha-less image to 24bpp alpha-less image */ | ||||
| 	rect.w = src->w; | ||||
| 	rect.h = src->h; | ||||
| 	surf = SDL_CreateRGBSurface(src->flags, src->w, src->h, 24, | ||||
| 		src->format->Rmask, src->format->Gmask, src->format->Bmask, 0); | ||||
| 	#if SDLVER >= 3 | ||||
| 	surf = SDL_CreateSurface(src->w, src->h, SDL_GetPixelFormatForMasks(24, pf.Rmask, pf.Gmask, pf.Bmask, 0)); | ||||
| 	SDL_BlitSurfaceUnchecked(src, &rect, surf, &rect); | ||||
| 	#else | ||||
| 	surf = SDL_CreateRGBSurface(src->flags, src->w, src->h, 24, pf.Rmask, pf.Gmask, pf.Bmask, 0); | ||||
| 	SDL_LowerBlit(src, &rect, surf, &rect); | ||||
| 	#endif | ||||
|  | ||||
| 	return surf; | ||||
| } | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" | ||||
|  | ||||
| #define ERR SDL23(if (freedst) SDL_RWclose(dst); return (ERROR), if (freedst) SDL_CloseIO(dst); return (ERROR)) | ||||
|  | ||||
| #endif | ||||
| int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst)  | ||||
| int SDL_SavePNG_RW(SDL_Surface *surface, SDL23(SDL_RWops, SDL_IOStream) *dst, int freedst) | ||||
| { | ||||
| 	png_structp png_ptr; | ||||
| 	png_infop info_ptr; | ||||
| 	#if SDLVER <= 2 | ||||
| 	png_colorp pal_ptr; | ||||
| 	SDL_Palette *pal; | ||||
| 	#endif | ||||
| 	int i, colortype; | ||||
| #ifdef USE_ROW_POINTERS | ||||
| 	png_bytep *row_pointers; | ||||
| @@ -92,29 +127,25 @@ int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst) | ||||
| 	if (!surface) | ||||
| 	{ | ||||
| 		SDL_SetError("Argument 1 to SDL_SavePNG_RW can't be NULL, expecting SDL_Surface*\n"); | ||||
| 		if (freedst) SDL_RWclose(dst); | ||||
| 		return (ERROR); | ||||
| 		ERR; | ||||
| 	} | ||||
| 	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, png_error_SDL, NULL); /* err_ptr, err_fn, warn_fn */ | ||||
| 	if (!png_ptr)  | ||||
| 	{ | ||||
| 		SDL_SetError("Unable to png_create_write_struct on %s\n", PNG_LIBPNG_VER_STRING); | ||||
| 		if (freedst) SDL_RWclose(dst); | ||||
| 		return (ERROR); | ||||
| 		ERR; | ||||
| 	} | ||||
| 	info_ptr = png_create_info_struct(png_ptr); | ||||
| 	if (!info_ptr) | ||||
| 	{ | ||||
| 		SDL_SetError("Unable to png_create_info_struct\n"); | ||||
| 		png_destroy_write_struct(&png_ptr, NULL); | ||||
| 		if (freedst) SDL_RWclose(dst); | ||||
| 		return (ERROR); | ||||
| 		ERR; | ||||
| 	} | ||||
| 	if (setjmp(png_jmpbuf(png_ptr)))	/* All other errors, see also "png_error_SDL" */ | ||||
| 	{ | ||||
| 		png_destroy_write_struct(&png_ptr, &info_ptr); | ||||
| 		if (freedst) SDL_RWclose(dst); | ||||
| 		return (ERROR); | ||||
| 		ERR; | ||||
| 	} | ||||
|  | ||||
| 	/* Setup our RWops writer */ | ||||
| @@ -122,9 +153,10 @@ int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst) | ||||
|  | ||||
| 	/* Prepare chunks */ | ||||
| 	colortype = PNG_COLOR_MASK_COLOR; | ||||
| 	if (surface->format->BytesPerPixel > 0 | ||||
| 	&&  surface->format->BytesPerPixel <= 8 | ||||
| 	&& (pal = surface->format->palette)) | ||||
| 	auto pf = get_format(surface->format); | ||||
|  | ||||
| 	#if SDLVER <= 2 | ||||
|         if (pf.BytesPerPixel > 0 && pf.BytesPerPixel <= 8 && (pal = surface->format->palette)) | ||||
| 	{ | ||||
| 		colortype |= PNG_COLOR_MASK_PALETTE; | ||||
| 		pal_ptr = (png_colorp)malloc(pal->ncolors * sizeof(png_color)); | ||||
| @@ -136,7 +168,10 @@ int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst) | ||||
| 		png_set_PLTE(png_ptr, info_ptr, pal_ptr, pal->ncolors); | ||||
| 		free(pal_ptr); | ||||
| 	} | ||||
| 	else if (surface->format->BytesPerPixel > 3 || surface->format->Amask) | ||||
| 	#else | ||||
| 	if(false) ; | ||||
| 	#endif | ||||
| 	else if (pf.BytesPerPixel > 3 || pf.Amask) | ||||
| 		colortype |= PNG_COLOR_MASK_ALPHA; | ||||
|  | ||||
| 	png_set_IHDR(png_ptr, info_ptr, surface->w, surface->h, 8, colortype, | ||||
| @@ -145,9 +180,9 @@ int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst) | ||||
| //	png_set_packing(png_ptr); | ||||
|  | ||||
| 	/* Allow BGR surfaces */ | ||||
| 	if (surface->format->Rmask == bmask | ||||
| 	&& surface->format->Gmask == gmask | ||||
| 	&& surface->format->Bmask == rmask) | ||||
| 	if (pf.Rmask == bmask | ||||
| 	&& pf.Gmask == gmask | ||||
| 	&& pf.Bmask == rmask) | ||||
| 		png_set_bgr(png_ptr); | ||||
|  | ||||
| 	/* Write everything */ | ||||
| @@ -166,6 +201,6 @@ int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst) | ||||
|  | ||||
| 	/* Done */ | ||||
| 	png_destroy_write_struct(&png_ptr, &info_ptr); | ||||
| 	if (freedst) SDL_RWclose(dst); | ||||
| 	if (freedst) SDL23(SDL_RWclose, SDL_CloseIO)(dst); | ||||
| 	return (SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -18,8 +18,13 @@ extern "C" { /* This helps CPP projects that include this header */ | ||||
|  * Returns 0 success or -1 on failure, the error message is then retrievable | ||||
|  * via SDL_GetError(). | ||||
|  */ | ||||
| #if SDLVER >= 3 | ||||
| #define SDL_SavePNG(surface, file) \ | ||||
| 	SDL_SavePNG_RW(surface, SDL_IOFromFile(file, "wb"), 1) | ||||
| #else | ||||
| #define SDL_SavePNG(surface, file) \ | ||||
| 	SDL_SavePNG_RW(surface, SDL_RWFromFile(file, "wb"), 1) | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Save an SDL_Surface as a PNG file, using writable RWops. | ||||
| @@ -31,7 +36,11 @@ extern "C" { /* This helps CPP projects that include this header */ | ||||
|  * Returns 0 success or -1 on failure, the error message is then retrievable | ||||
|  * via SDL_GetError(). | ||||
|  */ | ||||
| #if SDLVER >= 3 | ||||
| extern int SDL_SavePNG_RW(SDL_Surface *surface, SDL_IOStream *rw, int freedst); | ||||
| #else | ||||
| extern int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *rw, int freedst); | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Return new SDL_Surface with a format suitable for PNG output. | ||||
|   | ||||
| @@ -626,7 +626,7 @@ EX always_false in; | ||||
|           } | ||||
|         } | ||||
|       IMAGESAVE(s, (filename + "-floors.png").c_str()); | ||||
|       SDL_FreeSurface(s); | ||||
|       SDL_DestroySurface(s); | ||||
|       } | ||||
|     #endif | ||||
|     #endif | ||||
| @@ -641,7 +641,7 @@ EX } | ||||
| void IMAGESAVE(SDL_Surface *s, const char *fname) { | ||||
|   SDL_Surface *s2 = SDL_PNGFormatAlpha(s); | ||||
|   SDL_SavePNG(s2, fname); | ||||
|   if(s != s2) SDL_FreeSurface(s2); | ||||
|   if(s != s2) SDL_DestroySurface(s2); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| @@ -741,7 +741,7 @@ EX void postprocess(string fname, SDL_Surface *sdark, SDL_Surface *sbright) { | ||||
|       } | ||||
|     } | ||||
|   output(sout, fname); | ||||
|   SDL_FreeSurface(sout); | ||||
|   SDL_DestroySurface(sout); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -897,12 +897,8 @@ void movePlayer(monster *m, int delta) { | ||||
|     } | ||||
|  | ||||
| #if CAP_SDL | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   #if CAP_SDL2 | ||||
|   bool forcetarget = (keystate[SDL_SCANCODE_RSHIFT] | keystate[SDL_SCANCODE_LSHIFT]); | ||||
|   #else | ||||
|   bool forcetarget = (keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]); | ||||
|   #endif | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|   bool forcetarget = (keystate[SDL12(SDLK_RSHIFT, SDL_SCANCODE_RSHIFT)] | keystate[SDL12(SDLK_LSHIFT, SDL_SCANCODE_LSHIFT)]); | ||||
|   if(((mousepressed && !forcetarget) || facemouse) && delta > 0 && !mouseout() && !stdracing && GDIM == 2) { | ||||
|     // playermoved = true; | ||||
|     hyperpoint h = inverse_shift(m->pat, mouseh); | ||||
|   | ||||
| @@ -214,7 +214,7 @@ EX void initAudio() { | ||||
|   audio = loadMusicInfo(); | ||||
|  | ||||
|   if(audio) { | ||||
|     if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 2048) != 0) { | ||||
|     if(SDL23(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 2048) != 0, !Mix_OpenAudio(0, nullptr))) { | ||||
|       fprintf(stderr, "Unable to initialize audio: %s\n", Mix_GetError()); | ||||
|       audio = false; | ||||
|       } | ||||
|   | ||||
							
								
								
									
										167
									
								
								sysconfig.h
									
									
									
									
									
								
							
							
						
						
									
										167
									
								
								sysconfig.h
									
									
									
									
									
								
							| @@ -129,8 +129,12 @@ | ||||
| #define CAP_SDL (!ISMOBILE) | ||||
| #endif | ||||
|  | ||||
| #ifndef CAP_SDL2 | ||||
| #define CAP_SDL2 0 | ||||
| #ifndef SDLVER | ||||
| #ifdef CAP_SDL | ||||
| #define SDLVER 1 | ||||
| #else | ||||
| #define SDLVER 0 | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #ifndef CAP_TIMEOFDAY | ||||
| @@ -357,57 +361,76 @@ | ||||
| #include <stdio.h> | ||||
|  | ||||
| #if CAP_SDL | ||||
| #if CAP_SDL2 | ||||
| #include <SDL2/SDL.h> | ||||
| #define SDL12(x,y) y | ||||
| #define SDLK_KP1 SDLK_KP_1 | ||||
| #define SDLK_KP2 SDLK_KP_2 | ||||
| #define SDLK_KP3 SDLK_KP_3 | ||||
| #define SDLK_KP4 SDLK_KP_4 | ||||
| #define SDLK_KP5 SDLK_KP_5 | ||||
| #define SDLK_KP6 SDLK_KP_6 | ||||
| #define SDLK_KP7 SDLK_KP_7 | ||||
| #define SDLK_KP8 SDLK_KP_8 | ||||
| #define SDLK_KP9 SDLK_KP_9 | ||||
| #define SDLK_KP0 SDLK_KP_0 | ||||
| #define SDL12_GetKeyState SDL_GetKeyboardState | ||||
| #define KEYSTATES SDL_NUM_SCANCODES | ||||
| #else | ||||
| #include <SDL/SDL.h> | ||||
| #define SDL12(x,y) x | ||||
| #define SDL12_GetKeyState SDL_GetKeyState | ||||
| #define KEYSTATES SDLK_LAST | ||||
| #if SDLVER == 3 | ||||
| #include <SDL3/SDL.h> | ||||
| #endif | ||||
| #if SDLVER == 2 | ||||
| #include <SDL2/SDL.h> | ||||
| #endif | ||||
| #if SDLVER == 1 | ||||
| #include <SDL/SDL.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if SDLVER >= 3 | ||||
| #define SDL23(x,y) y | ||||
| #else | ||||
| #define SDL23(x,y) x | ||||
| #endif | ||||
|  | ||||
| #if SDLVER >= 2 | ||||
| #define SDL12(x,y) y | ||||
| #else | ||||
| #define SDL12(x,y) x | ||||
| #endif | ||||
|  | ||||
| #define SDL123(x,y,z) SDL12(x,SDL23(y,z)) | ||||
|  | ||||
| #define SDL12_GetKeyState SDL12(SDL_GetKeyState, SDL_GetKeyboardState) | ||||
| #define sdl_keystate_type SDL23(Uint8, bool) | ||||
| #define KEYSTATES SDL123(SDLK_LAST, SDL_NUM_SCANCODES, SDL_SCANCODE_COUNT) | ||||
|  | ||||
| #if !ISMAC | ||||
| #undef main | ||||
| #endif | ||||
|  | ||||
| #if CAP_SDLAUDIO | ||||
| #if CAP_SDL2 | ||||
| #include <SDL2/SDL_mixer.h> | ||||
| #else | ||||
| #if SDLVER == 1 | ||||
| #include <SDL/SDL_mixer.h> | ||||
| #endif | ||||
| #if SDLVER == 2 | ||||
| #include <SDL2/SDL_mixer.h> | ||||
| #endif | ||||
| #if SDLVER == 3 | ||||
| #include <SDL3_mixer/SDL_mixer.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if CAP_SDLTTF | ||||
| #if CAP_SDL2 | ||||
| #include <SDL2/SDL_ttf.h> | ||||
| #else | ||||
| #if SDLVER == 1 | ||||
| #include <SDL/SDL_ttf.h> | ||||
| #endif | ||||
| #if SDLVER == 2 | ||||
| #include <SDL2/SDL_ttf.h> | ||||
| #endif | ||||
| #if SDLVER == 3 | ||||
| #include <SDL3_ttf/SDL_ttf.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if CAP_SDLGFX | ||||
| #if CAP_SDL2 | ||||
| #include <SDL2/SDL2_gfxPrimitives.h> | ||||
| #else | ||||
| #if SDLVER == 1 | ||||
| #include <SDL/SDL_gfxPrimitives.h> | ||||
| #endif | ||||
| #if SDLVER == 2 | ||||
| #include <SDL2/SDL2_gfxPrimitives.h> | ||||
| #endif | ||||
| #if SDLVER == 3 | ||||
| #include <SDL3_gfx/SDL3_gfxPrimitives.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #elif !ISFAKEMOBILE | ||||
| #if !CAP_SDLGFX && !ISFAKEMOBILE | ||||
| #define SDLK_F1  (123001) | ||||
| #define SDLK_F2  (123002) | ||||
| #define SDLK_F3  (123003) | ||||
| @@ -451,6 +474,86 @@ typedef int SDL_Event; | ||||
| typedef unsigned int Uint32; | ||||
| #endif | ||||
|  | ||||
| #if CAP_SDL | ||||
| #define SDL_error_in(x) SDL23(((x) < 0), !(x)) | ||||
|  | ||||
| #if SDLVER == 3 | ||||
| #define SDL_SWSURFACE 0 /* unused parameter */ | ||||
| inline SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) { | ||||
|   return SDL_CreateSurface(width, height, SDL_GetPixelFormatForMasks(depth, Rmask, Gmask, Bmask, Amask)); | ||||
|   } | ||||
|  | ||||
| inline int TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h) { | ||||
|   return TTF_GetStringSize(font, text, strlen(text), w, h); | ||||
|   } | ||||
|  | ||||
| inline SDL_Surface* TTF_RenderUTF8_Blended(TTF_Font *font, const char *text, SDL_Color fg) { | ||||
|   return TTF_RenderText_Blended(font, text, strlen(text), fg); | ||||
|   } | ||||
|  | ||||
| inline SDL_Surface* TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg) { | ||||
|   return TTF_RenderText_Solid(font, text, strlen(text), fg); | ||||
|   } | ||||
|  | ||||
| #define Mix_GetError SDL_GetError | ||||
| #endif | ||||
|  | ||||
| #if SDLVER >= 2 | ||||
| #define SDLK_KP1 SDLK_KP_1 | ||||
| #define SDLK_KP2 SDLK_KP_2 | ||||
| #define SDLK_KP3 SDLK_KP_3 | ||||
| #define SDLK_KP4 SDLK_KP_4 | ||||
| #define SDLK_KP5 SDLK_KP_5 | ||||
| #define SDLK_KP6 SDLK_KP_6 | ||||
| #define SDLK_KP7 SDLK_KP_7 | ||||
| #define SDLK_KP8 SDLK_KP_8 | ||||
| #define SDLK_KP9 SDLK_KP_9 | ||||
| #define SDLK_KP0 SDLK_KP_0 | ||||
| #endif | ||||
|  | ||||
| #if SDLVER < 3 | ||||
| #define SDL_EVENT_QUIT SDL_QUIT | ||||
| #define SDL_EVENT_MOUSE_BUTTON_DOWN SDL_MOUSEBUTTONDOWN | ||||
| #define SDL_EVENT_MOUSE_BUTTON_UP SDL_MOUSEBUTTONUP | ||||
| #define SDL_EVENT_MOUSE_MOTION SDL_MOUSEMOTION | ||||
| #define SDL_EVENT_MOUSE_WHEEL SDL_MOUSEWHEEL | ||||
| #define SDL_EVENT_KEY_DOWN SDL_KEYDOWN | ||||
| #define SDL_EVENT_KEY_UP SDL_KEYUP | ||||
| #define SDL_EVENT_JOYSTICK_BUTTON_DOWN SDL_JOYBUTTONDOWN | ||||
| #define SDL_EVENT_JOYSTICK_HAT_MOTION SDL_JOYHATMOTION | ||||
| #define SDL_EVENT_JOYSTICK_AXIS_MOTION SDL_JOYAXISMOTION | ||||
| #define SDL_EVENT_WINDOW SDL_WINDOWEVENT | ||||
| #define SDL_EVENT_TEXT_INPUT SDL_TEXTINPUT | ||||
|  | ||||
| #define SDL_KMOD_NUM KMOD_NUM | ||||
| #define SDL_KMOD_LSHIFT KMOD_LSHIFT | ||||
| #define SDL_KMOD_LCTRL KMOD_LCTRL | ||||
| #define SDL_KMOD_LALT KMOD_LALT | ||||
| #define SDL_KMOD_RSHIFT KMOD_RSHIFT | ||||
| #define SDL_KMOD_RCTRL KMOD_RCTRL | ||||
| #define SDL_KMOD_RALT KMOD_RALT | ||||
|  | ||||
| #define SDL_DestroySurface SDL_FreeSurface | ||||
| #define SDL_FillSurfaceRect SDL_FillRect | ||||
| #define SDL_GL_DestroyContext SDL_GL_DeleteContext | ||||
| #define SDL_WINDOW_HIGH_PIXEL_DENSITY SDL_WINDOW_ALLOW_HIGHDPI | ||||
| #define SDL_CreateWindow(a,b,c,d) SDL_CreateWindow(a,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,b,c,d) | ||||
| #define SDL_GetCurrentRenderOutputSize SDL_GetRendererOutputSize | ||||
| #define SDL_GetNumJoystickButtons SDL_JoystickNumButtons | ||||
| #define SDL_GetJoystickButton SDL_JoystickGetButton | ||||
| #define SDL_GetJoystickHat SDL_JoystickGetHat | ||||
| #define SDL_GetNumJoystickHats SDL_JoystickNumHats | ||||
| #define SDL_GetNumJoystickAxes SDL_JoystickNumAxes | ||||
| #define SDL_GetJoystickAxis SDL_JoystickGetAxis | ||||
| #define SDL_OpenJoystick SDL_JoystickOpen | ||||
| #define SDL_CloseJoystick SDL_JoystickClose | ||||
| #endif | ||||
|  | ||||
| #if SDLVER >= 3 | ||||
| #define SDL_GetScancodeFromKey(x) SDL_GetScancodeFromKey(x, nullptr) | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if ISWEB | ||||
| extern "C" { | ||||
|   Uint8 *SDL_GetKeyState(void*); | ||||
|   | ||||
							
								
								
									
										13
									
								
								textures.cpp
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								textures.cpp
									
									
									
									
									
								
							| @@ -143,6 +143,10 @@ EX cpatterntype cgroup; | ||||
|  | ||||
| #if CAP_PNG | ||||
| SDL_Surface *convertSurface(SDL_Surface* s) { | ||||
|   #if SDLVER >= 3 | ||||
|   return SDL_ConvertSurface(s, SDL_PIXELFORMAT_BGRA8888); | ||||
|  | ||||
| #else | ||||
|   SDL_PixelFormat fmt; | ||||
|   // fmt.format = SDL_PIXELFORMAT_BGRA8888; | ||||
|   fmt.BitsPerPixel = 32; | ||||
| @@ -159,12 +163,13 @@ SDL_Surface *convertSurface(SDL_Surface* s) { | ||||
|   fmt.Aloss = fmt.Rloss = fmt.Gloss = fmt.Bloss = 0; | ||||
|   fmt.palette = NULL; | ||||
|  | ||||
| #if !CAP_SDL2 | ||||
| #if SDLVER <= 1 | ||||
|   fmt.alpha = 0; | ||||
|   fmt.colorkey = 0x1ffffff; | ||||
| #endif | ||||
|    | ||||
|   return SDL_ConvertSurface(s, &fmt, SDL_SWSURFACE); | ||||
| #endif | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| @@ -244,7 +249,7 @@ bool texture_data::readtexture(string tn) { | ||||
|     return false; | ||||
|     } | ||||
|   auto txt2 = convertSurface(txt); | ||||
|   SDL_FreeSurface(txt); | ||||
|   SDL_DestroySurface(txt); | ||||
|  | ||||
|   tx = txt2->w, ty = txt2->h; | ||||
|    | ||||
| @@ -367,7 +372,7 @@ bool texture_data::readtexture(string tn) { | ||||
|     } | ||||
|  | ||||
| #if CAP_SDL_IMG | ||||
|   SDL_FreeSurface(txt2); | ||||
|   SDL_DestroySurface(txt2); | ||||
| #endif | ||||
|    | ||||
|   return true; | ||||
| @@ -382,7 +387,7 @@ void texture_data::saveRawTexture(string tn) { | ||||
|   for(int x=0; x<twidth; x++) | ||||
|     qpixel(sraw,x,y) = get_texture_pixel(x, y); | ||||
|   IMAGESAVE(sraw, tn.c_str()); | ||||
|   SDL_FreeSurface(sraw); | ||||
|   SDL_DestroySurface(sraw); | ||||
|   addMessage(XLAT("Saved the raw texture to %1", tn)); | ||||
|   } | ||||
|  | ||||
|   | ||||
							
								
								
									
										8
									
								
								vr.cpp
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								vr.cpp
									
									
									
									
									
								
							| @@ -1636,12 +1636,8 @@ EX void show_vr_quickmenu() { | ||||
| bool vr_keys(int sym, int uni) { | ||||
|   #if !ISMOBILE | ||||
|   if(!(cmode & sm::NORMAL)) return false; | ||||
|   const Uint8 *keystate = SDL12_GetKeyState(NULL); | ||||
|   #if CAP_SDL2 | ||||
|   if(keystate[SDL_SCANCODE_LALT] || keystate[SDL_SCANCODE_RALT]) | ||||
|   #else | ||||
|   if(keystate[SDLK_LALT] || keystate[SDLK_RALT]) | ||||
|   #endif | ||||
|   const sdl_keystate_type *keystate = SDL12_GetKeyState(NULL); | ||||
|   if(keystate[SDL12(SDLK_LALT, SDL_SCANCODE_LALT)] || keystate[SDL12(SDLK_RALT, SDL_SCANCODE_RALT)]) | ||||
|     { | ||||
|     dialog::key_actions.clear(); | ||||
|     callhooks(vr_quickmenu_extensions); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue