fixed repeated creation of differently sized bitmaps between menu and game
[rocksndiamonds.git] / src / libgame / system.c
index a10016dc94f8e69967b0a950a536f3d217e76739..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;
@@ -523,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)
@@ -1583,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);
@@ -1599,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;