Michael Kaufmann : gdi: Fix the EMF bounding box calculation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jan 25 06:22:29 CST 2006


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

Author: Michael Kaufmann <hallo at michael-kaufmann.ch>
Date:   Wed Jan 25 13:14:27 2006 +0100

gdi: Fix the EMF bounding box calculation.

---

 dlls/gdi/enhmfdrv/init.c |   36 +++++++++++++++++++++++++++---------
 1 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/dlls/gdi/enhmfdrv/init.c b/dlls/gdi/enhmfdrv/init.c
index 8fe665c..e4425da 100644
--- a/dlls/gdi/enhmfdrv/init.c
+++ b/dlls/gdi/enhmfdrv/init.c
@@ -225,16 +225,34 @@ void EMFDRV_UpdateBBox( PHYSDEV dev, REC
     RECTL vportRect = *rect;
 
     LPtoDP(physDev->hdc, (LPPOINT)&vportRect, 2);
+    
+    /* The coordinate systems may be mirrored
+       (LPtoDP handles points, not rectangles) */
+    if (vportRect.left > vportRect.right)
+    {
+        LONG temp = vportRect.right;
+        vportRect.right = vportRect.left;
+        vportRect.left = temp;
+    }
+    if (vportRect.top > vportRect.bottom)
+    {
+        LONG temp = vportRect.bottom;
+        vportRect.bottom = vportRect.top;
+        vportRect.top = temp;
+    }
 
-    if(bounds->left > bounds->right) {/* first rect */
-	*bounds = vportRect;
-	return;
-    }
-    bounds->left   = min(bounds->left,   vportRect.left);
-    bounds->top    = min(bounds->top,    vportRect.top);
-    bounds->right  = max(bounds->right,  vportRect.right);
-    bounds->bottom = max(bounds->bottom, vportRect.bottom);
-    return;
+    if (bounds->left > bounds->right)
+    {
+        /* first bounding rectangle */
+        *bounds = vportRect;
+    }
+    else
+    {
+        bounds->left   = min(bounds->left,   vportRect.left);
+        bounds->top    = min(bounds->top,    vportRect.top);
+        bounds->right  = max(bounds->right,  vportRect.right);
+        bounds->bottom = max(bounds->bottom, vportRect.bottom);
+    }
 }
 
 /**********************************************************************




More information about the wine-cvs mailing list