ReactOS 0.4.15-dev-8207-gd73a838
text.c File Reference
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "wine/wingdi16.h"
#include "mfdrv/metafiledrv.h"
#include "wine/debug.h"
Include dependency graph for text.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (metafile)
 
static BOOL MFDRV_MetaExtTextOut (PHYSDEV dev, short x, short y, UINT16 flags, const RECT16 *rect, LPCSTR str, short count, const INT16 *lpDx)
 
BOOL MFDRV_ExtTextOut (PHYSDEV dev, INT x, INT y, UINT flags, const RECT *lprect, LPCWSTR str, UINT count, const INT *lpDx)
 

Function Documentation

◆ MFDRV_ExtTextOut()

BOOL MFDRV_ExtTextOut ( PHYSDEV  dev,
INT  x,
INT  y,
UINT  flags,
const RECT lprect,
LPCWSTR  str,
UINT  count,
const INT lpDx 
)

Definition at line 75 of file text.c.

77{
78 RECT16 rect16;
79 LPINT16 lpdx16 = NULL;
80 BOOL ret;
81 unsigned int i, j;
82 LPSTR ascii;
83 DWORD len;
84 CHARSETINFO csi;
85 int charset = GetTextCharset( dev->hdc );
86 UINT cp = CP_ACP;
87
89 cp = csi.ciACP;
90 else {
91 switch(charset) {
92 case OEM_CHARSET:
93 cp = GetOEMCP();
94 break;
95 case DEFAULT_CHARSET:
96 cp = GetACP();
97 break;
98
99 case VISCII_CHARSET:
100 case TCVN_CHARSET:
101 case KOI8_CHARSET:
102 case ISO3_CHARSET:
103 case ISO4_CHARSET:
104 case ISO10_CHARSET:
105 case CELTIC_CHARSET:
106 /* FIXME: These have no place here, but because x11drv
107 enumerates fonts with these (made up) charsets some apps
108 might use them and then the FIXME below would become
109 annoying. Now we could pick the intended codepage for
110 each of these, but since it's broken anyway we'll just
111 use CP_ACP and hope it'll go away...
112 */
113 cp = CP_ACP;
114 break;
115
116
117 default:
118 FIXME("Can't find codepage for charset %d\n", charset);
119 break;
120 }
121 }
122
123
124 TRACE("cp == %d\n", cp);
126 ascii = HeapAlloc(GetProcessHeap(), 0, len);
127 WideCharToMultiByte(cp, 0, str, count, ascii, len, NULL, NULL);
128 TRACE("mapped %s -> %s\n", debugstr_wn(str, count), debugstr_an(ascii, len));
129
130
131 if (lprect)
132 {
133 rect16.left = lprect->left;
134 rect16.top = lprect->top;
135 rect16.right = lprect->right;
136 rect16.bottom = lprect->bottom;
137 }
138
139 if(lpDx) {
140 lpdx16 = HeapAlloc( GetProcessHeap(), 0, sizeof(INT16)*len );
141 for(i = j = 0; i < len; )
142 if(IsDBCSLeadByteEx(cp, ascii[i])) {
143 lpdx16[i++] = lpDx[j++];
144 lpdx16[i++] = 0;
145 } else
146 lpdx16[i++] = lpDx[j++];
147 }
148
149 ret = MFDRV_MetaExtTextOut(dev,x,y,flags,lprect?&rect16:NULL,ascii,len,lpdx16);
150 HeapFree( GetProcessHeap(), 0, ascii );
151 HeapFree( GetProcessHeap(), 0, lpdx16 );
152 return ret;
153}
signed short INT16
#define ULongToPtr(ul)
Definition: basetsd.h:92
#define FIXME(fmt,...)
Definition: debug.h:114
CFF_Charset charset
Definition: cffcmap.c:138
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
static __inline const char * debugstr_an(const char *s, int n)
Definition: compat.h:55
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
UINT WINAPI GetACP(void)
Definition: locale.c:2020
BOOL WINAPI IsDBCSLeadByteEx(UINT codepage, BYTE testchar)
Definition: locale.c:2103
UINT WINAPI GetOEMCP(void)
Definition: locale.c:2059
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define debugstr_wn
Definition: kernel32.h:33
POINT cp
Definition: magnifier.c:59
unsigned int UINT
Definition: ndis.h:50
const WCHAR * str
#define TRACE(s)
Definition: solgame.cpp:4
INT16 left
Definition: windef16.h:143
INT16 bottom
Definition: windef16.h:146
INT16 top
Definition: windef16.h:144
INT16 right
Definition: windef16.h:145
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int ret
static BOOL MFDRV_MetaExtTextOut(PHYSDEV dev, short x, short y, UINT16 flags, const RECT16 *rect, LPCSTR str, short count, const INT16 *lpDx)
Definition: text.c:36
INT16 * LPINT16
Definition: windef16.h:43
#define TCVN_CHARSET
Definition: wingdi.h:408
#define ISO3_CHARSET
Definition: wingdi.h:410
#define CELTIC_CHARSET
Definition: wingdi.h:413
#define KOI8_CHARSET
Definition: wingdi.h:409
#define VISCII_CHARSET
Definition: wingdi.h:407
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define ISO10_CHARSET
Definition: wingdi.h:412
int WINAPI GetTextCharset(_In_ HDC)
Definition: text.c:187
#define TCI_SRCCHARSET
Definition: wingdi.h:961
#define OEM_CHARSET
Definition: wingdi.h:400
#define ISO4_CHARSET
Definition: wingdi.h:411
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
char * LPSTR
Definition: xmlstorage.h:182

◆ MFDRV_MetaExtTextOut()

static BOOL MFDRV_MetaExtTextOut ( PHYSDEV  dev,
short  x,
short  y,
UINT16  flags,
const RECT16 rect,
LPCSTR  str,
short  count,
const INT16 lpDx 
)
static

Definition at line 36 of file text.c.

39{
40 BOOL ret;
41 DWORD len;
42 METARECORD *mr;
43 BOOL isrect = flags & (ETO_CLIPPED | ETO_OPAQUE);
44
45 len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 2 * sizeof(short)
46 + sizeof(UINT16);
47 if (isrect)
48 len += sizeof(RECT16);
49 if (lpDx)
50 len+=count*sizeof(INT16);
52 return FALSE;
53
54 mr->rdSize = len / 2;
56 *(mr->rdParm) = y;
57 *(mr->rdParm + 1) = x;
58 *(mr->rdParm + 2) = count;
59 *(mr->rdParm + 3) = flags;
60 if (isrect) memcpy(mr->rdParm + 4, rect, sizeof(RECT16));
61 memcpy(mr->rdParm + (isrect ? 8 : 4), str, count);
62 if (lpDx)
63 memcpy(mr->rdParm + (isrect ? 8 : 4) + ((count + 1) >> 1),lpDx,
64 count*sizeof(INT16));
65 ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
66 HeapFree( GetProcessHeap(), 0, mr);
67 return ret;
68}
unsigned short UINT16
#define FALSE
Definition: types.h:117
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
& rect
Definition: startmenu.cpp:1413
DWORD rdSize
Definition: wingdi.h:2345
WORD rdParm[1]
Definition: wingdi.h:2347
WORD rdFunction
Definition: wingdi.h:2346
BOOL MFDRV_WriteRecord(PHYSDEV dev, METARECORD *mr, DWORD rlen)
Definition: init.c:475
#define ETO_CLIPPED
Definition: wingdi.h:648
#define ETO_OPAQUE
Definition: wingdi.h:647
#define META_EXTTEXTOUT
Definition: wingdi.h:259
struct tagMETARECORD METARECORD

Referenced by MFDRV_ExtTextOut().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( metafile  )