gdiplus: Implement GdipSetImageAttributesWrapMode.
authorVincent Povirk <vincent@codeweavers.com>
Sat, 8 May 2010 17:53:07 +0000 (12:53 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 10 May 2010 08:01:48 +0000 (10:01 +0200)
dlls/gdiplus/gdiplus_private.h
dlls/gdiplus/graphics.c
dlls/gdiplus/imageattributes.c

index 2313cd543e6ec17e186dde382704fa2740421f7b..eafed7c820e18cbcc5f6501f03264291a49de980 100644 (file)
@@ -296,6 +296,8 @@ struct color_remap_table{
 
 struct GpImageAttributes{
     WrapMode wrap;
+    ARGB outside_color;
+    BOOL clamp;
     struct color_key colorkeys[ColorAdjustTypeCount];
     struct color_matrix colormatrices[ColorAdjustTypeCount];
     struct color_remap_table colorremaptables[ColorAdjustTypeCount];
index 790e0fbf03b293dfc0ba91413c4a928e50c6661a..879646a826391768fcbf5fbe20528dfd5e345a85 100644 (file)
@@ -2049,6 +2049,16 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
 
             stride = sizeof(ARGB) * (dst_area.right - dst_area.left);
 
+            if (imageAttributes &&
+                (imageAttributes->wrap != WrapModeClamp ||
+                 imageAttributes->outside_color != 0x00000000 ||
+                 imageAttributes->clamp))
+            {
+                static int fixme;
+                if (!fixme++)
+                    FIXME("Image wrap mode not implemented\n");
+            }
+
             for (x=dst_area.left; x<dst_area.right; x++)
             {
                 for (y=dst_area.top; y<dst_area.bottom; y++)
@@ -2069,7 +2079,6 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
 
                     if (src_x < src_area.left || src_x >= src_area.right ||
                         src_y < src_area.top || src_y >= src_area.bottom)
-                        /* FIXME: Use wrapmode */
                         *src_color = 0;
                     else
                         GdipBitmapGetPixel(bitmap, src_x, src_y, src_color);
index 1a7118df7739249918f80fa0859d3535c8612c54..c157af3a39319d721523764571b74d0aac1d1edd 100644 (file)
@@ -53,6 +53,8 @@ GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes **imageattr)
     *imageattr = GdipAlloc(sizeof(GpImageAttributes));
     if(!*imageattr)    return OutOfMemory;
 
+    (*imageattr)->wrap = WrapModeClamp;
+
     TRACE("<-- %p\n", *imageattr);
 
     return Ok;
@@ -120,17 +122,16 @@ GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes *imageat
 GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes *imageAttr,
     WrapMode wrap, ARGB argb, BOOL clamp)
 {
-    static int calls;
-
     TRACE("(%p,%u,%08x,%i)\n", imageAttr, wrap, argb, clamp);
 
-    if(!imageAttr)
+    if(!imageAttr || wrap > WrapModeClamp)
         return InvalidParameter;
 
-    if(!(calls++))
-        FIXME("not implemented\n");
+    imageAttr->wrap = wrap;
+    imageAttr->outside_color = argb;
+    imageAttr->clamp = clamp;
 
-    return NotImplemented;
+    return Ok;
 }
 
 GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes *imageAttr,