From 1eb2913ad6aed783fe18b765859821e7590bbb32 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 1 Aug 2014 23:11:10 +0400 Subject: [PATCH] dwrite: Added GetCurrentTransform() for a render target. --- dlls/dwrite/gdiinterop.c | 12 ++++++++++-- dlls/dwrite/tests/font.c | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/dlls/dwrite/gdiinterop.c b/dlls/dwrite/gdiinterop.c index 4b261972ea2..73da1d24e54 100644 --- a/dlls/dwrite/gdiinterop.c +++ b/dlls/dwrite/gdiinterop.c @@ -36,6 +36,7 @@ struct rendertarget { IDWriteBitmapRenderTarget IDWriteBitmapRenderTarget_iface; LONG ref; + DWRITE_MATRIX m; SIZE size; HDC hdc; }; @@ -144,8 +145,11 @@ static HRESULT WINAPI rendertarget_SetPixelsPerDip(IDWriteBitmapRenderTarget *if static HRESULT WINAPI rendertarget_GetCurrentTransform(IDWriteBitmapRenderTarget *iface, DWRITE_MATRIX *transform) { struct rendertarget *This = impl_from_IDWriteBitmapRenderTarget(iface); - FIXME("(%p)->(%p): stub\n", This, transform); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, transform); + + *transform = This->m; + return S_OK; } static HRESULT WINAPI rendertarget_SetCurrentTransform(IDWriteBitmapRenderTarget *iface, DWRITE_MATRIX const *transform) @@ -213,6 +217,10 @@ static HRESULT create_rendertarget(HDC hdc, UINT32 width, UINT32 height, IDWrite return hr; } + target->m.m11 = target->m.m22 = 1.0; + target->m.m12 = target->m.m21 = 0.0; + target->m.dx = target->m.dy = 0.0; + *ret = &target->IDWriteBitmapRenderTarget_iface; return S_OK; diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 8460f1286d4..50b01a8bf13 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -199,6 +199,7 @@ static void test_CreateBitmapRenderTarget(void) IDWriteBitmapRenderTarget *target, *target2; IDWriteGdiInterop *interop; HBITMAP hbm, hbm2; + DWRITE_MATRIX m; DIBSECTION ds; HRESULT hr; SIZE size; @@ -321,6 +322,16 @@ if (0) /* crashes on native */ ok(ds.dsBm.bmBitsPixel == 1, "got %d\n", ds.dsBm.bmBitsPixel); ok(!ds.dsBm.bmBits, "got %p\n", ds.dsBm.bmBits); + /* transform tests */ +if (0) /* crashes on native */ + hr = IDWriteBitmapRenderTarget_GetCurrentTransform(target, NULL); + + memset(&m, 0xcc, sizeof(m)); + hr = IDWriteBitmapRenderTarget_GetCurrentTransform(target, &m); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(m.m11 == 1.0 && m.m22 == 1.0 && m.m12 == 0.0 && m.m21 == 0.0, "got %.1f,%.1f,%.1f,%.1f\n", m.m11, m.m22, m.m12, m.m21); + ok(m.dx == 0.0 && m.dy == 0.0, "got %.1f,%.1f\n", m.dx, m.dy); + IDWriteBitmapRenderTarget_Release(target); IDWriteGdiInterop_Release(interop); }