rnd-20030823-2-src
[rocksndiamonds.git] / src / libgame / sdl.c
index 3ea7dc18e3f721eafea8e340016e768ca2a21dcc..74123228f2b2185f43100f4c3b2d5c19b70f356a 100644 (file)
@@ -26,9 +26,9 @@
 /* functions from SGE library */
 inline void sge_Line(SDL_Surface *, Sint16, Sint16, Sint16, Sint16, Uint32);
 
-#ifdef PLATFORM_WIN32
+/* #ifdef PLATFORM_WIN32 */
 #define FULLSCREEN_BUG
-#endif
+/* #endif */
 
 /* stuff needed to work around SDL/Windows fullscreen drawing bug */
 static int fullscreen_width;
@@ -866,6 +866,14 @@ void sge_LineRGB(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2,
 
 inline void SDLPutPixel(Bitmap *dst_bitmap, int x, int y, Pixel pixel)
 {
+#ifdef FULLSCREEN_BUG
+  if (dst_bitmap == backbuffer || dst_bitmap == window)
+  {
+    x += video_xoffset;
+    y += video_yoffset;
+  }
+#endif
+
   sge_PutPixel(dst_bitmap->surface, x, y, pixel);
 }
 
@@ -1269,19 +1277,26 @@ static SDL_Cursor *create_cursor(struct MouseCursorInfo *cursor_info)
 void SDLSetMouseCursor(struct MouseCursorInfo *cursor_info)
 {
   static struct MouseCursorInfo *last_cursor_info = NULL;
+  static struct MouseCursorInfo *last_cursor_info2 = NULL;
   static SDL_Cursor *cursor_default = NULL;
   static SDL_Cursor *cursor_current = NULL;
 
+  /* if invoked for the first time, store the SDL default cursor */
   if (cursor_default == NULL)
     cursor_default = SDL_GetCursor();
 
+  /* only create new cursor if cursor info (custom only) has changed */
   if (cursor_info != NULL && cursor_info != last_cursor_info)
   {
     cursor_current = create_cursor(cursor_info);
     last_cursor_info = cursor_info;
   }
 
-  SDL_SetCursor(cursor_info ? cursor_current : cursor_default);
+  /* only set new cursor if cursor info (custom or NULL) has changed */
+  if (cursor_info != last_cursor_info2)
+    SDL_SetCursor(cursor_info ? cursor_current : cursor_default);
+
+  last_cursor_info2 = cursor_info;
 }