Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 1 | /* |
| 2 | * text functions |
| 3 | * |
Alexandre Julliard | aca0578 | 1994-10-17 18:12:41 +0000 | [diff] [blame] | 4 | * Copyright 1993, 1994 Alexandre Julliard |
Alexandre Julliard | 234bc24 | 1994-12-10 13:02:28 +0000 | [diff] [blame] | 5 | * |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 6 | * This library is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Lesser General Public |
| 8 | * License as published by the Free Software Foundation; either |
| 9 | * version 2.1 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * This library is distributed in the hope that it will be useful, |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * Lesser General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU Lesser General Public |
| 17 | * License along with this library; if not, write to the Free Software |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Alexandre Julliard | 7e56f68 | 1996-01-31 19:02:28 +0000 | [diff] [blame] | 19 | */ |
| 20 | |
David Luyer | ee517e8 | 1999-02-28 12:27:56 +0000 | [diff] [blame] | 21 | #include <string.h> |
Patrik Stridvall | fdcfdb9 | 1999-06-12 14:55:11 +0000 | [diff] [blame] | 22 | |
Jeremy White | d3e22d9 | 2000-02-10 19:03:02 +0000 | [diff] [blame] | 23 | #include "windef.h" |
| 24 | #include "wingdi.h" |
Patrik Stridvall | fdcfdb9 | 1999-06-12 14:55:11 +0000 | [diff] [blame] | 25 | #include "wine/winuser16.h" |
Michael Veksler | ff5ae3d | 1999-04-22 15:26:11 +0000 | [diff] [blame] | 26 | #include "winbase.h" |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 27 | #include "winerror.h" |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 28 | #include "gdi.h" |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 29 | #include "wine/debug.h" |
Hidenori Takeshima | e2905ea | 2000-03-26 14:43:22 +0000 | [diff] [blame] | 30 | #include "winnls.h" |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 31 | |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 32 | WINE_DEFAULT_DEBUG_CHANNEL(text); |
Patrik Stridvall | b4b9fae | 1999-04-19 14:56:29 +0000 | [diff] [blame] | 33 | |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 34 | /*********************************************************************** |
| 35 | * FONT_mbtowc |
| 36 | * |
| 37 | * Returns a '\0' terminated Unicode translation of str using the |
| 38 | * charset of the currently selected font in hdc. If count is -1 then |
| 39 | * str is assumed to be '\0' terminated, otherwise it contains the |
| 40 | * number of bytes to convert. If plenW is non-NULL, on return it |
| 41 | * will point to the number of WCHARs (excluding the '\0') that have |
| 42 | * been written. If pCP is non-NULL, on return it will point to the |
Huw D M Davies | 8da26fb | 2002-06-22 01:19:29 +0000 | [diff] [blame] | 43 | * codepage used in the conversion (NB, this may be CP_SYMBOL so watch |
| 44 | * out). The caller should free the returned LPWSTR from the process |
| 45 | * heap itself. |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 46 | */ |
| 47 | LPWSTR FONT_mbtowc(HDC hdc, LPCSTR str, INT count, INT *plenW, UINT *pCP) |
| 48 | { |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 49 | UINT cp = CP_ACP; |
Huw D M Davies | 8da26fb | 2002-06-22 01:19:29 +0000 | [diff] [blame] | 50 | INT lenW, i; |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 51 | LPWSTR strW; |
| 52 | CHARSETINFO csi; |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 53 | int charset = GetTextCharset(hdc); |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 54 | |
| 55 | /* Hmm, nicely designed api this one! */ |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 56 | if(TranslateCharsetInfo((DWORD*)charset, &csi, TCI_SRCCHARSET)) |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 57 | cp = csi.ciACP; |
| 58 | else { |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 59 | switch(charset) { |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 60 | case OEM_CHARSET: |
| 61 | cp = GetOEMCP(); |
| 62 | break; |
Huw D M Davies | 848bc15 | 2001-09-20 18:58:05 +0000 | [diff] [blame] | 63 | case DEFAULT_CHARSET: |
| 64 | cp = GetACP(); |
| 65 | break; |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 66 | |
| 67 | case VISCII_CHARSET: |
| 68 | case TCVN_CHARSET: |
| 69 | case KOI8_CHARSET: |
| 70 | case ISO3_CHARSET: |
| 71 | case ISO4_CHARSET: |
| 72 | case ISO10_CHARSET: |
| 73 | case CELTIC_CHARSET: |
Francois Gouget | 58b29952 | 2001-10-08 20:40:09 +0000 | [diff] [blame] | 74 | /* FIXME: These have no place here, but because x11drv |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 75 | enumerates fonts with these (made up) charsets some apps |
| 76 | might use them and then the FIXME below would become |
| 77 | annoying. Now we could pick the intended codepage for |
| 78 | each of these, but since it's broken anyway we'll just |
| 79 | use CP_ACP and hope it'll go away... |
| 80 | */ |
| 81 | cp = CP_ACP; |
| 82 | break; |
| 83 | |
| 84 | |
| 85 | default: |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 86 | FIXME("Can't find codepage for charset %d\n", charset); |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 87 | break; |
| 88 | } |
| 89 | } |
| 90 | |
Huw D M Davies | 8da26fb | 2002-06-22 01:19:29 +0000 | [diff] [blame] | 91 | TRACE("cp == %d\n", cp); |
| 92 | |
| 93 | if(count == -1) count = strlen(str); |
| 94 | if(cp != CP_SYMBOL) { |
| 95 | lenW = MultiByteToWideChar(cp, 0, str, count, NULL, 0); |
| 96 | strW = HeapAlloc(GetProcessHeap(), 0, (lenW + 1) * sizeof(WCHAR)); |
| 97 | MultiByteToWideChar(cp, 0, str, count, strW, lenW); |
| 98 | } else { |
| 99 | lenW = count; |
| 100 | strW = HeapAlloc(GetProcessHeap(), 0, (lenW + 1) * sizeof(WCHAR)); |
| 101 | for(i = 0; i < count; i++) strW[i] = (BYTE)str[i]; |
| 102 | } |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 103 | strW[lenW] = '\0'; |
Huw D M Davies | 8da26fb | 2002-06-22 01:19:29 +0000 | [diff] [blame] | 104 | TRACE("mapped %s -> %s\n", debugstr_an(str, count), debugstr_wn(strW, lenW)); |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 105 | if(plenW) *plenW = lenW; |
| 106 | if(pCP) *pCP = cp; |
| 107 | return strW; |
| 108 | } |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 109 | |
Alexandre Julliard | aca0578 | 1994-10-17 18:12:41 +0000 | [diff] [blame] | 110 | |
| 111 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 112 | * ExtTextOutA (GDI32.@) |
Alexandre Julliard | aca0578 | 1994-10-17 18:12:41 +0000 | [diff] [blame] | 113 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 114 | BOOL WINAPI ExtTextOutA( HDC hdc, INT x, INT y, UINT flags, |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 115 | const RECT *lprect, LPCSTR str, UINT count, const INT *lpDx ) |
Alexandre Julliard | aca0578 | 1994-10-17 18:12:41 +0000 | [diff] [blame] | 116 | { |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 117 | INT wlen; |
| 118 | UINT codepage; |
| 119 | LPWSTR p = FONT_mbtowc(hdc, str, count, &wlen, &codepage); |
| 120 | BOOL ret; |
Junichi Kuchinishi | 34b7b3f | 2000-04-06 20:12:16 +0000 | [diff] [blame] | 121 | LPINT lpDxW = NULL; |
Hidenori Takeshima | e2905ea | 2000-03-26 14:43:22 +0000 | [diff] [blame] | 122 | |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 123 | if (lpDx) { |
| 124 | unsigned int i = 0, j = 0; |
Junichi Kuchinishi | 34b7b3f | 2000-04-06 20:12:16 +0000 | [diff] [blame] | 125 | |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 126 | lpDxW = (LPINT)HeapAlloc( GetProcessHeap(), 0, wlen*sizeof(INT)); |
| 127 | while(i < count) { |
| 128 | if(IsDBCSLeadByteEx(codepage, str[i])) { |
| 129 | lpDxW[j++] = lpDx[i] + lpDx[i+1]; |
| 130 | i = i + 2; |
| 131 | } else { |
| 132 | lpDxW[j++] = lpDx[i]; |
| 133 | i = i + 1; |
| 134 | } |
| 135 | } |
Junichi Kuchinishi | 34b7b3f | 2000-04-06 20:12:16 +0000 | [diff] [blame] | 136 | } |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 137 | |
| 138 | ret = ExtTextOutW( hdc, x, y, flags, lprect, p, wlen, lpDxW ); |
| 139 | |
| 140 | HeapFree( GetProcessHeap(), 0, p ); |
| 141 | if (lpDxW) HeapFree( GetProcessHeap(), 0, lpDxW ); |
Huw D M Davies | c553924 | 1999-12-26 00:47:03 +0000 | [diff] [blame] | 142 | return ret; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 143 | } |
| 144 | |
| 145 | |
| 146 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 147 | * ExtTextOutW (GDI32.@) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 148 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 149 | BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags, |
Huw D M Davies | 2938242 | 2001-09-19 20:32:07 +0000 | [diff] [blame] | 150 | const RECT *lprect, LPCWSTR str, UINT count, const INT *lpDx ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 151 | { |
Alexandre Julliard | 2a2321b | 2000-08-19 21:38:55 +0000 | [diff] [blame] | 152 | BOOL ret = FALSE; |
| 153 | DC * dc = DC_GetDCUpdate( hdc ); |
| 154 | if (dc) |
| 155 | { |
Huw D M Davies | 8a32613 | 2002-04-06 00:37:50 +0000 | [diff] [blame] | 156 | if(PATH_IsPathOpen(dc->path)) |
| 157 | FIXME("called on an open path\n"); |
Shachar Shemesh | 4ebb7b5 | 2002-06-14 23:29:16 +0000 | [diff] [blame] | 158 | else if(dc->funcs->pExtTextOut) |
| 159 | { |
| 160 | DWORD fontLangInfo=0; |
| 161 | if( !(flags&(ETO_GLYPH_INDEX|ETO_IGNORELANGUAGE)) && |
| 162 | ((fontLangInfo=GetFontLanguageInfo( hdc ))&(GCP_REORDER|GCP_GLYPHSHAPE)) ) |
| 163 | { |
| 164 | /* The caller did not specify that language processing was already done, |
| 165 | * and the font idetifies iteself as requiring language processing. |
| 166 | */ |
| 167 | GCP_RESULTSW gcp; |
Huw D M Davies | b4bdd81 | 2002-08-09 00:55:33 +0000 | [diff] [blame] | 168 | |
Shachar Shemesh | 4ebb7b5 | 2002-06-14 23:29:16 +0000 | [diff] [blame] | 169 | gcp.lStructSize=sizeof(gcp); |
| 170 | gcp.lpOutString=HeapAlloc(GetProcessHeap(), 0, count*sizeof(WCHAR)); |
| 171 | gcp.lpOrder=NULL; |
| 172 | gcp.lpDx=NULL; |
| 173 | gcp.lpCaretPos=NULL; |
| 174 | gcp.lpClass=NULL; |
| 175 | gcp.lpGlyphs=NULL; |
| 176 | gcp.nGlyphs=0; |
| 177 | gcp.nMaxFit=0; |
Huw D M Davies | b4bdd81 | 2002-08-09 00:55:33 +0000 | [diff] [blame] | 178 | |
Shachar Shemesh | 4ebb7b5 | 2002-06-14 23:29:16 +0000 | [diff] [blame] | 179 | GetCharacterPlacementW(hdc, str, count, 0, &gcp, GCP_REORDER ); |
Huw D M Davies | b4bdd81 | 2002-08-09 00:55:33 +0000 | [diff] [blame] | 180 | |
Shachar Shemesh | 4ebb7b5 | 2002-06-14 23:29:16 +0000 | [diff] [blame] | 181 | ret = dc->funcs->pExtTextOut(dc->physDev,x,y,flags|ETO_IGNORELANGUAGE, |
| 182 | lprect,gcp.lpOutString,count,lpDx); |
Huw D M Davies | b4bdd81 | 2002-08-09 00:55:33 +0000 | [diff] [blame] | 183 | HeapFree(GetProcessHeap(), 0, gcp.lpOutString); |
Shachar Shemesh | 4ebb7b5 | 2002-06-14 23:29:16 +0000 | [diff] [blame] | 184 | } else |
| 185 | ret = dc->funcs->pExtTextOut(dc->physDev,x,y,flags,lprect,str,count,lpDx); |
| 186 | } |
| 187 | GDI_ReleaseObj( hdc ); |
Alexandre Julliard | 2a2321b | 2000-08-19 21:38:55 +0000 | [diff] [blame] | 188 | } |
| 189 | return ret; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 190 | } |
| 191 | |
| 192 | |
| 193 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 194 | * TextOutA (GDI32.@) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 195 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 196 | BOOL WINAPI TextOutA( HDC hdc, INT x, INT y, LPCSTR str, INT count ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 197 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 198 | return ExtTextOutA( hdc, x, y, 0, NULL, str, count, NULL ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 199 | } |
| 200 | |
| 201 | |
| 202 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 203 | * TextOutW (GDI32.@) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 204 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 205 | BOOL WINAPI TextOutW(HDC hdc, INT x, INT y, LPCWSTR str, INT count) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 206 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 207 | return ExtTextOutW( hdc, x, y, 0, NULL, str, count, NULL ); |
Alexandre Julliard | aca0578 | 1994-10-17 18:12:41 +0000 | [diff] [blame] | 208 | } |
| 209 | |
| 210 | |
Alexandre Julliard | 5819953 | 1994-04-21 01:20:00 +0000 | [diff] [blame] | 211 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 212 | * GetTextCharset [GDI32.@] Gets character set for font in DC |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 213 | * |
| 214 | * NOTES |
| 215 | * Should it return a UINT32 instead of an INT32? |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 216 | * => YES, as GetTextCharsetInfo returns UINT32 |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 217 | * |
| 218 | * RETURNS |
| 219 | * Success: Character set identifier |
| 220 | * Failure: DEFAULT_CHARSET |
Alexandre Julliard | 33072e1 | 1997-06-29 18:08:02 +0000 | [diff] [blame] | 221 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 222 | UINT WINAPI GetTextCharset( |
| 223 | HDC hdc) /* [in] Handle to device context */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 224 | { |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 225 | /* MSDN docs say this is equivalent */ |
| 226 | return GetTextCharsetInfo(hdc, NULL, 0); |
Alexandre Julliard | 33072e1 | 1997-06-29 18:08:02 +0000 | [diff] [blame] | 227 | } |
| 228 | |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 229 | |
| 230 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 231 | * GetTextCharsetInfo [GDI32.@] Gets character set for font |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 232 | * |
| 233 | * NOTES |
| 234 | * Should csi be an LPFONTSIGNATURE instead of an LPCHARSETINFO? |
| 235 | * Should it return a UINT32 instead of an INT32? |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 236 | * => YES and YES, from win32.hlp from Borland |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 237 | * |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 238 | * This returns the actual charset selected by the driver rather than the |
| 239 | * value in lf.lfCharSet during CreateFont, to get that use |
| 240 | * GetObject(GetCurrentObject(...),...) |
| 241 | * |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 242 | * RETURNS |
| 243 | * Success: Character set identifier |
| 244 | * Failure: DEFAULT_CHARSET |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 245 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 246 | UINT WINAPI GetTextCharsetInfo( |
Patrik Stridvall | 2b3aa61 | 2000-12-01 23:58:28 +0000 | [diff] [blame] | 247 | HDC hdc, /* [in] Handle to device context */ |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 248 | LPFONTSIGNATURE fs, /* [out] Pointer to struct to receive data */ |
| 249 | DWORD flags) /* [in] Reserved - must be 0 */ |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 250 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 251 | UINT charSet = DEFAULT_CHARSET; |
Guy Albertelli | 5329217 | 1999-01-24 09:50:09 +0000 | [diff] [blame] | 252 | CHARSETINFO csinfo; |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 253 | TEXTMETRICW tm; |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 254 | |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 255 | if(!GetTextMetricsW(hdc, &tm)) return DEFAULT_CHARSET; |
| 256 | charSet = tm.tmCharSet; |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 257 | |
| 258 | if (fs != NULL) { |
Marcus Meissner | 03479f8 | 1999-01-28 10:06:38 +0000 | [diff] [blame] | 259 | if (!TranslateCharsetInfo((LPDWORD)charSet, &csinfo, TCI_SRCCHARSET)) |
Huw D M Davies | fef698c | 2001-10-10 20:25:04 +0000 | [diff] [blame] | 260 | return DEFAULT_CHARSET; |
Guy Albertelli | 5329217 | 1999-01-24 09:50:09 +0000 | [diff] [blame] | 261 | memcpy(fs, &csinfo.fs, sizeof(FONTSIGNATURE)); |
Alexandre Julliard | 44ed71f | 1997-12-21 19:17:50 +0000 | [diff] [blame] | 262 | } |
Gael de Chalendar | d5af017 | 1998-11-22 12:19:49 +0000 | [diff] [blame] | 263 | return charSet; |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 264 | } |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 265 | |
| 266 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 267 | * PolyTextOutA (GDI32.@) |
| 268 | * |
| 269 | * Draw several Strings |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 270 | */ |
| 271 | BOOL WINAPI PolyTextOutA ( |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 272 | HDC hdc, /* [in] Handle to device context */ |
Patrik Stridvall | 2b3aa61 | 2000-12-01 23:58:28 +0000 | [diff] [blame] | 273 | PPOLYTEXTA pptxt, /* [in] Array of strings */ |
| 274 | INT cStrings /* [in] Number of strings in array */ |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 275 | ) |
| 276 | { |
| 277 | FIXME("stub!\n"); |
| 278 | SetLastError ( ERROR_CALL_NOT_IMPLEMENTED ); |
| 279 | return 0; |
| 280 | } |
| 281 | |
| 282 | |
| 283 | |
| 284 | /*********************************************************************** |
Patrik Stridvall | d0a4177 | 2001-02-14 23:11:17 +0000 | [diff] [blame] | 285 | * PolyTextOutW (GDI32.@) |
| 286 | * |
| 287 | * Draw several Strings |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 288 | */ |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 289 | BOOL WINAPI PolyTextOutW ( |
| 290 | HDC hdc, /* [in] Handle to device context */ |
Patrik Stridvall | 2b3aa61 | 2000-12-01 23:58:28 +0000 | [diff] [blame] | 291 | PPOLYTEXTW pptxt, /* [in] Array of strings */ |
| 292 | INT cStrings /* [in] Number of strings in array */ |
Peter Ganten | 87d95b7 | 1999-09-19 14:17:14 +0000 | [diff] [blame] | 293 | ) |
| 294 | { |
| 295 | FIXME("stub!\n"); |
| 296 | SetLastError ( ERROR_CALL_NOT_IMPLEMENTED ); |
| 297 | return 0; |
| 298 | } |