Module: wine Branch: master Commit: bc47dc3f41bc0614a824439d77ba74963a7e2f2b URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc47dc3f41bc0614a824439d77...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Jun 2 17:56:32 2017 +0200
d2d1: Implement d2d_layer_GetSize().
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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);