diff options
Diffstat (limited to 'backends/wince/pocketpc.cpp')
-rw-r--r-- | backends/wince/pocketpc.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/backends/wince/pocketpc.cpp b/backends/wince/pocketpc.cpp index 0162d14e28..6adb61b0b3 100644 --- a/backends/wince/pocketpc.cpp +++ b/backends/wince/pocketpc.cpp @@ -95,6 +95,8 @@ public: // The screen will not be updated to reflect the new bitmap void copy_rect(const byte *buf, int pitch, int x, int y, int w, int h); + void move_screen(int dx, int dy, int height); + // Update the dirty areas of the screen void update_screen(); @@ -1215,6 +1217,46 @@ void OSystem_WINCE3::copy_rect(const byte *buf, int pitch, int x, int y, int w, } while (--h); } +void OSystem_WINCE3::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(_gfx_buf + 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(_gfx_buf + 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(_gfx_buf + 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(_gfx_buf + x - dx, SCREEN_WIDTH, x, 0, 1, height); + } + } else { + // free movement + // not neccessary for now + } + + +} + + void OSystem_WINCE3::update_screen() { if (!hide_cursor) |