fixed repeated creation of differently sized bitmaps between menu and game
[rocksndiamonds.git] / src / libgame / system.c
index 5ccf3fb3784650147bc1f70aed77af72925dd0bb..4f90a2d120835da09bda46a89f3877979b700ed5 100644 (file)
@@ -68,7 +68,7 @@ int                   FrameCounter = 0;
 void InitProgramInfo(char *argv0, char *config_filename, char *userdata_subdir,
                     char *program_title, char *icon_title,
                     char *icon_filename, char *cookie_prefix,
-                    int program_version)
+                    char *program_version_string, int program_version)
 {
   program.command_basepath = getBasePath(argv0);
   program.command_basename = getBaseName(argv0);
@@ -92,6 +92,8 @@ void InitProgramInfo(char *argv0, char *config_filename, char *userdata_subdir,
   program.version_build = VERSION_BUILD(program_version);
   program.version_ident = program_version;
 
+  program.version_string = program_version_string;
+
   program.log_filename[LOG_OUT_ID] = getLogFilename(LOG_OUT_BASENAME);
   program.log_filename[LOG_ERR_ID] = getLogFilename(LOG_ERR_BASENAME);
   program.log_file[LOG_OUT_ID] = program.log_file_default[LOG_OUT_ID] = stdout;
@@ -300,7 +302,18 @@ void InitGfxOtherSettings()
 
 void InitOverlayInfo()
 {
+  overlay.enabled = FALSE;
   overlay.active = FALSE;
+
+#if defined(PLATFORM_ANDROID)
+  if (strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS))
+    overlay.enabled = TRUE;
+#endif
+}
+
+void SetOverlayEnabled(boolean enabled)
+{
+  overlay.enabled = enabled;
 }
 
 void SetOverlayActive(boolean active)
@@ -318,6 +331,11 @@ void SetDrawDeactivationMask(int draw_deactivation_mask)
   gfx.draw_deactivation_mask = draw_deactivation_mask;
 }
 
+int GetDrawDeactivationMask()
+{
+  return gfx.draw_deactivation_mask;
+}
+
 void SetDrawBackgroundMask(int draw_background_mask)
 {
   gfx.draw_background_mask = draw_background_mask;
@@ -507,6 +525,18 @@ Bitmap *CreateBitmap(int width, int height, int depth)
 
 void ReCreateBitmap(Bitmap **bitmap, int width, int height)
 {
+  if (*bitmap != NULL)
+  {
+    /* if new bitmap size fits into old one, no need to re-create it */
+    if (width  <= (*bitmap)->width &&
+        height <= (*bitmap)->height)
+      return;
+
+    /* else adjust size so that old and new bitmap size fit into it */
+    width  = MAX(width,  (*bitmap)->width);
+    height = MAX(height, (*bitmap)->height);
+  }
+
   Bitmap *new_bitmap = CreateBitmap(width, height, DEFAULT_DEPTH);
 
   if (*bitmap == NULL)
@@ -1567,9 +1597,9 @@ KeyMod GetKeyModStateFromEvents()
 void StartTextInput(int x, int y, int width, int height)
 {
 #if defined(TARGET_SDL2)
+#if defined(HAS_SCREEN_KEYBOARD)
   SDL_StartTextInput();
 
-#if defined(HAS_SCREEN_KEYBOARD)
   if (y + height > SCREEN_KEYBOARD_POS(video.height))
   {
     video.shifted_up_pos = y + height - SCREEN_KEYBOARD_POS(video.height);
@@ -1583,9 +1613,9 @@ void StartTextInput(int x, int y, int width, int height)
 void StopTextInput()
 {
 #if defined(TARGET_SDL2)
+#if defined(HAS_SCREEN_KEYBOARD)
   SDL_StopTextInput();
 
-#if defined(HAS_SCREEN_KEYBOARD)
   if (video.shifted_up)
   {
     video.shifted_up_pos = 0;
@@ -1634,3 +1664,8 @@ boolean CheckJoystickOpened(int nr)
 {
   return SDLCheckJoystickOpened(nr);
 }
+
+void ClearJoystickState()
+{
+  SDLClearJoystickState();
+}