X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=6f27daf6e94a24461ce60311ce0b1630139fdcba;hp=7b67677cb2e824ac66d96a4bfd038867d8c97e0f;hb=3cc2ee99e57014c6962d26365e92bd3eac36a492;hpb=64e7c54dce6ea8c063f04198c64c5057d751c928 diff --git a/src/libgame/system.c b/src/libgame/system.c index 7b67677c..6f27daf6 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -30,6 +30,7 @@ struct ProgramInfo program; struct NetworkInfo network; +struct RuntimeInfo runtime; struct OptionInfo options; struct VideoSystemInfo video; struct AudioSystemInfo audio; @@ -55,9 +56,7 @@ DrawBuffer *drawto = NULL; int button_status = MB_NOT_PRESSED; boolean motion_status = FALSE; int wheel_steps = DEFAULT_WHEEL_STEPS; -#if defined(TARGET_SDL2) boolean keyrepeat_status = TRUE; -#endif int redraw_mask = REDRAW_NONE; @@ -116,6 +115,11 @@ void InitNetworkInfo(boolean enabled, boolean connected, boolean serveronly, network.server_port = server_port; } +void InitRuntimeInfo() +{ + runtime.uses_touch_device = FALSE; +} + void InitScoresInfo(void) { char *global_scores_dir = getPath2(getCommonDataDir(), SCORES_DIRECTORY); @@ -179,11 +183,7 @@ void InitPlatformDependentStuff(void) OpenLogFiles(); -#if defined(TARGET_SDL2) - int sdl_init_flags = SDL_INIT_EVENTS | SDL_INIT_NOPARACHUTE; -#else - int sdl_init_flags = SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE; -#endif + int sdl_init_flags = SDL_INIT_EVENTS | SDL_INIT_NOPARACHUTE; if (SDL_Init(sdl_init_flags) < 0) Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError()); @@ -252,9 +252,7 @@ void InitGfxWindowInfo(int win_xsize, int win_ysize) { ReCreateBitmap(&gfx.background_bitmap, win_xsize, win_ysize); -#if defined(TARGET_SDL2) ReCreateBitmap(&gfx.final_screen_bitmap, win_xsize, win_ysize); -#endif ReCreateBitmap(&gfx.fade_bitmap_backup, win_xsize, win_ysize); ReCreateBitmap(&gfx.fade_bitmap_source, win_xsize, win_ysize); @@ -319,6 +317,11 @@ void InitGfxCustomArtworkInfo(void) void InitGfxOtherSettings(void) { gfx.cursor_mode = CURSOR_DEFAULT; + gfx.cursor_mode_override = CURSOR_UNDEFINED; + gfx.cursor_mode_final = gfx.cursor_mode; + + gfx.mouse_x = 0; + gfx.mouse_y = 0; } void InitTileCursorInfo(void) @@ -425,6 +428,11 @@ void SetOverlayShowGrid(boolean show_grid) SetOverlayEnabled(TRUE); } +boolean GetOverlayEnabled(void) +{ + return overlay.enabled; +} + boolean GetOverlayActive(void) { return overlay.active; @@ -536,9 +544,7 @@ void InitVideoDisplay(void) return; SDLInitVideoDisplay(); -#if defined(TARGET_SDL2) SDLSetDisplaySize(); -#endif } void CloseVideoDisplay(void) @@ -810,7 +816,6 @@ void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, src_x += dst_x - dst_x_unclipped; src_y += dst_y - dst_y_unclipped; -#if defined(TARGET_SDL2) // !!! 2013-12-11: An "old friend" is back. Same bug in SDL2 2.0.1 !!! // !!! 2009-03-30: Fixed by using self-compiled, patched SDL.dll !!! /* (This bug still exists in the actual (as of 2009-06-15) version 1.2.13, @@ -820,8 +825,8 @@ void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, if (src_bitmap == dst_bitmap) { - /* needed when blitting directly to same bitmap -- should not be needed with - recent SDL libraries, but apparently does not work in 1.2.11 directly */ + // needed when blitting directly to same bitmap -- should not be needed with + // recent SDL libraries, but apparently does not work in 1.2.11 directly static Bitmap *tmp_bitmap = NULL; static int tmp_bitmap_xsize = 0; @@ -857,7 +862,6 @@ void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, return; } -#endif sysCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height, dst_x, dst_y, BLIT_OPAQUE); @@ -1093,23 +1097,12 @@ Pixel GetPixelFromRGBcompact(Bitmap *bitmap, unsigned int color) void KeyboardAutoRepeatOn(void) { -#if defined(TARGET_SDL2) keyrepeat_status = TRUE; -#else - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY / 2, - SDL_DEFAULT_REPEAT_INTERVAL / 2); - SDL_EnableUNICODE(1); -#endif } void KeyboardAutoRepeatOff(void) { -#if defined(TARGET_SDL2) keyrepeat_status = FALSE; -#else - SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); - SDL_EnableUNICODE(0); -#endif } boolean SetVideoMode(boolean fullscreen) @@ -1175,9 +1168,9 @@ void ReloadCustomImage(Bitmap *bitmap, char *basename) if (strEqual(filename, bitmap->source_filename)) { - /* The old and new image are the same (have the same filename and path). - This usually means that this image does not exist in this graphic set - and a fallback to the existing image is done. */ + // The old and new image are the same (have the same filename and path). + // This usually means that this image does not exist in this graphic set + // and a fallback to the existing image is done. return; } @@ -1503,8 +1496,8 @@ static const char *cursor_image_dot[] = }; static const char **cursor_image_playfield = cursor_image_dot; #else -/* some people complained about a "white dot" on the screen and thought it - was a graphical error... OK, let's just remove the whole pointer :-) */ +// some people complained about a "white dot" on the screen and thought it +// was a graphical error... OK, let's just remove the whole pointer :-) static const char **cursor_image_playfield = cursor_image_none; #endif @@ -1562,6 +1555,7 @@ void SetMouseCursor(int mode) static struct MouseCursorInfo *cursor_none = NULL; static struct MouseCursorInfo *cursor_playfield = NULL; struct MouseCursorInfo *cursor_new; + int mode_final = mode; if (cursor_none == NULL) cursor_none = get_cursor_from_image(cursor_image_none); @@ -1569,13 +1563,17 @@ void SetMouseCursor(int mode) if (cursor_playfield == NULL) cursor_playfield = get_cursor_from_image(cursor_image_playfield); - cursor_new = (mode == CURSOR_DEFAULT ? NULL : - mode == CURSOR_NONE ? cursor_none : - mode == CURSOR_PLAYFIELD ? cursor_playfield : NULL); + if (gfx.cursor_mode_override != CURSOR_UNDEFINED) + mode_final = gfx.cursor_mode_override; + + cursor_new = (mode_final == CURSOR_DEFAULT ? NULL : + mode_final == CURSOR_NONE ? cursor_none : + mode_final == CURSOR_PLAYFIELD ? cursor_playfield : NULL); SDLSetMouseCursor(cursor_new); gfx.cursor_mode = mode; + gfx.cursor_mode_final = mode_final; } @@ -1637,11 +1635,7 @@ void WaitEvent(Event *event) void PeekEvent(Event *event) { -#if defined(TARGET_SDL2) SDL_PeepEvents(event, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT); -#else - SDL_PeepEvents(event, 1, SDL_PEEKEVENT, SDL_ALLEVENTS); -#endif } void CheckQuitEvent(void) @@ -1652,26 +1646,8 @@ void CheckQuitEvent(void) Key GetEventKey(KeyEvent *event, boolean with_modifiers) { -#if defined(TARGET_SDL2) // key up/down events in SDL2 do not return text characters anymore return event->keysym.sym; -#else - -#if ENABLE_UNUSED_CODE - printf("unicode == '%d', sym == '%d', mod == '0x%04x'\n", - (int)event->keysym.unicode, - (int)event->keysym.sym, - (int)SDL_GetModState()); -#endif - - if (with_modifiers && - event->keysym.unicode > 0x0000 && - event->keysym.unicode < 0x2000) - return event->keysym.unicode; - else - return event->keysym.sym; - -#endif } KeyMod HandleKeyModState(Key key, int key_status) @@ -1739,7 +1715,6 @@ KeyMod GetKeyModStateFromEvents(void) void StartTextInput(int x, int y, int width, int height) { -#if defined(TARGET_SDL2) #if defined(HAS_SCREEN_KEYBOARD) SDL_StartTextInput(); @@ -1750,12 +1725,10 @@ void StartTextInput(int x, int y, int width, int height) video.shifted_up = TRUE; } #endif -#endif } void StopTextInput(void) { -#if defined(TARGET_SDL2) #if defined(HAS_SCREEN_KEYBOARD) SDL_StopTextInput(); @@ -1766,15 +1739,20 @@ void StopTextInput(void) video.shifted_up = FALSE; } #endif -#endif } -boolean CheckCloseWindowEvent(ClientMessageEvent *event) +void PushUserEvent(int code, int value1, int value2) { - if (event->type != EVENT_CLIENTMESSAGE) - return FALSE; + UserEvent event; + + SDL_memset(&event, 0, sizeof(event)); + + event.type = EVENT_USER; + event.code = code; + event.value1 = value1; + event.value2 = value2; - return TRUE; // the only possible message here is SDL_QUIT + SDL_PushEvent((SDL_Event *)&event); }