Evan Stade : gdiplus: Extend GdipDrawImagePointsRect.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 1 05:16:59 CDT 2007
Module: wine
Branch: master
Commit: 6e0c574fb9ad6f778730a3ae6f74b8d8cbe266af
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6e0c574fb9ad6f778730a3ae6f74b8d8cbe266af
Author: Evan Stade <estade at gmail.com>
Date: Tue Jul 31 19:16:23 2007 -0700
gdiplus: Extend GdipDrawImagePointsRect.
---
dlls/gdiplus/graphics.c | 28 +++++++++++++++++++++-------
1 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 52d6c5f..7ba2d52 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -1040,6 +1040,7 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
{
GpPointF ptf[3];
POINT pti[3];
+ REAL dx, dy;
TRACE("%p %p %p %d %f %f %f %f %d %p %p %p\n", graphics, image, points, count,
srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback,
@@ -1048,20 +1049,33 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
if(!graphics || !image || !points || !imageAttributes || count != 3)
return InvalidParameter;
- if(image->type != ImageTypeMetafile)
- return NotImplemented;
- if((points[0].X != points[2].X) || (points[0].Y != points[1].Y))
- return NotImplemented;
- if(srcUnit != UnitInch)
+ if(srcUnit == UnitInch)
+ dx = dy = (REAL) INCH_HIMETRIC;
+ else if(srcUnit == UnitPixel){
+ dx = ((REAL) INCH_HIMETRIC) /
+ ((REAL) GetDeviceCaps(graphics->hdc, LOGPIXELSX));
+ dy = ((REAL) INCH_HIMETRIC) /
+ ((REAL) GetDeviceCaps(graphics->hdc, LOGPIXELSY));
+ }
+ else
return NotImplemented;
memcpy(ptf, points, 3 * sizeof(GpPointF));
transform_and_round_points(graphics, pti, ptf, 3);
+ /* IPicture renders bitmaps with the y-axis reversed
+ * FIXME: flipping for unknown image type might not be correct. */
+ if(image->type != ImageTypeMetafile){
+ INT temp;
+ temp = pti[0].y;
+ pti[0].y = pti[2].y;
+ pti[2].y = temp;
+ }
+
if(IPicture_Render(image->picture, graphics->hdc,
pti[0].x, pti[0].y, pti[1].x - pti[0].x, pti[2].y - pti[0].y,
- srcx * INCH_HIMETRIC, srcy * INCH_HIMETRIC,
- srcwidth * INCH_HIMETRIC, srcheight * INCH_HIMETRIC,
+ srcx * dx, srcy * dy,
+ srcwidth * dx, srcheight * dy,
NULL) != S_OK){
if(callback)
callback(callbackData);
More information about the wine-cvs
mailing list