projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changed resizing window instead of recreating it on window size changes
[rocksndiamonds.git]
/
src
/
libgame
/
sdl.c
diff --git
a/src/libgame/sdl.c
b/src/libgame/sdl.c
index 9755aaa492a33912ed19d9d2bef685d072421e97..094b656511e88ae2614a4503345fbe610e46951a 100644
(file)
--- a/
src/libgame/sdl.c
+++ b/
src/libgame/sdl.c
@@
-69,12
+69,11
@@
static void FinalizeScreen(int draw_target)
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
{
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
{
- static unsigned int update_screen_delay = 0;
- unsigned int update_screen_delay_value = 50; // (milliseconds)
+ static DelayCounter update_screen_delay = { 50 }; // (milliseconds)
SDL_Surface *screen = backbuffer->surface;
if (limit_screen_updates &&
SDL_Surface *screen = backbuffer->surface;
if (limit_screen_updates &&
- !DelayReached(&update_screen_delay
, update_screen_delay_value
))
+ !DelayReached(&update_screen_delay))
return;
LimitScreenUpdates(FALSE);
return;
LimitScreenUpdates(FALSE);
@@
-151,28
+150,31
@@
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
dst_rect1 = &dst_rect_screen;
#if defined(HAS_SCREEN_KEYBOARD)
dst_rect1 = &dst_rect_screen;
#if defined(HAS_SCREEN_KEYBOARD)
- if (video.shifted_up || video.shifted_up_delay)
+ SDL_Rect src_rect_up = { 0, 0, video.width, video.height };
+ SDL_Rect dst_rect_up = dst_rect_screen;
+
+ if (video.shifted_up || video.shifted_up_delay.count)
{
int time_current = SDL_GetTicks();
int pos = video.shifted_up_pos;
int pos_last = video.shifted_up_pos_last;
{
int time_current = SDL_GetTicks();
int pos = video.shifted_up_pos;
int pos_last = video.shifted_up_pos_last;
- if (!DelayReachedExt(&video.shifted_up_delay, video.shifted_up_delay_value,
- time_current))
+ if (!DelayReachedExt(&video.shifted_up_delay, time_current))
{
{
- int delay
= time_current - video.shifted_up_delay
;
- int delay_value = video.shifted_up_delay
_
value;
+ int delay
_count = time_current - video.shifted_up_delay.count
;
+ int delay_value = video.shifted_up_delay
.
value;
- pos = pos_last + (pos - pos_last) * delay / delay_value;
+ pos = pos_last + (pos - pos_last) * delay
_count
/ delay_value;
}
else
{
video.shifted_up_pos_last = pos;
}
else
{
video.shifted_up_pos_last = pos;
- video.shifted_up_delay = 0;
+ video.shifted_up_delay
.count
= 0;
}
}
- SDL_Rect src_rect_up = { 0, pos, video.width, video.height - pos };
- SDL_Rect dst_rect_up = { xoff, yoff, video.width, video.height - pos };
+ src_rect_up.y = pos;
+ src_rect_up.h = video.height - pos;
+ dst_rect_up.h = video.height - pos;
if (video.screen_rendering_mode == SPECIAL_RENDERING_TARGET ||
video.screen_rendering_mode == SPECIAL_RENDERING_DOUBLE)
if (video.screen_rendering_mode == SPECIAL_RENDERING_TARGET ||
video.screen_rendering_mode == SPECIAL_RENDERING_DOUBLE)
@@
-221,7
+223,7
@@
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
// global synchronization point of the game to align video frame delay
if (with_frame_delay)
// global synchronization point of the game to align video frame delay
if (with_frame_delay)
- WaitUntilDelayReached(&video.frame_delay
, video.frame_delay_value
);
+ WaitUntilDelayReached(&video.frame_delay);
video.frame_counter++;
video.frame_counter++;
@@
-260,7
+262,7
@@
static void SDLSetWindowIcon(char *basename)
// (setting the window icon on Mac OS X would replace the high-quality
// dock icon with the currently smaller (and uglier) icon from file)
// (setting the window icon on Mac OS X would replace the high-quality
// dock icon with the currently smaller (and uglier) icon from file)
-#if !defined(PLATFORM_MAC
OSX
)
+#if !defined(PLATFORM_MAC)
char *filename = getCustomImageFilename(basename);
SDL_Surface *surface;
char *filename = getCustomImageFilename(basename);
SDL_Surface *surface;
@@
-551,6
+553,7
@@
static boolean SDLCreateScreen(boolean fullscreen)
int screen_height = video.screen_height;
int surface_flags = (fullscreen ? surface_flags_fullscreen :
surface_flags_window);
int screen_height = video.screen_height;
int surface_flags = (fullscreen ? surface_flags_fullscreen :
surface_flags_window);
+ int display_nr = options.display_nr;
// default window size is unscaled
video.window_width = screen_width;
// default window size is unscaled
video.window_width = screen_width;
@@
-586,15
+589,14
@@
static boolean SDLCreateScreen(boolean fullscreen)
if (sdl_window)
{
if (sdl_window)
{
- SDL_DestroyWindow(sdl_window);
- sdl_window = NULL;
+ SDL_SetWindowSize(sdl_window, video.window_width, video.window_height);
}
}
if (sdl_window == NULL)
sdl_window = SDL_CreateWindow(program.window_title,
}
}
if (sdl_window == NULL)
sdl_window = SDL_CreateWindow(program.window_title,
- SDL_WINDOWPOS_CENTERED,
- SDL_WINDOWPOS_CENTERED,
+ SDL_WINDOWPOS_CENTERED
_DISPLAY(display_nr)
,
+ SDL_WINDOWPOS_CENTERED
_DISPLAY(display_nr)
,
video.window_width,
video.window_height,
surface_flags);
video.window_width,
video.window_height,
surface_flags);
@@
-794,7
+796,8
@@
void SDLSetWindowFullscreen(boolean fullscreen)
{
SDLSetWindowScaling(setup.window_scaling_percent);
SDL_SetWindowPosition(sdl_window,
{
SDLSetWindowScaling(setup.window_scaling_percent);
SDL_SetWindowPosition(sdl_window,
- SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
+ SDL_WINDOWPOS_CENTERED_DISPLAY(options.display_nr),
+ SDL_WINDOWPOS_CENTERED_DISPLAY(options.display_nr));
video.fullscreen_initial = FALSE;
}
video.fullscreen_initial = FALSE;
}
@@
-1225,6
+1228,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
draw_border_function();
UpdateScreen_WithFrameDelay(&dst_rect2);
draw_border_function();
UpdateScreen_WithFrameDelay(&dst_rect2);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
}
}
}
}
@@
-1281,6
+1287,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect2);
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect2);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
else // fading in, fading out or cross-fading
}
}
else // fading in, fading out or cross-fading
@@
-1307,6
+1316,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect);
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
}
}
@@
-2709,7
+2721,7
@@
void SDLInitJoysticks(void)
boolean print_warning = !sdl_joystick_subsystem_initialized;
char *mappings_file_base = getPath2(options.conf_directory,
GAMECONTROLLER_BASENAME);
boolean print_warning = !sdl_joystick_subsystem_initialized;
char *mappings_file_base = getPath2(options.conf_directory,
GAMECONTROLLER_BASENAME);
- char *mappings_file_user = getPath2(getUserGameDataDir(),
+ char *mappings_file_user = getPath2(get
Main
UserGameDataDir(),
GAMECONTROLLER_BASENAME);
int num_mappings;
int i;
GAMECONTROLLER_BASENAME);
int num_mappings;
int i;