[2/14] gdiplus: added GdipSetPageScale/GdipGetPageScale

Evan Stade estade at gmail.com
Tue Jul 24 19:18:39 CDT 2007


Hi,

changelog:
*added page scale attribute to GpGraphics stucture
*added GdipSetPageScale/GdipGetPageScale
*use page scale when drawing

 dlls/gdiplus/gdiplus.spec      |    4 ++--
 dlls/gdiplus/gdiplus_private.h |    1 +
 dlls/gdiplus/graphics.c        |   25 +++++++++++++++++++++++++
 include/gdiplusflat.h          |    2 ++
 4 files changed, 30 insertions(+), 2 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 919efe6..59887a7 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -305,7 +305,7 @@
 @ stub GdipGetMetafileHeaderFromStream
 @ stub GdipGetMetafileHeaderFromWmf
 @ stub GdipGetNearestColor
-@ stub GdipGetPageScale
+@ stdcall GdipGetPageScale(ptr ptr)
 @ stdcall GdipGetPageUnit(ptr ptr)
 @ stub GdipGetPathData
 @ stdcall GdipGetPathFillMode(ptr ptr)
@@ -524,7 +524,7 @@
 @ stub GdipSetLineWrapMode
 @ stub GdipSetMatrixElements
 @ stub GdipSetMetafileDownLevelRasterizationLimit
-@ stub GdipSetPageScale
+@ stdcall GdipSetPageScale(ptr long)
 @ stdcall GdipSetPageUnit(ptr long)
 @ stdcall GdipSetPathFillMode(ptr long)
 @ stub GdipSetPathGradientBlend
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 72e2303..2e7fc2c 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -66,6 +66,7 @@ struct GpGraphics{
     InterpolationMode interpolation;
     PixelOffsetMode pixeloffset;
     GpUnit unit;    /* page unit */
+    REAL scale;     /* page scale */
 };
 
 struct GpBrush{
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index df481cd..3ed99ca 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -109,6 +109,10 @@ static void transform_and_round_points(G
             break;
     }
 
+    /* apply page scale */
+    if(graphics->unit != UnitDisplay)
+        unitscale *= graphics->scale;
+
     for(i = 0; i < count; i++){
         pti[i].x = roundr(unitscale * ptf[i].X);
         pti[i].y = roundr(unitscale * ptf[i].Y);
@@ -746,6 +750,7 @@ GpStatus WINGDIPAPI GdipCreateFromHDC(HD
     (*graphics)->interpolation = InterpolationModeDefault;
     (*graphics)->pixeloffset = PixelOffsetModeDefault;
     (*graphics)->unit = UnitDisplay;
+    (*graphics)->scale = 1.0;
 
     return Ok;
 }
@@ -1085,6 +1090,16 @@ GpStatus WINGDIPAPI GdipGetInterpolation
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics *graphics, REAL *scale)
+{
+    if(!graphics || !scale)
+        return InvalidParameter;
+
+    *scale = graphics->scale;
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics *graphics, GpUnit *unit)
 {
     if(!graphics || !unit)
@@ -1160,6 +1175,16 @@ GpStatus WINGDIPAPI GdipSetInterpolation
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics *graphics, REAL scale)
+{
+    if(!graphics || (scale <= 0.0))
+        return InvalidParameter;
+
+    graphics->scale = scale;
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics *graphics, GpUnit unit)
 {
     if(!graphics || (unit == UnitWorld))
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index d0aae71..03def6f 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -62,6 +62,7 @@ GpStatus WINGDIPAPI GdipFillPolygonI(GpG
     GpFillMode);
 GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
 GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
 GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
 GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
 GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
@@ -69,6 +70,7 @@ GpStatus WINGDIPAPI GdipRestoreGraphics(
 GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
 GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
 GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
 GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
 GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
 GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
-- 
1.4.1


More information about the wine-patches mailing list