rnd-20070918-1-src
authorHolger Schemel <info@artsoft.org>
Tue, 18 Sep 2007 00:13:59 +0000 (02:13 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:56:23 +0000 (10:56 +0200)
* fixed crash bug (hopefully) when scrolling with cursor keys in editor

ChangeLog
src/conftime.h
src/editor.c

index 39f60d685c8526e03cb64418bdf49c85ceef92d1..88c53f42222094d2486b1d800838d6a449c61108 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
          for both EMC and R'n'D graphics engine (heavy workarounds needed due
          to massively broken handling of quicksand in R'n'D game engine)
        * fixed off-limits access to array in DrawLevelFieldCrumbledSandExt()
+       * fixed crash bug (hopefully) when scrolling with cursor keys in editor
 
 2007-09-16
        * fixed small bug in toon drawing (introduced when fixing the crash bug)
index 0a5a656b92a6a794cb7b9db0c5609c3d9cb8bfe1..2b817800906ee6bd8a18ae0b872bd43ae2844037 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2007-09-17 23:24"
+#define COMPILE_DATE_STRING "2007-09-18 02:08"
index 38af449cea7298ab48d53438bbf56a515beca7ec..2fab93d6a7d73b5d5657f22b5b09f32378db25b8 100644 (file)
@@ -4988,10 +4988,36 @@ static void DrawDrawingArea(int id)
 
 static void ScrollMiniLevel(int from_x, int from_y, int scroll)
 {
-  int x,y;
+#if 1
+  static Bitmap *tmp_backbuffer = NULL;
+#endif
+  int x, y;
   int dx = (scroll == ED_SCROLL_LEFT ? -1 : scroll == ED_SCROLL_RIGHT ? 1 : 0);
   int dy = (scroll == ED_SCROLL_UP   ? -1 : scroll == ED_SCROLL_DOWN  ? 1 : 0);
 
+#if 1
+  if (tmp_backbuffer == NULL)
+    tmp_backbuffer = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH);
+
+  /* needed when blitting directly to same bitmap -- should not be needed with
+     recent SDL libraries, but apparently does not work in 1.2.11 directly */
+  BlitBitmap(drawto, tmp_backbuffer,
+            SX + (dx == -1 ? MINI_TILEX : 0),
+            SY + (dy == -1 ? MINI_TILEY : 0),
+            (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0),
+            (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0),
+            SX + (dx == +1 ? MINI_TILEX : 0),
+            SY + (dy == +1 ? MINI_TILEY : 0));
+  BlitBitmap(tmp_backbuffer, drawto,
+            SX + (dx == +1 ? MINI_TILEX : 0),
+            SY + (dy == +1 ? MINI_TILEY : 0),
+            (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0),
+            (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0),
+            SX + (dx == +1 ? MINI_TILEX : 0),
+            SY + (dy == +1 ? MINI_TILEY : 0));
+
+#else
+
   BlitBitmap(drawto, drawto,
             SX + (dx == -1 ? MINI_TILEX : 0),
             SY + (dy == -1 ? MINI_TILEY : 0),
@@ -4999,6 +5025,10 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
             (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0),
             SX + (dx == +1 ? MINI_TILEX : 0),
             SY + (dy == +1 ? MINI_TILEY : 0));
+#endif
+
+  printf("::: ScrollMiniLevel: A.1\n");
+
   if (dx)
   {
     x = (dx == 1 ? 0 : ed_fieldx - 1);
@@ -5012,6 +5042,8 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
       DrawMiniElementOrWall(x, y, from_x, from_y);
   }
 
+  printf("::: ScrollMiniLevel: Z\n");
+
   redraw_mask |= REDRAW_FIELD;
   BackToFront();
 }