added detecting use of touch device for user input on current platform
[rocksndiamonds.git] / src / libgame / system.h
index be48d88978b3e64fa0f1fc2662ebace904ce0d90..50dc573630763b6f3459a795a7f1b72e1898a217 100644 (file)
 #define STR_SPECIAL_RENDERING_TARGET   "target_texture_only"
 #define STR_SPECIAL_RENDERING_DOUBLE   "stream_and_target_texture"
 
-#if defined(TARGET_SDL2)
 #define STR_SPECIAL_RENDERING_DEFAULT  STR_SPECIAL_RENDERING_DOUBLE
-#else
-#define STR_SPECIAL_RENDERING_DEFAULT  STR_SPECIAL_RENDERING_BITMAP
-#endif
 
 #define SPECIAL_RENDERING_OFF          0
 #define SPECIAL_RENDERING_BITMAP       1
 #define SPECIAL_RENDERING_TARGET       2
 #define SPECIAL_RENDERING_DOUBLE       3
 
-#if defined(TARGET_SDL2)
 #define SPECIAL_RENDERING_DEFAULT      SPECIAL_RENDERING_DOUBLE
-#else
-#define SPECIAL_RENDERING_DEFAULT      SPECIAL_RENDERING_BITMAP
-#endif
 
 // values for vertical screen retrace synchronization (vsync)
 #define STR_VSYNC_MODE_OFF             "off"
 #define SCREEN_KEYBOARD_POS(h)         ((h) / 2)
 #endif
 
+// values for drag-and-drop support (some parts not added before SDL 2.0.5)
+#if !SDL_VERSION_ATLEAST(2,0,5)
+#define SDL_DROPTEXT                   (SDL_DROPFILE + 1)
+#define SDL_DROPBEGIN                  (SDL_DROPFILE + 2)
+#define SDL_DROPCOMPLETE               (SDL_DROPFILE + 3)
+#endif
+
 // default input keys
 #define DEFAULT_KEY_LEFT               KSYM_Left
 #define DEFAULT_KEY_RIGHT              KSYM_Right
                                 (v) == VALIGN_BOTTOM ? (y) - (h) : (y))
 #define ALIGNED_TEXT_XPOS(p)   ALIGNED_XPOS((p)->x, (p)->width,  (p)->align)
 #define ALIGNED_TEXT_YPOS(p)   ALIGNED_YPOS((p)->y, (p)->height, (p)->valign)
+#define ALIGNED_VP_XPOS(p)     ALIGNED_TEXT_XPOS(p)
+#define ALIGNED_VP_YPOS(p)     ALIGNED_TEXT_YPOS(p)
 
 // values for redraw_mask
 #define REDRAW_NONE            (0)
 
 
 // areas in bitmap PIX_DOOR
-/* meaning in PIX_DB_DOOR: (3 PAGEs)
-   PAGEX1: 1. buffer for DOOR_1
-   PAGEX2: 2. buffer for DOOR_1
-   PAGEX3: buffer for animations
-*/
+// meaning in PIX_DB_DOOR: (3 PAGEs)
+// PAGEX1: 1. buffer for DOOR_1
+// PAGEX2: 2. buffer for DOOR_1
+// PAGEX3: buffer for animations
 
 // these values are hard-coded to be able to use them in initialization
 #define DOOR_GFX_PAGE_WIDTH    100     // should be set to "gfx.dxsize"
 #define TREE_TYPE_LEVEL_DIR    3
 #define TREE_TYPE_LEVEL_NR     4
 
+#define NUM_BASE_TREE_TYPES    4
 #define NUM_TREE_TYPES         5
 
 #define INFOTEXT_UNDEFINED     ""
                                 INFOTEXT_MUSIC_DIR :                   \
                                 INFOTEXT_UNDEFINED)
 
+#define TREE_USERDIR(t)                ((t) == TREE_TYPE_LEVEL_DIR ?           \
+                                getUserLevelDir(NULL) :                \
+                                (t) == TREE_TYPE_GRAPHICS_DIR ?        \
+                                getUserGraphicsDir() :                 \
+                                (t) == TREE_TYPE_SOUNDS_DIR ?          \
+                                getUserSoundsDir() :                   \
+                                (t) == TREE_TYPE_MUSIC_DIR ?           \
+                                getUserMusicDir() :                    \
+                                NULL)
+
+#define TREE_FIRST_NODE_PTR(t) ((t) == TREE_TYPE_LEVEL_DIR ?           \
+                                &leveldir_first :                      \
+                                (t) == TREE_TYPE_GRAPHICS_DIR ?        \
+                                &artwork.gfx_first :                   \
+                                (t) == TREE_TYPE_SOUNDS_DIR ?          \
+                                &artwork.snd_first :                   \
+                                (t) == TREE_TYPE_MUSIC_DIR ?           \
+                                &artwork.mus_first :                   \
+                                NULL)
+
+#define TREE_FIRST_NODE(t)     ((t) == TREE_TYPE_LEVEL_DIR ?           \
+                                leveldir_first :                       \
+                                (t) == TREE_TYPE_GRAPHICS_DIR ?        \
+                                artwork.gfx_first :                    \
+                                (t) == TREE_TYPE_SOUNDS_DIR ?          \
+                                artwork.snd_first :                    \
+                                (t) == TREE_TYPE_MUSIC_DIR ?           \
+                                artwork.mus_first :                    \
+                                NULL)
+
 // values for artwork handling
 #define LEVELDIR_ARTWORK_SET_PTR(leveldir, type)                       \
                                ((type) == ARTWORK_TYPE_GRAPHICS ?      \
                                 (type) == ARTWORK_TYPE_MUSIC ?         \
                                 options.music_directory : "")
 
+#define USER_ARTWORK_DIRECTORY(type)                                   \
+                               ((type) == ARTWORK_TYPE_GRAPHICS ?      \
+                                getUserGraphicsDir() :                 \
+                                (type) == ARTWORK_TYPE_SOUNDS ?        \
+                                getUserSoundsDir() :                   \
+                                (type) == ARTWORK_TYPE_MUSIC ?         \
+                                getUserMusicDir() : "")
+
+#define ARTWORK_DEFAULT_SUBDIR(type)                                   \
+                               ((type) == ARTWORK_TYPE_GRAPHICS ?      \
+                                GFX_DEFAULT_SUBDIR :                   \
+                                (type) == ARTWORK_TYPE_SOUNDS ?        \
+                                SND_DEFAULT_SUBDIR :                   \
+                                MUS_DEFAULT_SUBDIR)
+
 #define UPDATE_BUSY_STATE()                    \
 {                                              \
   if (gfx.draw_busy_anim_function != NULL)     \
@@ -896,6 +942,11 @@ struct NetworkInfo
 
 };
 
+struct RuntimeInfo
+{
+  boolean uses_touch_device;
+};
+
 struct OptionInfo
 {
   char *server_host;
@@ -1246,6 +1297,17 @@ struct SetupInternalInfo
 
   boolean choose_from_top_leveldir;
   boolean show_scaling_in_title;
+
+  boolean menu_game;
+  boolean menu_editor;
+  boolean menu_graphics;
+  boolean menu_sound;
+  boolean menu_artwork;
+  boolean menu_input;
+  boolean menu_touch;
+  boolean menu_shortcuts;
+  boolean menu_exit;
+  boolean menu_save_and_exit;
 };
 
 struct SetupDebugInfo
@@ -1542,7 +1604,19 @@ struct RectWithBorder
 {
   int x, y;
   int width, height;
+  int min_width, min_height;
+  int max_width, max_height;
+  int margin_left;
+  int margin_right;
+  int margin_top;
+  int margin_bottom;
+  int border_left;
+  int border_right;
+  int border_top;
+  int border_bottom;
   int border_size;
+  int align_size;
+  int align, valign;
 };
 
 struct MenuPosInfo
@@ -1587,6 +1661,8 @@ struct TextPosInfo
   int tile_size;               // special case for list of network players
   int border_size;             // special case for list of preview players
   int vertical;                        // special case for list of preview players
+
+  boolean redefined;           // redefined by custom artwork
 };
 
 struct MouseActionInfo
@@ -1617,6 +1693,7 @@ struct LevelStats
 
 extern struct ProgramInfo      program;
 extern struct NetworkInfo      network;
+extern struct RuntimeInfo      runtime;
 extern struct OptionInfo       options;
 extern struct VideoSystemInfo  video;
 extern struct AudioSystemInfo  audio;
@@ -1643,9 +1720,7 @@ extern DrawBuffer        *drawto;
 extern int                     button_status;
 extern boolean                 motion_status;
 extern int                     wheel_steps;
-#if defined(TARGET_SDL2)
 extern boolean                 keyrepeat_status;
-#endif
 
 extern int                     redraw_mask;
 
@@ -1657,6 +1732,7 @@ extern int                        FrameCounter;
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
                     char *, int);
 void InitNetworkInfo(boolean, boolean, boolean, char *, int);
+void InitRuntimeInfo(void);
 
 void InitScoresInfo(void);
 void SetWindowTitle(void);
@@ -1691,6 +1767,7 @@ void SetTileCursorSXSY(int, int);
 void SetOverlayEnabled(boolean);
 void SetOverlayActive(boolean);
 void SetOverlayShowGrid(boolean);
+boolean GetOverlayEnabled(void);
 boolean GetOverlayActive(void);
 void SetDrawDeactivationMask(int);
 int GetDrawDeactivationMask(void);