rnd-20030803-2-src
[rocksndiamonds.git] / src / libgame / system.c
index 18776bd423a17d02bd5e6396a81f70883a09e9c9..4a4c4d352e077da8bc0152e349a08220a01ef0ca 100644 (file)
@@ -107,7 +107,7 @@ void InitExitFunction(void (*exit_function)(int))
 #endif
 }
 
-void InitPlatformDependantStuff(void)
+void InitPlatformDependentStuff(void)
 {
 #if defined(PLATFORM_MSDOS)
   _fmode = O_BINARY;
@@ -120,7 +120,7 @@ void InitPlatformDependantStuff(void)
 #endif
 }
 
-void ClosePlatformDependantStuff(void)
+void ClosePlatformDependentStuff(void)
 {
 #if defined(PLATFORM_MSDOS)
   dumpErrorFile();
@@ -821,7 +821,7 @@ void CreateBitmapWithSmallBitmaps(Bitmap *src_bitmap)
   src_height = src_bitmap->height;
 
   tmp_width  = src_width;
-  tmp_height = src_height + src_height / 2;
+  tmp_height = src_height + (src_height + 1) / 2;     /* prevent odd height */
 
   tmp_bitmap = CreateBitmap(tmp_width, tmp_height, DEFAULT_DEPTH);
 
@@ -838,9 +838,11 @@ void CreateBitmapWithSmallBitmaps(Bitmap *src_bitmap)
   FreeBitmap(tmp_bitmap_8);
 
 #if defined(TARGET_SDL)
+  /* !!! what about the old src_bitmap->surface ??? FIX ME !!! */
   src_bitmap->surface = tmp_bitmap->surface;
   tmp_bitmap->surface = NULL;
 #else
+  /* !!! see above !!! */
   src_bitmap->drawable = tmp_bitmap->drawable;
   tmp_bitmap->drawable = None;
 #endif
@@ -1070,6 +1072,64 @@ inline Key GetEventKey(KeyEvent *event, boolean with_modifiers)
 #endif
 }
 
+inline KeyMod HandleKeyModState(Key key, int key_status)
+{
+  static KeyMod current_modifiers = KMOD_None;
+
+#if !defined(TARGET_SDL)
+  if (key != KSYM_UNDEFINED)   /* new key => check for modifier key change */
+  {
+    KeyMod new_modifier = KMOD_None;
+
+    switch(key)
+    {
+      case KSYM_Shift_L:
+       new_modifier = KMOD_Shift_L;
+       break;
+      case KSYM_Shift_R:
+       new_modifier = KMOD_Shift_R;
+       break;
+      case KSYM_Control_L:
+       new_modifier = KMOD_Control_L;
+       break;
+      case KSYM_Control_R:
+       new_modifier = KMOD_Control_R;
+       break;
+      case KSYM_Meta_L:
+       new_modifier = KMOD_Meta_L;
+       break;
+      case KSYM_Meta_R:
+       new_modifier = KMOD_Meta_R;
+       break;
+      case KSYM_Alt_L:
+       new_modifier = KMOD_Alt_L;
+       break;
+      case KSYM_Alt_R:
+       new_modifier = KMOD_Alt_R;
+       break;
+      default:
+       break;
+    }
+
+    if (key_status == KEY_PRESSED)
+      current_modifiers |= new_modifier;
+    else
+      current_modifiers &= ~new_modifier;
+  }
+#endif
+
+  return current_modifiers;
+}
+
+inline KeyMod GetKeyModState()
+{
+#if defined(TARGET_SDL)
+  return (KeyMod)SDL_GetModState();
+#else
+  return HandleKeyModState(KSYM_UNDEFINED, 0);
+#endif
+}
+
 inline boolean CheckCloseWindowEvent(ClientMessageEvent *event)
 {
   if (event->type != EVENT_CLIENTMESSAGE)