changed "http" to "https" in URLs
[rocksndiamonds.git] / src / libgame / sdl.c
index 457f567ad59f461b3b90266785d9ec014bfa969d..990054de955f965cab82e6c66936b1aaf63ac17f 100644 (file)
@@ -4,7 +4,7 @@
 // (c) 1995-2014 by Artsoft Entertainment
 //                         Holger Schemel
 //                 info@artsoft.org
-//                 http://www.artsoft.org/
+//                 https://www.artsoft.org/
 // ----------------------------------------------------------------------------
 // sdl.c
 // ============================================================================
@@ -330,6 +330,15 @@ static void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
   SDL_SetSurfaceAlphaMod(surface, alpha);
 }
 
+const char *SDLGetRendererName(void)
+{
+  static SDL_RendererInfo renderer_info;
+
+  SDL_GetRendererInfo(sdl_renderer, &renderer_info);
+
+  return renderer_info.name;
+}
+
 SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
 {
   SDL_PixelFormat format;
@@ -497,7 +506,7 @@ static boolean SDLCreateScreen(boolean fullscreen)
 {
   SDL_Surface *new_surface = NULL;
 
-  int surface_flags_window     = SURFACE_FLAGS | SDL_WINDOW_RESIZABLE;
+  int surface_flags_window     = SURFACE_FLAGS;
   int surface_flags_fullscreen = SURFACE_FLAGS | SDL_WINDOW_FULLSCREEN_DESKTOP;
 
 #if 1
@@ -510,8 +519,6 @@ static boolean SDLCreateScreen(boolean fullscreen)
   int renderer_flags = SDL_RENDERER_SOFTWARE;
 #endif
 
-  SDLSetScreenSizeAndOffsets(video.width, video.height);
-
   int width  = video.width;
   int height = video.height;
   int screen_width  = video.screen_width;
@@ -573,7 +580,6 @@ static boolean SDLCreateScreen(boolean fullscreen)
 
     if (sdl_renderer != NULL)
     {
-      SDL_RenderSetLogicalSize(sdl_renderer, screen_width, screen_height);
       // SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
       SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, setup.window_scaling_quality);
 
@@ -613,6 +619,8 @@ static boolean SDLCreateScreen(boolean fullscreen)
     Error(ERR_WARN, "SDL_CreateWindow() failed: %s", SDL_GetError());
   }
 
+  SDLSetScreenProperties();
+
   // store fullscreen state ("video.fullscreen_enabled" may not reflect this!)
   if (new_surface != NULL)
     fullscreen_enabled = fullscreen;
@@ -767,17 +775,34 @@ void SDLSetWindowFullscreen(boolean fullscreen)
 
 void SDLSetDisplaySize(void)
 {
-  SDL_Rect display_bounds;
+  if (sdl_renderer != NULL)
+  {
+    int w, h;
 
-  SDL_GetDisplayBounds(0, &display_bounds);
+    SDL_GetRendererOutputSize(sdl_renderer, &w, &h);
 
-  video.display_width  = display_bounds.w;
-  video.display_height = display_bounds.h;
+    video.display_width  = w;
+    video.display_height = h;
 
 #if 0
-  Error(ERR_DEBUG, "SDL real screen size: %d x %d",
-       video.display_width, video.display_height);
+    Error(ERR_DEBUG, "SDL renderer size: %d x %d",
+         video.display_width, video.display_height);
 #endif
+  }
+  else
+  {
+    SDL_Rect display_bounds;
+
+    SDL_GetDisplayBounds(0, &display_bounds);
+
+    video.display_width  = display_bounds.w;
+    video.display_height = display_bounds.h;
+
+#if 0
+    Error(ERR_DEBUG, "SDL display size: %d x %d",
+         video.display_width, video.display_height);
+#endif
+  }
 }
 
 void SDLSetScreenSizeAndOffsets(int width, int height)
@@ -821,6 +846,7 @@ void SDLSetScreenSizeForRenderer(int width, int height)
 
 void SDLSetScreenProperties(void)
 {
+  SDLSetDisplaySize();
   SDLSetScreenSizeAndOffsets(video.width, video.height);
   SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
 }
@@ -1033,6 +1059,17 @@ void SDLFadeRectangle(int x, int y, int width, int height,
 
   time_current = SDL_GetTicks();
 
+  if (fade_delay <= 0)
+  {
+    // immediately draw final target frame without delay
+    fade_mode &= (FADE_MODE_FADE | FADE_MODE_TRANSFORM);
+    fade_delay = 1;
+    time_current -= 1;
+
+    // when fading without delay, also skip post delay
+    post_delay = 0;
+  }
+
   if (fade_mode == FADE_MODE_MELT)
   {
     boolean done = FALSE;
@@ -2529,7 +2566,10 @@ static void setJoystickButton(int nr, int button_id_raw, int button_state)
 
 void HandleJoystickEvent(Event *event)
 {
-  switch(event->type)
+  // when using joystick, disable overlay touch buttons
+  runtime.uses_touch_device = FALSE;
+
+  switch (event->type)
   {
     case SDL_CONTROLLERDEVICEADDED:
 #if DEBUG_JOYSTICKS