[PATCH] d3dx9: Implement getting/setting line width.

Nikolay Sivov nsivov at codeweavers.com
Tue Aug 10 03:54:05 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/d3dx9_36/line.c       | 19 +++++++++++++++----
 dlls/d3dx9_36/tests/line.c | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/dlls/d3dx9_36/line.c b/dlls/d3dx9_36/line.c
index 7b2e3b5428f..647eb1b5b2a 100644
--- a/dlls/d3dx9_36/line.c
+++ b/dlls/d3dx9_36/line.c
@@ -29,6 +29,7 @@ struct d3dx9_line
 
     IDirect3DDevice9 *device;
     IDirect3DStateBlock9 *state;
+    float width;
 };
 
 static inline struct d3dx9_line *impl_from_ID3DXLine(ID3DXLine *iface)
@@ -192,16 +193,25 @@ static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
 
 static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
 {
-    FIXME("iface %p, width %.8e stub!\n", iface, width);
+    struct d3dx9_line *line = impl_from_ID3DXLine(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, width %.8e.\n", iface, width);
+
+    if (width <= 0.0f)
+        return D3DERR_INVALIDCALL;
+
+    line->width = width;
+
+    return D3D_OK;
 }
 
 static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
 {
-    FIXME("iface %p stub!\n", iface);
+    struct d3dx9_line *line = impl_from_ID3DXLine(iface);
 
-    return 1.0f;
+    TRACE("iface %p.\n", iface);
+
+    return line->width;
 }
 
 static HRESULT WINAPI d3dx9_line_SetAntialias(ID3DXLine *iface, BOOL antialias)
@@ -306,6 +316,7 @@ HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine
     object->ref = 1;
     object->device = device;
     IDirect3DDevice9_AddRef(device);
+    object->width = 1.0f;
 
     *line = &object->ID3DXLine_iface;
 
diff --git a/dlls/d3dx9_36/tests/line.c b/dlls/d3dx9_36/tests/line.c
index ae8d07e0623..d89ae160ba5 100644
--- a/dlls/d3dx9_36/tests/line.c
+++ b/dlls/d3dx9_36/tests/line.c
@@ -115,6 +115,38 @@ static void test_create_line(IDirect3DDevice9* device)
     ok(ref == 0, "Got %x references to line %p, expected 0\n", ref, line);
 }
 
+static void test_line_width(IDirect3DDevice9* device)
+{
+    ID3DXLine *line = NULL;
+    ULONG refcount;
+    float width;
+    HRESULT hr;
+
+    hr = D3DXCreateLine(device, &line);
+    ok(hr == D3D_OK, "Failed to create a line, hr %#x.\n", hr);
+
+    width = ID3DXLine_GetWidth(line);
+    ok(width == 1.0f, "Unexpected line width %.8e.\n", width);
+
+    hr = ID3DXLine_SetWidth(line, 0.0f);
+    ok(hr == D3DERR_INVALIDCALL, "Unexpected hr %#x.\n", hr);
+    width = ID3DXLine_GetWidth(line);
+    ok(width == 1.0f, "Unexpected line width %.8e.\n", width);
+
+    hr = ID3DXLine_SetWidth(line, -1.0f);
+    ok(hr == D3DERR_INVALIDCALL, "Unexpected hr %#x.\n", hr);
+    width = ID3DXLine_GetWidth(line);
+    ok(width == 1.0f, "Unexpected line width %.8e.\n", width);
+
+    hr = ID3DXLine_SetWidth(line, 10.0f);
+    ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr);
+    width = ID3DXLine_GetWidth(line);
+    ok(width == 10.0f, "Unexpected line width %.8e.\n", width);
+
+    refcount = ID3DXLine_Release(line);
+    ok(!refcount, "Got %u references to line.\n", refcount);
+}
+
 START_TEST(line)
 {
     HWND wnd;
@@ -148,6 +180,7 @@ START_TEST(line)
     }
 
     test_create_line(device);
+    test_line_width(device);
 
     IDirect3DDevice9_Release(device);
     IDirect3D9_Release(d3d);
-- 
2.30.2




More information about the wine-devel mailing list