Module: wine Branch: refs/heads/master Commit: 729eaa6920a672acc0d8b682bcc9336b8575a364 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=729eaa6920a672acc0d8b682...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Tue Feb 7 21:16:56 2006 +0100
x11drv: Copy the whole image at once if appropriate.
---
dlls/x11drv/dib_convert.c | 30 +++++++++++++++++++++++++++--- 1 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/dlls/x11drv/dib_convert.c b/dlls/x11drv/dib_convert.c index 185d64e..b504843 100644 --- a/dlls/x11drv/dib_convert.c +++ b/dlls/x11drv/dib_convert.c @@ -75,8 +75,16 @@ static void convert_5x5_asis(int width, { int y;
+ width *= 2; + + if (srclinebytes == dstlinebytes && srclinebytes == width) + { + memcpy(dstbits, srcbits, height * width); + return; + } + for (y=0; y<height; y++) { - memcpy(dstbits, srcbits, width*2); + memcpy(dstbits, srcbits, width); srcbits = (const char*)srcbits + srclinebytes; dstbits = (char*)dstbits + dstlinebytes; } @@ -563,8 +571,16 @@ static void convert_888_asis(int width, { int y;
+ width *= 3; + + if (srclinebytes == dstlinebytes && srclinebytes == width) + { + memcpy(dstbits, srcbits, height * width); + return; + } + for (y=0; y<height; y++) { - memcpy(dstbits, srcbits, width*3); + memcpy(dstbits, srcbits, width); srcbits = (const char*)srcbits + srclinebytes; dstbits = (char*)dstbits + dstlinebytes; } @@ -953,8 +969,16 @@ static void convert_0888_asis(int width, { int y;
+ width *= 4; + + if (srclinebytes == dstlinebytes && srclinebytes == width) + { + memcpy(dstbits, srcbits, height * width); + return; + } + for (y=0; y<height; y++) { - memcpy(dstbits, srcbits, width*4); + memcpy(dstbits, srcbits, width); srcbits = (const char*)srcbits + srclinebytes; dstbits = (char*)dstbits + dstlinebytes; }