rnd-20020407-3-src
authorHolger Schemel <info@artsoft.org>
Sun, 7 Apr 2002 18:15:59 +0000 (20:15 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:36:53 +0000 (10:36 +0200)
src/init.c
src/libgame/joystick.c
src/libgame/joystick.h
src/libgame/system.c
src/libgame/system.h
src/screens.c
src/timestamp.h

index bc29424e6636cc9afefffe2c1d8b35e9cb7a0243..e5a1738b4840f59a4b2cc3c31fac267cd4f40d71 100644 (file)
@@ -180,7 +180,6 @@ void InitTileClipmasks()
   GC copy_clipmask_gc;
   XGCValues clip_gc_values;
   unsigned long clip_gc_valuemask;
-#endif
 
 #if defined(TARGET_X11_NATIVE)
   static struct
@@ -234,7 +233,8 @@ void InitTileClipmasks()
     { GFX2_SHIELD_ACTIVE, 3 },
     { -1, 0 }
   };
-#endif
+#endif /* TARGET_X11_NATIVE */
+#endif /* TARGET_X11 */
 
   int i;
 
@@ -248,13 +248,6 @@ void InitTileClipmasks()
      To prevent this, create small (tile-sized) mask Pixmaps which will then
      be set much faster with XSetClipOrigin() and speed things up a lot. */
 
-  /* create graphic context structures needed for clipping */
-  clip_gc_values.graphics_exposures = False;
-  clip_gc_valuemask = GCGraphicsExposures;
-  copy_clipmask_gc =
-    XCreateGC(display, pix[PIX_BACK]->clip_mask,
-             clip_gc_valuemask, &clip_gc_values);
-
   clip_gc_values.graphics_exposures = False;
   clip_gc_valuemask = GCGraphicsExposures;
   tile_clip_gc =
@@ -268,11 +261,19 @@ void InitTileClipmasks()
       clip_gc_values.clip_mask = pix[i]->clip_mask;
       clip_gc_valuemask = GCGraphicsExposures | GCClipMask;
       pix[i]->stored_clip_gc = XCreateGC(display, window->drawable,
-                                        clip_gc_valuemask,&clip_gc_values);
+                                        clip_gc_valuemask, &clip_gc_values);
     }
   }
 
 #if defined(TARGET_X11_NATIVE)
+
+  /* create graphic context structures needed for clipping */
+  clip_gc_values.graphics_exposures = False;
+  clip_gc_valuemask = GCGraphicsExposures;
+  copy_clipmask_gc =
+    XCreateGC(display, pix[PIX_BACK]->clip_mask,
+             clip_gc_valuemask, &clip_gc_values);
+
   /* create only those clipping Pixmaps we really need */
   for(i=0; tile_needs_clipping[i].start>=0; i++)
   {
@@ -296,10 +297,39 @@ void InitTileClipmasks()
                src_x, src_y, TILEX, TILEY, 0, 0);
     }
   }
-#endif /* TARGET_X11_NATIVE */
 
   XFreeGC(display, copy_clipmask_gc);
 
+#endif /* TARGET_X11_NATIVE */
+#endif /* TARGET_X11 */
+}
+
+void FreeTileClipmasks()
+{
+#if defined(TARGET_X11)
+  int i;
+
+  for(i=0; i<NUM_TILES; i++)
+  {
+    if (tile_clipmask[i] != None)
+    {
+      XFreePixmap(display, tile_clipmask[i]);
+      tile_clipmask[i] = None;
+    }
+  }
+
+  if (tile_clip_gc)
+    XFreeGC(display, tile_clip_gc);
+  tile_clip_gc = None;
+
+  for(i=0; i<NUM_BITMAPS; i++)
+  {
+    if (pix[i]->stored_clip_gc)
+    {
+      XFreeGC(display, pix[i]->stored_clip_gc);
+      pix[i]->stored_clip_gc = None;
+    }
+  }
 #endif /* TARGET_X11 */
 }
 
@@ -346,6 +376,7 @@ void InitGfx()
   }
 
   InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
+
   InitTileClipmasks();
 }
 
@@ -372,46 +403,19 @@ void ReloadCustomArtwork()
 {
   if (artwork.graphics_set_current != artwork.gfx_current->name)
   {
-    Bitmap *pix_new[NUM_PICTURES];
     int i;
 
     ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
-    for(i=0; i<NUM_PICTURES; i++)
-    {
-      DrawInitText(image_filename[i], 150, FC_YELLOW);
-      pix_new[i] = ReloadCustomImage(&pix[i], image_filename[i]);
 
-#if 0
-      if (pix_new[i] != NULL)
-       pix[i] = pix_new[i];
-#endif
-    }
-
-#if 0
-    InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
-    InitTileClipmasks();
-    InitGfxBackground();
-#endif
-
-#if 1
     for(i=0; i<NUM_PICTURES; i++)
     {
-      if (pix_new[i] != NULL)
-       TransferBitmapPointers(pix_new[i], pix[i]);
-    }
-#else
-    for(i=0; i<NUM_PICTURES; i++)
-    {
-      if (pix_new[i] != NULL)
-       FreeBitmap(pix_old[i]);
+      DrawInitText(image_filename[i], 150, FC_YELLOW);
+      ReloadCustomImage(pix[i], image_filename[i]);
     }
-#endif
 
-#if 1
-    InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
+    FreeTileClipmasks();
     InitTileClipmasks();
     InitGfxBackground();
-#endif
 
     SetDoorState(DOOR_OPEN_1 | DOOR_CLOSE_2);
 
@@ -1599,6 +1603,7 @@ void CloseAllAndExit(int exit_value)
   FreeSounds(NUM_SOUNDS);
   CloseAudio();
 
+  FreeTileClipmasks();
   for(i=0; i<NUM_BITMAPS; i++)
     FreeBitmap(pix[i]);
 
index 04731ec8809f7fa64a09c367e0c15628b4c4737c..af30a82067eb8812399b6c5eb26f5ca3fdf100e7 100644 (file)
@@ -338,7 +338,7 @@ int AnyJoystickButton()
   return result;
 }
 
-void DeactivateJoystickForCalibration()
+void DeactivateJoystick()
 {
   /* Temporarily deactivate joystick. This is needed for calibration
      screens, where the player has to select a joystick device that
@@ -351,7 +351,7 @@ void DeactivateJoystickForCalibration()
     joystick.status &= ~JOYSTICK_ACTIVE;
 }
 
-void ActivateJoystickIfAvailable()
+void ActivateJoystick()
 {
   /* reactivate temporarily deactivated joystick */
 
index a826efff8213b4bad23fd16568fcd5fbff29d39f..cf048f11b99d069d58683a028d61b02297954c39 100644 (file)
@@ -84,7 +84,7 @@ int JoystickButton(int);
 int AnyJoystick(void);
 int AnyJoystickButton(void);
 
-void DeactivateJoystickForCalibration();
-void ActivateJoystickIfAvailable();
+void DeactivateJoystick();
+void ActivateJoystick();
 
 #endif /* JOYSTICK_H */
index 2ffce00752cf5c9348f839c7d3b8381a5e8be7e3..fd0815b38d81d4cf6998f68605b8728fc2465a3e 100644 (file)
@@ -291,7 +291,14 @@ inline static void FreeBitmapPointers(Bitmap *bitmap)
     SDL_FreeSurface(bitmap->surface);
   if (bitmap->surface_masked)
     SDL_FreeSurface(bitmap->surface_masked);
+  bitmap->surface = NULL;
+  bitmap->surface_masked = NULL;
 #else
+  /* The X11 version seems to have a memory leak here -- although
+     "XFreePixmap()" is called, the correspondig memory seems not
+     to be freed (according to "ps"). The SDL version apparently
+     does not have this problem. */
+
   if (bitmap->drawable)
     XFreePixmap(display, bitmap->drawable);
   if (bitmap->clip_mask)
@@ -299,13 +306,18 @@ inline static void FreeBitmapPointers(Bitmap *bitmap)
   if (bitmap->stored_clip_gc)
     XFreeGC(display, bitmap->stored_clip_gc);
   /* the other GCs are only pointers to GCs used elsewhere */
+  bitmap->drawable = None;
+  bitmap->clip_mask = None;
+  bitmap->stored_clip_gc = None;
 #endif
 
   if (bitmap->source_filename)
     free(bitmap->source_filename);
+  bitmap->source_filename = NULL;
 }
 
-inline void TransferBitmapPointers(Bitmap *src_bitmap, Bitmap *dst_bitmap)
+inline static void TransferBitmapPointers(Bitmap *src_bitmap,
+                                         Bitmap *dst_bitmap)
 {
   if (src_bitmap == NULL || dst_bitmap == NULL)
     return;
@@ -666,57 +678,42 @@ Bitmap *LoadCustomImage(char *basename)
   return new_bitmap;
 }
 
-Bitmap *ReloadCustomImage(Bitmap **bitmap, char *basename)
+void ReloadCustomImage(Bitmap *bitmap, char *basename)
 {
   char *filename = getCustomImageFilename(basename);
-  Bitmap *old_bitmap = *bitmap;
   Bitmap *new_bitmap;
 
   if (filename == NULL)                /* (should never happen) */
   {
     Error(ERR_WARN, "ReloadCustomImage(): cannot find file '%s'", basename);
-    return NULL;
+    return;
   }
 
-  if (strcmp(filename, old_bitmap->source_filename) == 0)
+  if (strcmp(filename, bitmap->source_filename) == 0)
   {
     /* The old and new image are the same (have the same filename and path).
        This usually means that this image does not exist in this graphic set
        and a fallback to the existing image is done. */
 
-    return NULL;
+    return;
   }
 
   if ((new_bitmap = LoadImage(filename)) == NULL)
   {
     Error(ERR_WARN, "LoadImage() failed: %s", GetError());
-    return NULL;
+    return;
   }
 
-  if (old_bitmap->width != new_bitmap->width ||
-      old_bitmap->height != new_bitmap->height)
+  if (bitmap->width != new_bitmap->width ||
+      bitmap->height != new_bitmap->height)
   {
     Error(ERR_WARN, "ReloadCustomImage: new image has wrong dimensions");
     FreeBitmap(new_bitmap);
-    return NULL;
+    return;
   }
 
-#if 0
-  /* copy filename for new image */
-  free(old_bitmap->source_filename);
-  old_bitmap->source_filename = getStringCopy(filename);
-
-  /* copy bitmap data for new image */
-  BlitBitmap(new_bitmap, old_bitmap, 0,0,
-            old_bitmap->width, old_bitmap->height, 0,0);
-
-  FreeBitmap(new_bitmap);
-#else
-  /*
-  *bitmap = new_bitmap;
-  */
-  return new_bitmap;
-#endif
+  TransferBitmapPointers(new_bitmap, bitmap);
+  free(new_bitmap);
 }
 
 
index 19fdf64538fb42b88e55bac7d30f759065366305..f372306fa0a9425a3b220bbffe4256d5e97a5447 100644 (file)
@@ -443,7 +443,6 @@ inline void CloseVideoDisplay(void);
 inline void InitVideoBuffer(DrawBuffer **,DrawWindow **, int,int,int, boolean);
 inline Bitmap *CreateBitmapStruct(void);
 inline Bitmap *CreateBitmap(int, int, int);
-inline void TransferBitmapPointers(Bitmap *, Bitmap *);
 inline void FreeBitmap(Bitmap *);
 inline void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int);
 inline void ClearRectangle(Bitmap *, int, int, int, int);
@@ -466,7 +465,7 @@ inline boolean ChangeVideoModeIfNeeded(boolean);
 
 Bitmap *LoadImage(char *);
 Bitmap *LoadCustomImage(char *);
-Bitmap *ReloadCustomImage(Bitmap **, char *);
+void ReloadCustomImage(Bitmap *, char *);
 
 inline void OpenAudio(void);
 inline void CloseAudio(void);
index ece8b097db923651cbc872a395e33111231c8b1c..4537893fc7b9d5a591621cf3c87045f14deb1ab2 100644 (file)
@@ -135,7 +135,7 @@ void DrawMainMenu()
   UnmapAllGadgets();
   FadeSounds();
   KeyboardAutoRepeatOn();
-  ActivateJoystickIfAvailable();
+  ActivateJoystick();
   SetDrawDeactivationMask(REDRAW_NONE);
 
   /* needed if last screen was the playing screen, invoked from level editor */
@@ -1796,9 +1796,11 @@ void DrawSetupScreen_Input()
   DrawText(SX+32, SY+3*32, "Device:", FS_BIG, FC_GREEN);
   DrawText(SX+32, SY+15*32, "Exit", FS_BIG, FC_GREEN);
 
+#if 0
   DeactivateJoystickForCalibration();
   DrawTextFCentered(SYSIZE - 20, FC_BLUE,
                    "Joysticks deactivated on this screen");
+#endif
 
   HandleSetupScreen_Input(0,0, 0,0, MB_MENU_INITIALIZE);
   FadeToFront();
@@ -2347,6 +2349,8 @@ void CalibrateJoystick(int player_nr)
 
 void DrawSetupScreen()
 {
+  DeactivateJoystick();
+
   if (setup_mode == SETUP_MODE_INPUT)
     DrawSetupScreen_Input();
   else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS)
index 4a85f3d79d50511bb6677c09fa35d06bb6f6fb8f..1078b58d69aa84c2d01addeab7ec92e4b6522919 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2002-04-07 18:38]"
+#define COMPILE_DATE_STRING "[2002-04-07 20:15]"