Dmitry Timoshkov : x11drv: Copy the whole image at once if appropriate.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 7 14:20:10 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 729eaa6920a672acc0d8b682bcc9336b8575a364
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=729eaa6920a672acc0d8b682bcc9336b8575a364

Author: Dmitry Timoshkov <dmitry at 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;
     }




More information about the wine-cvs mailing list