diff --git a/src/jinete/jmanager.cpp b/src/jinete/jmanager.cpp index b4c6a27f9..15759574e 100644 --- a/src/jinete/jmanager.cpp +++ b/src/jinete/jmanager.cpp @@ -157,7 +157,7 @@ JWidget jmanager_new() if (!default_manager) { if (!ji_screen) - ji_set_screen(screen); + ji_set_screen(screen, SCREEN_W, SCREEN_H); /* hook the window close message */ want_close_stage = STAGE_NORMAL; diff --git a/src/jinete/jsystem.cpp b/src/jinete/jsystem.cpp index 8d02f3988..95f8afcb5 100644 --- a/src/jinete/jsystem.cpp +++ b/src/jinete/jsystem.cpp @@ -49,6 +49,8 @@ BITMAP *ji_screen = NULL; JRegion ji_dirty_region = NULL; +int ji_screen_w = 0; +int ji_screen_h = 0; /* Global timer. */ @@ -108,7 +110,7 @@ static void set_cursor(BITMAP *bmp, int x, int y) int _ji_system_init() { /* Update screen pointer. */ - ji_set_screen(screen); + ji_set_screen(screen, SCREEN_W, SCREEN_H); /* Install timer related stuff. */ LOCK_VARIABLE(ji_clock); @@ -129,17 +131,19 @@ int _ji_system_init() void _ji_system_exit() { - ji_set_screen(NULL); + ji_set_screen(NULL, 0, 0); remove_int(clock_inc); } -void ji_set_screen(BITMAP *bmp) +void ji_set_screen(BITMAP *bmp, int width, int height) { int cursor = jmouse_get_cursor(); /* get mouse cursor */ jmouse_set_cursor(JI_CURSOR_NULL); ji_screen = bmp; + ji_screen_w = width; + ji_screen_h = height; if (ji_screen != NULL) { JWidget manager = ji_get_default_manager(); diff --git a/src/jinete/jsystem.h b/src/jinete/jsystem.h index d46492332..d01f699c2 100644 --- a/src/jinete/jsystem.h +++ b/src/jinete/jsystem.h @@ -39,13 +39,15 @@ struct BITMAP; /***********************************************************************/ /* screen related */ -#define JI_SCREEN_W ((ji_screen == screen) ? SCREEN_W: ji_screen->w) -#define JI_SCREEN_H ((ji_screen == screen) ? SCREEN_H: ji_screen->h) +#define JI_SCREEN_W ji_screen_w +#define JI_SCREEN_H ji_screen_h extern struct BITMAP *ji_screen; extern JRegion ji_dirty_region; +extern int ji_screen_w; +extern int ji_screen_h; -void ji_set_screen(struct BITMAP *bmp); +void ji_set_screen(BITMAP *bmp, int width, int height); void ji_add_dirty_rect(JRect rect); void ji_add_dirty_region(JRegion region); diff --git a/src/modules/gui.cpp b/src/modules/gui.cpp index fabce603d..07cc37c11 100644 --- a/src/modules/gui.cpp +++ b/src/modules/gui.cpp @@ -359,7 +359,7 @@ void exit_module_gui() if (double_buffering) { BITMAP *old_bmp = ji_screen; - ji_set_screen(screen); + ji_set_screen(screen, SCREEN_W, SCREEN_H); if (ji_screen_created) destroy_bitmap(old_bmp); @@ -526,7 +526,7 @@ void gui_flip_screen() } else { stretch_blit(ji_screen, screen, - 0, 0, ji_screen->w, ji_screen->h, + 0, 0, JI_SCREEN_W, JI_SCREEN_H, 0, 0, SCREEN_W, SCREEN_H); } } @@ -566,15 +566,19 @@ void gui_setup_screen(bool reload_font) // Is double buffering active? if (double_buffering) { BITMAP *old_bmp = ji_screen; - ji_set_screen(create_bitmap(SCREEN_W / screen_scaling, - SCREEN_H / screen_scaling)); + int new_w = SCREEN_W / screen_scaling; + int new_h = SCREEN_H / screen_scaling; + BITMAP *new_bmp = create_bitmap(new_w, new_h); + + ji_set_screen(new_bmp, new_w, new_h); + if (ji_screen_created) destroy_bitmap(old_bmp); ji_screen_created = true; } else { - ji_set_screen(screen); + ji_set_screen(screen, SCREEN_W, SCREEN_H); ji_screen_created = false; } diff --git a/src/tests/jinete/19game.cpp b/src/tests/jinete/19game.cpp index 6747bfebf..9f0e60b70 100644 --- a/src/tests/jinete/19game.cpp +++ b/src/tests/jinete/19game.cpp @@ -211,7 +211,7 @@ void play_game() bmp2 = create_bitmap(SCREEN_W, SCREEN_H); /* set Jinete output screen bitmap */ - ji_set_screen(bmp); + ji_set_screen(bmp, bmp->w, bmp->h); show_mouse(NULL); /* init game state */ @@ -236,7 +236,7 @@ void play_game() if (jwidget_pick(manager, mouse_x, mouse_y) == manager) { if (!trans_mode) { trans_mode = true; - ji_set_screen(bmp2); + ji_set_screen(bmp2, bmp2->w, bmp2->h); show_mouse(NULL); } } @@ -264,7 +264,7 @@ void play_game() show_mouse(NULL); } - ji_set_screen(screen); + ji_set_screen(screen, SCREEN_W, SCREEN_H); destroy_bitmap(bmp); destroy_bitmap(bmp2); }