Vincent Povirk : gdiplus: Factor the matrix creation code out of GdipTransformPoints.
Alexandre Julliard
julliard at winehq.org
Mon Jan 24 11:07:29 CST 2011
Module: wine
Branch: master
Commit: 6acffba564193a73e65b013de3499883c26d8d75
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6acffba564193a73e65b013de3499883c26d8d75
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Fri Jan 21 12:59:33 2011 -0600
gdiplus: Factor the matrix creation code out of GdipTransformPoints.
---
dlls/gdiplus/graphics.c | 57 ++++++++++++++++++++++++++++------------------
1 files changed, 35 insertions(+), 22 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index a17cbef..c196ab8 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -147,6 +147,9 @@ static void restore_dc(GpGraphics *graphics, INT state)
RestoreDC(graphics->hdc, state);
}
+static GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space,
+ GpCoordinateSpace src_space, GpMatrix **matrix);
+
/* This helper applies all the changes that the points listed in ptf need in
* order to be drawn on the device context. In the end, this should include at
* least:
@@ -4909,25 +4912,13 @@ GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region)
return Ok;
}
-GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace dst_space,
- GpCoordinateSpace src_space, GpPointF *points, INT count)
+static GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space,
+ GpCoordinateSpace src_space, GpMatrix **matrix)
{
- GpMatrix *matrix;
- GpStatus stat;
+ GpStatus stat = GdipCreateMatrix(matrix);
REAL unitscale;
- if(!graphics || !points || count <= 0)
- return InvalidParameter;
-
- if(graphics->busy)
- return ObjectBusy;
-
- TRACE("(%p, %d, %d, %p, %d)\n", graphics, dst_space, src_space, points, count);
-
- if (src_space == dst_space) return Ok;
-
- stat = GdipCreateMatrix(&matrix);
- if (stat == Ok)
+ if (dst_space != src_space && stat == Ok)
{
unitscale = convert_unit(graphics_res(graphics), graphics->unit);
@@ -4938,12 +4929,12 @@ GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace
switch (src_space)
{
case CoordinateSpaceWorld:
- GdipMultiplyMatrix(matrix, graphics->worldtrans, MatrixOrderAppend);
+ GdipMultiplyMatrix(*matrix, graphics->worldtrans, MatrixOrderAppend);
break;
case CoordinateSpacePage:
break;
case CoordinateSpaceDevice:
- GdipScaleMatrix(matrix, 1.0/unitscale, 1.0/unitscale, MatrixOrderAppend);
+ GdipScaleMatrix(*matrix, 1.0/unitscale, 1.0/unitscale, MatrixOrderAppend);
break;
}
@@ -4958,7 +4949,7 @@ GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace
{
stat = GdipInvertMatrix(inverted_transform);
if (stat == Ok)
- GdipMultiplyMatrix(matrix, inverted_transform, MatrixOrderAppend);
+ GdipMultiplyMatrix(*matrix, inverted_transform, MatrixOrderAppend);
GdipDeleteMatrix(inverted_transform);
}
break;
@@ -4966,12 +4957,34 @@ GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace
case CoordinateSpacePage:
break;
case CoordinateSpaceDevice:
- GdipScaleMatrix(matrix, unitscale, unitscale, MatrixOrderAppend);
+ GdipScaleMatrix(*matrix, unitscale, unitscale, MatrixOrderAppend);
break;
}
+ }
+ return stat;
+}
- if (stat == Ok)
- stat = GdipTransformMatrixPoints(matrix, points, count);
+GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace dst_space,
+ GpCoordinateSpace src_space, GpPointF *points, INT count)
+{
+ GpMatrix *matrix;
+ GpStatus stat;
+
+ if(!graphics || !points || count <= 0)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ TRACE("(%p, %d, %d, %p, %d)\n", graphics, dst_space, src_space, points, count);
+
+ if (src_space == dst_space) return Ok;
+
+ stat = get_graphics_transform(graphics, dst_space, src_space, &matrix);
+
+ if (stat == Ok)
+ {
+ stat = GdipTransformMatrixPoints(matrix, points, count);
GdipDeleteMatrix(matrix);
}
More information about the wine-cvs
mailing list