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
);