2 * metafile driver text functions
4 * Copyright 1993, 1994 Alexandre Julliard
9 #include "metafiledrv.h"
13 DEFAULT_DEBUG_CHANNEL(metafile)
16 /******************************************************************
17 * MFDRV_MetaExtTextOut
19 static BOOL MFDRV_MetaExtTextOut(DC*dc, short x, short y, UINT16 flags,
20 const RECT16 *rect, LPCSTR str, short count,
27 if((!flags && rect) || (flags && !rect))
28 WARN(metafile, "Inconsistent flags and rect\n");
29 len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 2 * sizeof(short)
32 len += sizeof(RECT16);
34 len+=count*sizeof(INT16);
35 if (!(mr = HeapAlloc( SystemHeap, HEAP_ZERO_MEMORY, len)))
39 mr->rdFunction = META_EXTTEXTOUT;
41 *(mr->rdParm + 1) = x;
42 *(mr->rdParm + 2) = count;
43 *(mr->rdParm + 3) = flags;
44 if (rect) memcpy(mr->rdParm + 4, rect, sizeof(RECT16));
45 memcpy(mr->rdParm + (rect ? 8 : 4), str, count);
47 memcpy(mr->rdParm + (rect ? 8 : 4) + ((count + 1) >> 1),lpDx,
49 ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
50 HeapFree( SystemHeap, 0, mr);
56 /***********************************************************************
60 MFDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
61 const RECT *lprect, LPCSTR str, UINT count,
65 LPINT16 lpdx16 = NULL;
70 lpdx16 = HeapAlloc( SystemHeap, 0, sizeof(INT16)*count );
71 if (lprect) CONV_RECT32TO16(lprect,&rect16);
75 ret = MFDRV_MetaExtTextOut(dc,x,y,flags,lprect?&rect16:NULL,str,count,
77 if (lpdx16) HeapFree( SystemHeap, 0, lpdx16 );