gdiplus: Added Gdip[Get/Set]TextureWrapMode

Nikolay Sivov bunglehead at gmail.com
Tue Oct 21 10:52:18 CDT 2008


Changelog:
    - added Gdip[Get/Set]TextureWrapMode with basic tests
      (wrapmode not supported actually)

>From 51132b072d6ca599b402f13898bb8220cea26921 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Tue, 21 Oct 2008 19:39:21 +0400
Subject:  Added Gdip[Get/Set]TextureWrapMode

---
 dlls/gdiplus/brush.c           |   33 +++++++++++++++++++++++++++
 dlls/gdiplus/gdiplus.spec      |    4 +-
 dlls/gdiplus/gdiplus_private.h |    1 +
 dlls/gdiplus/tests/brush.c     |   49 ++++++++++++++++++++++++++++++++++++++++
 include/gdiplusflat.h          |    2 +
 5 files changed, 87 insertions(+), 2 deletions(-)

diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index 8bf09ef..ebb69cd 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -605,6 +605,7 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image,
 
     (*texture)->brush.gdibrush = CreateBrushIndirect(&(*texture)->brush.lb);
     (*texture)->brush.bt = BrushTypeTextureFill;
+    (*texture)->wrap = imageattr->wrap;
 
     GdipFree(dibits);
     GdipFree(buff);
@@ -913,6 +914,21 @@ GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture *brush, GpMatrix *matrix)
 }
 
 /******************************************************************************
+ * GdipGetTextureWrapMode [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture *brush, GpWrapMode *wrapmode)
+{
+    TRACE("(%p, %p)\n", brush, wrapmode);
+
+    if(!brush || !wrapmode)
+        return InvalidParameter;
+
+    *wrapmode = brush->wrap;
+
+    return Ok;
+}
+
+/******************************************************************************
  * GdipResetTextureTransform [GDIPLUS.@]
  */
 GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture* brush)
@@ -1138,6 +1154,23 @@ GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *texture,
     return Ok;
 }
 
+/******************************************************************************
+ * GdipSetTextureWrapMode [GDIPLUS.@]
+ * 
+ * WrapMode not used, only stored
+ */
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture *brush, GpWrapMode wrapmode)
+{
+    TRACE("(%p, %d)\n", brush, wrapmode);
+
+    if(!brush)
+        return InvalidParameter;
+
+    brush->wrap = wrapmode;
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient *brush, ARGB color1,
     ARGB color2)
 {
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 3ef4271..ef53b9b 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -399,7 +399,7 @@
 @ stdcall GdipGetTextRenderingHint(ptr ptr)
 @ stub GdipGetTextureImage
 @ stdcall GdipGetTextureTransform(ptr ptr)
-@ stub GdipGetTextureWrapMode
+@ stdcall GdipGetTextureWrapMode(ptr ptr)
 @ stub GdipGetVisibleClipBounds
 @ stub GdipGetVisibleClipBoundsI
 @ stdcall GdipGetWorldTransform(ptr ptr)
@@ -596,7 +596,7 @@
 @ stub GdipSetTextContrast
 @ stdcall GdipSetTextRenderingHint(ptr long)
 @ stdcall GdipSetTextureTransform(ptr ptr)
-@ stub GdipSetTextureWrapMode
+@ stdcall GdipSetTextureWrapMode(ptr long)
 @ stdcall GdipSetWorldTransform(ptr ptr)
 @ stdcall GdipShearMatrix(ptr long long long)
 @ stdcall GdipStartPathFigure(ptr)
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 0ca2714..05549b4 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -139,6 +139,7 @@ struct GpLineGradient{
 struct GpTexture{
     GpBrush brush;
     GpMatrix *transform;
+    WrapMode wrap;  /* not used yet */
 };
 
 struct GpPath{
diff --git a/dlls/gdiplus/tests/brush.c b/dlls/gdiplus/tests/brush.c
index 9dd343b..ae83184 100644
--- a/dlls/gdiplus/tests/brush.c
+++ b/dlls/gdiplus/tests/brush.c
@@ -235,6 +235,54 @@ static void test_transform(void)
     ReleaseDC(0, hdc);
 }
 
+static void test_texturewrap(void)
+{
+    GpStatus status;
+    GpTexture *texture;
+    GpGraphics *graphics = NULL;
+    GpBitmap *bitmap;
+    HDC hdc = GetDC(0);
+    GpWrapMode wrap;
+
+    status = GdipCreateFromHDC(hdc, &graphics);
+    expect(Ok, status);
+    status = GdipCreateBitmapFromGraphics(1, 1, graphics, &bitmap);
+    expect(Ok, status);
+
+    status = GdipCreateTexture((GpImage*)bitmap, WrapModeTile, &texture);
+    expect(Ok, status);
+
+    /* NULL */
+    status = GdipGetTextureWrapMode(NULL, NULL);
+    expect(InvalidParameter, status);
+    status = GdipGetTextureWrapMode(texture, NULL);
+    expect(InvalidParameter, status);
+    status = GdipGetTextureWrapMode(NULL, &wrap);
+    expect(InvalidParameter, status);
+
+    /* get */
+    wrap = WrapModeClamp;
+    status = GdipGetTextureWrapMode(texture, &wrap);
+    expect(Ok, status);
+    expect(WrapModeTile, wrap);
+    /* set, then get */
+    wrap = WrapModeClamp;
+    status = GdipSetTextureWrapMode(texture, wrap);
+    expect(Ok, status);
+    wrap = WrapModeTile;
+    status = GdipGetTextureWrapMode(texture, &wrap);
+    expect(Ok, status);
+    expect(WrapModeClamp, wrap);
+
+    status = GdipDeleteBrush((GpBrush*)texture);
+    expect(Ok, status);
+    status = GdipDisposeImage((GpImage*)bitmap);
+    expect(Ok, status);
+    status = GdipDeleteGraphics(graphics);
+    expect(Ok, status);
+    ReleaseDC(0, hdc);
+}
+
 START_TEST(brush)
 {
     struct GdiplusStartupInput gdiplusStartupInput;
@@ -254,6 +302,7 @@ START_TEST(brush)
     test_getbounds();
     test_getgamma();
     test_transform();
+    test_texturewrap();
 
     GdiplusShutdown(gdiplusToken);
 }
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 8df65f4..4968792 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -208,6 +208,8 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,
     REAL,REAL,REAL,REAL,GpTexture**);
 GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,
     INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode);
 GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
 GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
 GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);
-- 
1.4.4.4






More information about the wine-patches mailing list