diff --git a/lib/libvgl/bitmap.c b/lib/libvgl/bitmap.c index c5af0c645259..76e206ac56c0 100644 --- a/lib/libvgl/bitmap.c +++ b/lib/libvgl/bitmap.c @@ -269,7 +269,7 @@ int __VGLBitmapCopy(VGLBitmap *src, int srcx, int srcy, VGLBitmap *dst, int dstx, int dsty, int width, int hight) { - int srcline, dstline; + int srcline, dstline, yend, yextra, ystep; if (srcx>src->VXsize || srcy>src->VYsize || dstx>dst->VXsize || dsty>dst->VYsize) @@ -296,8 +296,17 @@ __VGLBitmapCopy(VGLBitmap *src, int srcx, int srcy, hight=dst->VYsize-dsty; if (width < 0 || hight < 0) return -1; + yend = srcy + hight; + yextra = 0; + ystep = 1; + if (src->Bitmap == dst->Bitmap && srcy < dsty) { + yend = srcy; + yextra = hight - 1; + ystep = -1; + } if (src->Type == MEMBUF) { - for (srcline=srcy, dstline=dsty; srclineBitmap+(srcline*src->VXsize+srcx)*dst->PixelBytes); } @@ -319,7 +328,8 @@ __VGLBitmapCopy(VGLBitmap *src, int srcx, int srcy, } else { p = buffer; } - for (srcline=srcy, dstline=dsty; srcline