From 5dd637134513d009d02af5b33e986685d1016066 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Fri, 5 Jun 2009 13:57:23 +0200 Subject: [PATCH] d3dx9: Implement ID3DXFont_GetTextMetrics. --- dlls/d3dx9_36/d3dx9_36_private.h | 1 + dlls/d3dx9_36/font.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/dlls/d3dx9_36/d3dx9_36_private.h b/dlls/d3dx9_36/d3dx9_36_private.h index 4d73e76c5f6..cf3e176cbe5 100644 --- a/dlls/d3dx9_36/d3dx9_36_private.h +++ b/dlls/d3dx9_36/d3dx9_36_private.h @@ -45,6 +45,7 @@ typedef struct ID3DXFontImpl D3DXFONT_DESCW desc; HDC hdc; + HFONT hfont; } ID3DXFontImpl; diff --git a/dlls/d3dx9_36/font.c b/dlls/d3dx9_36/font.c index 034ae933ad1..98b4fe9557f 100644 --- a/dlls/d3dx9_36/font.c +++ b/dlls/d3dx9_36/font.c @@ -55,6 +55,7 @@ static ULONG WINAPI ID3DXFontImpl_Release(LPD3DXFONT iface) TRACE("(%p): ReleaseRef to %d\n", This, ref); if(ref==0) { + DeleteObject(This->hfont); DeleteDC(This->hdc); IDirect3DDevice9_Release(This->device); HeapFree(GetProcessHeap(), 0, This); @@ -100,15 +101,15 @@ static HRESULT WINAPI ID3DXFontImpl_GetDescW(LPD3DXFONT iface, D3DXFONT_DESCW *d static BOOL WINAPI ID3DXFontImpl_GetTextMetricsA(LPD3DXFONT iface, TEXTMETRICA *metrics) { ID3DXFontImpl *This=(ID3DXFontImpl*)iface; - FIXME("(%p): stub\n", This); - return FALSE; + TRACE("(%p)\n", This); + return GetTextMetricsA(This->hdc, metrics); } static BOOL WINAPI ID3DXFontImpl_GetTextMetricsW(LPD3DXFONT iface, TEXTMETRICW *metrics) { ID3DXFontImpl *This=(ID3DXFontImpl*)iface; - FIXME("(%p): stub\n", This); - return FALSE; + TRACE("(%p)\n", This); + return GetTextMetricsW(This->hdc, metrics); } static HDC WINAPI ID3DXFontImpl_GetDC(LPD3DXFONT iface) @@ -307,6 +308,15 @@ HRESULT WINAPI D3DXCreateFontIndirectW(LPDIRECT3DDEVICE9 device, CONST D3DXFONT_ return D3DXERR_INVALIDDATA; } + object->hfont = CreateFontW(desc->Height, desc->Width, 0, 0, desc->Weight, desc->Italic, FALSE, FALSE, desc->CharSet, + desc->OutputPrecision, CLIP_DEFAULT_PRECIS, desc->Quality, desc->PitchAndFamily, desc->FaceName); + if( !object->hfont ) { + DeleteDC(object->hdc); + HeapFree(GetProcessHeap(), 0, object); + return D3DXERR_INVALIDDATA; + } + SelectObject(object->hdc, object->hfont); + IDirect3DDevice9_AddRef(device); *font=(LPD3DXFONT)object;