aboutsummaryrefslogtreecommitdiff
path: root/backends/dc/display.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/dc/display.cpp')
-rw-r--r--backends/dc/display.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/backends/dc/display.cpp b/backends/dc/display.cpp
index 97c7f2aed5..317f33a0fa 100644
--- a/backends/dc/display.cpp
+++ b/backends/dc/display.cpp
@@ -132,6 +132,46 @@ void OSystem_Dreamcast::copy_rect(const byte *buf, int pitch, int x, int y,
} while (--h);
}
+void OSystem_Dreamcast::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(screen + SCREEN_W * (y - dy), SCREEN_W, 0, y, SCREEN_W, 1);
+ } else {
+ // move up
+ // copy from top to bottom
+ for (int y = 0; y < height + dx; y++)
+ copy_rect(screen + SCREEN_W * (y - dy), SCREEN_W, 0, y, SCREEN_W, 1);
+ }
+ } else if (dy == 0) {
+ // horizontal movement
+ if (dx > 0) {
+ // move right
+ // copy from right to left
+ for (int x = SCREEN_W - 1; x >= dx; x--)
+ copy_rect(screen + x - dx, SCREEN_W, x, 0, 1, height);
+ } else {
+ // move left
+ // copy from left to right
+ for (int x = 0; x < SCREEN_W; x++)
+ copy_rect(screen + x - dx, SCREEN_W, x, 0, 1, height);
+ }
+ } else {
+ // free movement
+ // not neccessary for now
+ }
+
+
+}
+
+
bool OSystem_Dreamcast::show_mouse(bool visible)
{
bool last = _ms_visible;