aboutsummaryrefslogtreecommitdiff
path: root/backends/sdl/sdl-common.cpp
diff options
context:
space:
mode:
authorMichael Pearce2002-09-09 05:56:11 +0000
committerMichael Pearce2002-09-09 05:56:11 +0000
commit0fbefc72aa7fd29b74dd2fac41ebfae0dfcac781 (patch)
tree7db3576c01a534d363786bb7a16c18b85eec2452 /backends/sdl/sdl-common.cpp
parent5b8eb34406373daa7a167f89d32dbe72c3cdc005 (diff)
downloadscummvm-rg350-0fbefc72aa7fd29b74dd2fac41ebfae0dfcac781.tar.gz
scummvm-rg350-0fbefc72aa7fd29b74dd2fac41ebfae0dfcac781.tar.bz2
scummvm-rg350-0fbefc72aa7fd29b74dd2fac41ebfae0dfcac781.zip
Applied roever's screen effects patch (#602595) and fixed LethalWP's Makefile ;)
svn-id: r4909
Diffstat (limited to 'backends/sdl/sdl-common.cpp')
-rw-r--r--backends/sdl/sdl-common.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/backends/sdl/sdl-common.cpp b/backends/sdl/sdl-common.cpp
index 422ce8b353..bdedb8ed1a 100644
--- a/backends/sdl/sdl-common.cpp
+++ b/backends/sdl/sdl-common.cpp
@@ -135,6 +135,43 @@ void OSystem_SDL_Common::copy_rect(const byte *buf, int pitch, int x, int y, int
}
+void OSystem_SDL_Common::move_screen(int dx, int dy, int height) {
+
+ if ((dx == 0) && (dy == 0))
+ return;
+
+ if (dx == 0) {
+ // vertical movement
+ if (dy > 0) {
+ // move down
+ // copy from bottom to top
+ for (int y = height - 1; y >= dy; y--)
+ copy_rect((byte *)sdl_screen->pixels + SCREEN_WIDTH * (y - dy), SCREEN_WIDTH, 0, y, SCREEN_WIDTH, 1);
+ } else {
+ // move up
+ // copy from top to bottom
+ for (int y = 0; y < height + dx; y++)
+ copy_rect((byte *)sdl_screen->pixels + SCREEN_WIDTH * (y - dy), SCREEN_WIDTH, 0, y, SCREEN_WIDTH, 1);
+ }
+ } else if (dy == 0) {
+ // horizontal movement
+ if (dx > 0) {
+ // move right
+ // copy from right to left
+ for (int x = SCREEN_WIDTH - 1; x >= dx; x--)
+ copy_rect((byte *)sdl_screen->pixels + x - dx, SCREEN_WIDTH, x, 0, 1, height);
+ } else {
+ // move left
+ // copy from left to right
+ for (int x = 0; x < SCREEN_WIDTH; x++)
+ copy_rect((byte *)sdl_screen->pixels + x - dx, SCREEN_WIDTH, x, 0, 1, height);
+ }
+ } else {
+ // free movement
+ // not neccessary for now
+ }
+}
+
void OSystem_SDL_Common::add_dirty_rect(int x, int y, int w, int h) {
if (force_full)
return;