Moved the OEM bitmaps that don't depend on the Wine look into the
[wine] / graphics / metafiledrv / text.c
1 /*
2  * metafile driver text functions
3  *
4  * Copyright 1993, 1994 Alexandre Julliard
5  *
6  */
7
8 #include <string.h>
9
10 #include "windef.h"
11 #include "metafiledrv.h"
12 #include "debugtools.h"
13
14 DEFAULT_DEBUG_CHANNEL(metafile);
15
16
17 /******************************************************************
18  *         MFDRV_MetaExtTextOut
19  */
20 static BOOL MFDRV_MetaExtTextOut(DC*dc, short x, short y, UINT16 flags,
21                                  const RECT16 *rect, LPCSTR str, short count,
22                                  const INT16 *lpDx)
23 {
24     BOOL ret;
25     DWORD len;
26     METARECORD *mr;
27     
28     if((!flags && rect) || (flags && !rect))
29         WARN("Inconsistent flags and rect\n");
30     len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 2 * sizeof(short)
31             + sizeof(UINT16);
32     if(rect)
33         len += sizeof(RECT16);
34     if (lpDx)
35      len+=count*sizeof(INT16);
36     if (!(mr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len)))
37         return FALSE;
38
39     mr->rdSize = len / 2;
40     mr->rdFunction = META_EXTTEXTOUT;
41     *(mr->rdParm) = y;
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);
47     if (lpDx)
48      memcpy(mr->rdParm + (rect ? 8 : 4) + ((count + 1) >> 1),lpDx,
49       count*sizeof(INT16));
50     ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
51     HeapFree( GetProcessHeap(), 0, mr);
52     return ret;
53 }
54
55
56
57 /***********************************************************************
58  *           MFDRV_ExtTextOut
59  */
60 BOOL
61 MFDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
62                   const RECT *lprect, LPCWSTR str, UINT count,
63                   const INT *lpDx )
64 {
65     RECT16      rect16;
66     LPINT16     lpdx16 = NULL;
67     BOOL        ret;
68     int         i;
69     LPSTR       ascii;
70     DWORD len;
71
72     if(lpDx)
73         lpdx16 = HeapAlloc( GetProcessHeap(), 0, sizeof(INT16)*count );
74     if (lprect) CONV_RECT32TO16(lprect,&rect16);
75     if (lpdx16)
76         for (i=count;i--;)
77             lpdx16[i]=lpDx[i];
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,
82                                lpdx16);
83     HeapFree( GetProcessHeap(), 0, ascii );
84     if (lpdx16) HeapFree( GetProcessHeap(), 0, lpdx16 );
85     return ret;
86 }
87
88
89