[PATCH 2/5] d2d1: Implement d2d_layer_GetSize().
Henri Verbeet
hverbeet at codeweavers.com
Fri Jun 2 10:56:32 CDT 2017
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/d2d1/d2d1_private.h | 3 ++-
dlls/d2d1/layer.c | 11 +++++++----
dlls/d2d1/render_target.c | 2 +-
dlls/d2d1/tests/d2d1.c | 12 ++++++++++++
4 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index 12a230b..377adf6 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -242,9 +242,10 @@ struct d2d_layer
LONG refcount;
ID2D1Factory *factory;
+ D2D1_SIZE_F size;
};
-HRESULT d2d_layer_create(ID2D1Factory *factory, struct d2d_layer **layer) DECLSPEC_HIDDEN;
+HRESULT d2d_layer_create(ID2D1Factory *factory, const D2D1_SIZE_F *size, struct d2d_layer **layer) DECLSPEC_HIDDEN;
struct d2d_mesh
{
diff --git a/dlls/d2d1/layer.c b/dlls/d2d1/layer.c
index 0fcd185..25a331b 100644
--- a/dlls/d2d1/layer.c
+++ b/dlls/d2d1/layer.c
@@ -84,10 +84,11 @@ static void STDMETHODCALLTYPE d2d_layer_GetFactory(ID2D1Layer *iface, ID2D1Facto
static D2D1_SIZE_F * STDMETHODCALLTYPE d2d_layer_GetSize(ID2D1Layer *iface, D2D1_SIZE_F *size)
{
- FIXME("iface %p, size %p stub!\n", iface, size);
+ struct d2d_layer *layer = impl_from_ID2D1Layer(iface);
+
+ TRACE("iface %p, size %p.\n", iface, size);
- size->width = 0;
- size->height = 0;
+ *size = layer->size;
return size;
}
@@ -100,7 +101,7 @@ static const struct ID2D1LayerVtbl d2d_layer_vtbl =
d2d_layer_GetSize,
};
-HRESULT d2d_layer_create(ID2D1Factory *factory, struct d2d_layer **layer)
+HRESULT d2d_layer_create(ID2D1Factory *factory, const D2D1_SIZE_F *size, struct d2d_layer **layer)
{
if (!(*layer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(**layer))))
return E_OUTOFMEMORY;
@@ -108,6 +109,8 @@ HRESULT d2d_layer_create(ID2D1Factory *factory, struct d2d_layer **layer)
(*layer)->ID2D1Layer_iface.lpVtbl = &d2d_layer_vtbl;
(*layer)->refcount = 1;
ID2D1Factory_AddRef((*layer)->factory = factory);
+ if (size)
+ (*layer)->size = *size;
TRACE("Created layer %p.\n", *layer);
diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c
index ecab51f..ec8e4d0 100644
--- a/dlls/d2d1/render_target.c
+++ b/dlls/d2d1/render_target.c
@@ -464,7 +464,7 @@ static HRESULT STDMETHODCALLTYPE d2d_d3d_render_target_CreateLayer(ID2D1RenderTa
TRACE("iface %p, size %p, layer %p.\n", iface, size, layer);
- if (SUCCEEDED(hr = d2d_layer_create(render_target->factory, &object)))
+ if (SUCCEEDED(hr = d2d_layer_create(render_target->factory, size, &object)))
*layer = &object->ID2D1Layer_iface;
return hr;
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 72903ef..6993dc6 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -4536,6 +4536,7 @@ static void test_layer(void)
ID3D10Device1 *device;
IDXGISurface *surface;
ID2D1Layer *layer;
+ D2D1_SIZE_F size;
ULONG refcount;
HWND window;
HRESULT hr;
@@ -4561,6 +4562,17 @@ static void test_layer(void)
ID2D1Layer_GetFactory(layer, &layer_factory);
ok(layer_factory == factory, "Got unexpected layer factory %p, expected %p.\n", layer_factory, factory);
ID2D1Factory_Release(layer_factory);
+ size = ID2D1Layer_GetSize(layer);
+ ok(size.width == 0.0f, "Got unexpected width %.8e.\n", size.width);
+ ok(size.height == 0.0f, "Got unexpected height %.8e.\n", size.height);
+ ID2D1Layer_Release(layer);
+
+ set_size_f(&size, 800.0f, 600.0f);
+ hr = ID2D1RenderTarget_CreateLayer(rt, &size, &layer);
+ ok(SUCCEEDED(hr), "Failed to create layer, hr %#x.\n", hr);
+ size = ID2D1Layer_GetSize(layer);
+ ok(size.width == 800.0f, "Got unexpected width %.8e.\n", size.width);
+ ok(size.height == 600.0f, "Got unexpected height %.8e.\n", size.height);
ID2D1Layer_Release(layer);
ID2D1RenderTarget_Release(rt);
--
2.1.4
More information about the wine-patches
mailing list