Module: wine Branch: master Commit: 5295edbd3a139d4280019c35f7bb8dc8c8744a1f URL: http://source.winehq.org/git/wine.git/?a=commit;h=5295edbd3a139d4280019c35f7...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Sep 3 07:48:23 2014 +0200
d2d1: Implement d2d_d3d_render_target_GetPixelSize().
---
dlls/d2d1/d2d1_private.h | 3 ++- dlls/d2d1/factory.c | 8 +++++++- dlls/d2d1/render_target.c | 21 +++++++++++++++++---- 3 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 001c986..925fafb 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -29,10 +29,11 @@ struct d2d_d3d_render_target ID2D1RenderTarget ID2D1RenderTarget_iface; LONG refcount;
+ D2D1_SIZE_U pixel_size; D2D1_MATRIX_3X2_F transform; };
-void d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2D1Factory *factory, +HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2D1Factory *factory, IDXGISurface *surface, const D2D1_RENDER_TARGET_PROPERTIES *desc) DECLSPEC_HIDDEN;
struct d2d_gradient diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c index 0bc465e..f8cd912 100644 --- a/dlls/d2d1/factory.c +++ b/dlls/d2d1/factory.c @@ -191,13 +191,19 @@ static HRESULT STDMETHODCALLTYPE d2d_factory_CreateDxgiSurfaceRenderTarget(ID2D1 IDXGISurface *surface, const D2D1_RENDER_TARGET_PROPERTIES *desc, ID2D1RenderTarget **render_target) { struct d2d_d3d_render_target *object; + HRESULT hr;
TRACE("iface %p, surface %p, desc %p, render_target %p.\n", iface, surface, desc, render_target);
if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY;
- d2d_d3d_render_target_init(object, iface, surface, desc); + if (FAILED(hr = d2d_d3d_render_target_init(object, iface, surface, desc))) + { + WARN("Failed to initialize render target, hr %#x.\n", hr); + HeapFree(GetProcessHeap(), 0, object); + return hr; + }
TRACE("Created render target %p.\n", object); *render_target = &object->ID2D1RenderTarget_iface; diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c index 3897a1c..2c079a3 100644 --- a/dlls/d2d1/render_target.c +++ b/dlls/d2d1/render_target.c @@ -483,11 +483,11 @@ static D2D1_SIZE_F STDMETHODCALLTYPE d2d_d3d_render_target_GetSize(ID2D1RenderTa
static D2D1_SIZE_U STDMETHODCALLTYPE d2d_d3d_render_target_GetPixelSize(ID2D1RenderTarget *iface) { - static const D2D1_SIZE_U size = {0, 0}; + struct d2d_d3d_render_target *render_target = impl_from_ID2D1RenderTarget(iface);
- FIXME("iface %p stub!\n", iface); + TRACE("iface %p.\n", iface);
- return size; + return render_target->pixel_size; }
static UINT32 STDMETHODCALLTYPE d2d_d3d_render_target_GetMaximumBitmapSize(ID2D1RenderTarget *iface) @@ -566,9 +566,12 @@ static const struct ID2D1RenderTargetVtbl d2d_d3d_render_target_vtbl = d2d_d3d_render_target_IsSupported, };
-void d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2D1Factory *factory, +HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2D1Factory *factory, IDXGISurface *surface, const D2D1_RENDER_TARGET_PROPERTIES *desc) { + DXGI_SURFACE_DESC surface_desc; + HRESULT hr; + static const D2D1_MATRIX_3X2_F identity = { 1.0f, 0.0f, @@ -581,5 +584,15 @@ void d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2 render_target->ID2D1RenderTarget_iface.lpVtbl = &d2d_d3d_render_target_vtbl; render_target->refcount = 1;
+ if (FAILED(hr = IDXGISurface_GetDesc(surface, &surface_desc))) + { + WARN("Failed to get surface desc, hr %#x.\n", hr); + return hr; + } + + render_target->pixel_size.width = surface_desc.Width; + render_target->pixel_size.height = surface_desc.Height; render_target->transform = identity; + + return S_OK; }