added SDL event filter to track mouse position from mouse motion events
[rocksndiamonds.git] / src / libgame / system.h
index b82b7e8acc5655fd2d644e9f572caee7118dff46..290f0cb7827af8e501be7cf2c38e2114f96a1c7c 100644 (file)
 #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
 
 #define STYLE_DEFAULT          STYLE_NONE
 
+// values for special global animation delay types
+#define ANIM_DELAY_UNDEFINED   -1
+#define ANIM_DELAY_NONE                0
+#define ANIM_DELAY_INIT                1
+#define ANIM_DELAY_ANIM                2
+#define ANIM_DELAY_POST                3
+
+// values for special global animation delay actions
+#define ANIM_DELAY_ACTION_NONE -1
+
 // values for special global animation events
+#define ANIM_EVENT_UNDEFINED   -1
 #define ANIM_EVENT_NONE                0
 #define ANIM_EVENT_SELF                (1 << 16)
 #define ANIM_EVENT_ANY         (1 << 17)
-
+#define ANIM_EVENT_CLICK       (1 << 18)
+#define ANIM_EVENT_INIT                (1 << 19)
+#define ANIM_EVENT_START       (1 << 20)
+#define ANIM_EVENT_END         (1 << 21)
+#define ANIM_EVENT_POST                (1 << 22)
+#define ANIM_EVENT_UNCLICK_ANY (1 << 23)
+
+// anim number: bits 0-7
+// part number: bits 8-15
 #define ANIM_EVENT_ANIM_BIT    0
 #define ANIM_EVENT_PART_BIT    8
 
                                 (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)
                                 y >= gfx.ey && y < gfx.ey + gfx.eysize)
 
 // values for mouse cursor
+#define CURSOR_UNDEFINED       -1
 #define CURSOR_DEFAULT         0
 #define CURSOR_NONE            1
 #define CURSOR_PLAYFIELD       2
 #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)     \
@@ -887,6 +962,11 @@ struct NetworkInfo
 
 };
 
+struct RuntimeInfo
+{
+  boolean uses_touch_device;
+};
+
 struct OptionInfo
 {
   char *server_host;
@@ -1042,6 +1122,9 @@ struct GfxInfo
   void (*draw_tile_cursor_function)(int);
 
   int cursor_mode;
+  int cursor_mode_override;
+  int cursor_mode_final;
+  int mouse_x, mouse_y;
 };
 
 struct TileCursorInfo
@@ -1237,6 +1320,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
@@ -1533,7 +1627,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
@@ -1578,6 +1684,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
@@ -1608,6 +1716,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;
@@ -1646,6 +1755,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);
@@ -1680,6 +1790,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);
@@ -1746,6 +1857,7 @@ void OpenAudio(void);
 void CloseAudio(void);
 void SetAudioMode(boolean);
 
+void InitEventFilter(EventFilter);
 boolean PendingEvent(void);
 void WaitEvent(Event *event);
 void PeekEvent(Event *event);
@@ -1756,7 +1868,7 @@ KeyMod GetKeyModState(void);
 KeyMod GetKeyModStateFromEvents(void);
 void StartTextInput(int, int, int, int);
 void StopTextInput(void);
-boolean CheckCloseWindowEvent(ClientMessageEvent *);
+void PushUserEvent(int, int, int);
 
 void InitJoysticks(void);
 boolean ReadJoystick(int, int *, int *, boolean *, boolean *);