@@ -44,9 +44,9 @@ void GfxScroll(int left, int top, int wi
p = _screen.pitch;
if (yo > 0 || (yo == 0 && xo > 0)) {
if (yo > 0) {
// Calculate pointers
dst = _screen.dst_ptr + (top+height-1) * p + (left+width-1);
dst = _screen.dst_ptr + (top + height - 1) * p + left;
src = dst - yo * p;
// Decrease height and increase top
@@ -56,31 +56,21 @@ void GfxScroll(int left, int top, int wi
// Adjust left & width
if (xo >= 0) {
dst += xo;
left += xo;
src -= xo;
width -= xo;
} else {
width += xo;
}
// Offset pointers to fit into the memmove call
dst += -width + 1;
src += -width + 1;
ht = height;
do {
memmove(dst, src, width);
for (ht = height; ht > 0; --ht) {
memcpy(dst, src, width);
src -= p;
dst -= p;
} while (--ht);
// This part of the screen is now dirty.
_video_driver->make_dirty(left, top, width, height);
// Calculate pointers to mem.
dst = _screen.dst_ptr + top * p + left;
@@ -98,17 +88,16 @@ void GfxScroll(int left, int top, int wi
// the y-displacement may be 0 therefore we have to use memmove,
// because source and destination may overlap
src += p;
dst += p;
Status change: