From: Nikolay Sivov Subject: [PATCH] dwrite: Implement SetCurrentTransform() for bitmap render target Message-Id: <546C76F1.1000406@codeweavers.com> Date: Wed, 19 Nov 2014 13:54:41 +0300 --- From c9c4984f702015a6e7a30a1c7cf49768d6e549f4 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 18 Nov 2014 15:35:50 +0300 Subject: [PATCH] dwrite: Implement SetCurrentTransform() for bitmap render target --- dlls/dwrite/gdiinterop.c | 18 +++++++++++++----- dlls/dwrite/tests/font.c | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/dlls/dwrite/gdiinterop.c b/dlls/dwrite/gdiinterop.c index 3715bf0..1496efd 100644 --- a/dlls/dwrite/gdiinterop.c +++ b/dlls/dwrite/gdiinterop.c @@ -31,6 +31,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(dwrite); +static const DWRITE_MATRIX identity = +{ + 1.0f, 0.0f, + 0.0f, 1.0f, + 0.0f, 0.0f +}; + struct gdiinterop { IDWriteGdiInterop IDWriteGdiInterop_iface; IDWriteFactory *factory; @@ -171,8 +178,11 @@ static HRESULT WINAPI rendertarget_GetCurrentTransform(IDWriteBitmapRenderTarget static HRESULT WINAPI rendertarget_SetCurrentTransform(IDWriteBitmapRenderTarget *iface, DWRITE_MATRIX const *transform) { struct rendertarget *This = impl_from_IDWriteBitmapRenderTarget(iface); - FIXME("(%p)->(%p): stub\n", This, transform); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, transform); + + This->m = transform ? *transform : identity; + return S_OK; } static HRESULT WINAPI rendertarget_GetSize(IDWriteBitmapRenderTarget *iface, SIZE *size) @@ -233,9 +243,7 @@ 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; + target->m = identity; target->pixels_per_dip = 1.0; *ret = &target->IDWriteBitmapRenderTarget_iface; diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index ed43839..cc0b23c 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -666,6 +666,25 @@ if (0) /* crashes on native */ 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); + memset(&m, 0, sizeof(m)); + hr = IDWriteBitmapRenderTarget_SetCurrentTransform(target, &m); + ok(hr == S_OK, "got 0x%08x\n", hr); + + memset(&m, 0xcc, sizeof(m)); + hr = IDWriteBitmapRenderTarget_GetCurrentTransform(target, &m); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(m.m11 == 0.0 && m.m22 == 0.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); + + hr = IDWriteBitmapRenderTarget_SetCurrentTransform(target, NULL); + ok(hr == S_OK, "got 0x%08x\n", hr); + + 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); + /* pixels per dip */ pdip = IDWriteBitmapRenderTarget_GetPixelsPerDip(target); ok(pdip == 1.0, "got %.2f\n", pdip); -- 2.1.3