added command line option to drop file into program window
[rocksndiamonds.git] / src / libgame / system.c
index 9955f224f85bb7cfc98c186987d4ea085778974b..e77e6fe67bfede76ebdcf56b619f281172bea158 100644 (file)
@@ -99,10 +99,8 @@ void InitProgramInfo(char *command_filename,
 
   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;
-  program.log_file[LOG_ERR_ID] = program.log_file_default[LOG_ERR_ID] = stderr;
+  program.log_filename = getLogFilename(getLogBasename(program_basename));
+  program.log_file = program.log_file_default = stdout;
 
   program.api_thread_count = 0;
 
@@ -123,7 +121,7 @@ void InitNetworkInfo(boolean enabled, boolean connected, boolean serveronly,
   network.is_server_thread = FALSE;
 }
 
-void InitRuntimeInfo()
+void InitRuntimeInfo(void)
 {
 #if defined(HAS_TOUCH_DEVICE)
   runtime.uses_touch_device = TRUE;
@@ -170,7 +168,7 @@ void InitPlatformDependentStuff(void)
   // this is initialized in GetOptions(), but may already be used before
   options.verbose = TRUE;
 
-  OpenLogFiles();
+  OpenLogFile();
 
   int sdl_init_flags = SDL_INIT_EVENTS | SDL_INIT_NOPARACHUTE;
 
@@ -182,7 +180,7 @@ void InitPlatformDependentStuff(void)
 
 void ClosePlatformDependentStuff(void)
 {
-  CloseLogFiles();
+  CloseLogFile();
 }
 
 void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
@@ -289,11 +287,16 @@ void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int))
   gfx.draw_global_border_function = draw_global_border_function;
 }
 
-void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int))
+void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int))
 {
   gfx.draw_tile_cursor_function = draw_tile_cursor_function;
 }
 
+void InitGfxDrawEnvelopeRequestFunction(void (*draw_envelope_request_function)(int))
+{
+  gfx.draw_envelope_request_function = draw_envelope_request_function;
+}
+
 void InitGfxCustomArtworkInfo(void)
 {
   gfx.override_level_graphics = FALSE;
@@ -596,9 +599,22 @@ void FreeBitmap(Bitmap *bitmap)
   free(bitmap);
 }
 
+void ResetBitmapAlpha(Bitmap *bitmap)
+{
+  bitmap->alpha[0][0] = -1;
+  bitmap->alpha[0][1] = -1;
+  bitmap->alpha[1][0] = -1;
+  bitmap->alpha[1][1] = -1;
+  bitmap->alpha_next_blit = -1;
+}
+
 Bitmap *CreateBitmapStruct(void)
 {
-  return checked_calloc(sizeof(Bitmap));
+  Bitmap *new_bitmap = checked_calloc(sizeof(Bitmap));
+
+  ResetBitmapAlpha(new_bitmap);
+
+  return new_bitmap;
 }
 
 Bitmap *CreateBitmap(int width, int height, int depth)
@@ -608,7 +624,7 @@ Bitmap *CreateBitmap(int width, int height, int depth)
   int real_height = MAX(1, height);    // prevent zero bitmap height
   int real_depth  = GetRealDepth(depth);
 
-  SDLCreateBitmapContent(new_bitmap, real_width, real_height, real_depth);
+  new_bitmap->surface = SDLCreateNativeSurface(real_width, real_height, real_depth);
 
   new_bitmap->width  = real_width;
   new_bitmap->height = real_height;
@@ -769,6 +785,12 @@ static boolean InClippedRectangle(Bitmap *bitmap, int *x, int *y,
   return TRUE;
 }
 
+void SetBitmapAlphaNextBlit(Bitmap *bitmap, int alpha)
+{
+  // set alpha value for next blitting of bitmap
+  bitmap->alpha_next_blit = alpha;
+}
+
 void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                int src_x, int src_y, int width, int height,
                int dst_x, int dst_y)
@@ -916,6 +938,12 @@ void BlitBitmapMasked(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                      int src_x, int src_y, int width, int height,
                      int dst_x, int dst_y)
 {
+  if (program.headless)
+    return;
+
+  if (src_bitmap == NULL || dst_bitmap == NULL)
+    return;
+
   if (DrawingDeactivated(dst_x, dst_y))
     return;
 
@@ -1640,6 +1668,8 @@ void OpenAudio(void)
   audio.device_name = NULL;
   audio.device_fd = -1;
 
+  audio.sample_rate = DEFAULT_AUDIO_SAMPLE_RATE;
+
   audio.num_channels = 0;
   audio.music_channel = 0;
   audio.first_sound_channel = 0;
@@ -1813,6 +1843,28 @@ void PushUserEvent(int code, int value1, int value2)
   SDL_PushEvent((SDL_Event *)&event);
 }
 
+void PushDropEvent(char *file)
+{
+  SDL_DropEvent event;
+
+  SDL_memset(&event, 0, sizeof(event));
+
+  event.type = SDL_DROPBEGIN;
+  event.file = NULL;
+
+  SDL_PushEvent((SDL_Event *)&event);
+
+  event.type = SDL_DROPFILE;
+  event.file = getStringCopy(file);
+
+  SDL_PushEvent((SDL_Event *)&event);
+
+  event.type = SDL_DROPCOMPLETE;
+  event.file = NULL;
+
+  SDL_PushEvent((SDL_Event *)&event);
+}
+
 boolean PendingEscapeKeyEvent(void)
 {
   if (PendingEvent())