2 * metafile driver text functions
4 * Copyright 1993, 1994 Alexandre Julliard
11 #include "metafiledrv.h"
12 #include "debugtools.h"
14 DEFAULT_DEBUG_CHANNEL(metafile);
17 /******************************************************************
18 * MFDRV_MetaExtTextOut
20 static BOOL MFDRV_MetaExtTextOut(DC*dc, short x, short y, UINT16 flags,
21 const RECT16 *rect, LPCSTR str, short count,
28 if((!flags && rect) || (flags && !rect))
29 WARN("Inconsistent flags and rect\n");
30 len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 2 * sizeof(short)
33 len += sizeof(RECT16);
35 len+=count*sizeof(INT16);
36 if (!(mr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len)))
40 mr->rdFunction = META_EXTTEXTOUT;
42 *(mr->rdParm + 1) = x;
43 *(mr->rdParm + 2) = count;
44 *(mr->rdParm + 3) = flags;
45 if (rect) memcpy(mr->rdParm + 4, rect, sizeof(RECT16));
46 memcpy(mr->rdParm + (rect ? 8 : 4), str, count);
48 memcpy(mr->rdParm + (rect ? 8 : 4) + ((count + 1) >> 1),lpDx,
50 ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
51 HeapFree( GetProcessHeap(), 0, mr);
57 /***********************************************************************
61 MFDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
62 const RECT *lprect, LPCWSTR str, UINT count,
66 LPINT16 lpdx16 = NULL;
73 lpdx16 = HeapAlloc( GetProcessHeap(), 0, sizeof(INT16)*count );
74 if (lprect) CONV_RECT32TO16(lprect,&rect16);
78 len = WideCharToMultiByte( CP_ACP, 0, str, count, NULL, 0, NULL, NULL );
79 ascii = HeapAlloc( GetProcessHeap(), 0, len );
80 WideCharToMultiByte( CP_ACP, 0, str, count, ascii, len, NULL, NULL );
81 ret = MFDRV_MetaExtTextOut(dc,x,y,flags,lprect?&rect16:NULL,ascii,len,
83 HeapFree( GetProcessHeap(), 0, ascii );
84 if (lpdx16) HeapFree( GetProcessHeap(), 0, lpdx16 );