Nikolay Sivov : dwrite: Implement SetCurrentTransform() for bitmap render target.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Nov 19 10:07:50 CST 2014
Module: wine
Branch: master
Commit: 9db50228dd3dcda87f1b678a7fd99f5e5e82fea0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9db50228dd3dcda87f1b678a7fd99f5e5e82fea0
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Nov 18 15:35:50 2014 +0300
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);
More information about the wine-cvs
mailing list