2 * X11 physical font definitions
4 * Copyright 1997 Alex Korobka
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.
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.
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
21 #ifndef __WINE_X11FONT_H
22 #define __WINE_X11FONT_H
28 /* this is a part of the font resource header, should
29 * make it easier to implement dynamic softfont loading */
38 INT16 dfInternalLeading;
39 INT16 dfExternalLeading;
47 CHAR dfPitchAndFamily;
57 } IFONTINFO16, *LPIFONTINFO16;
63 #define FI_POLYWEIGHT 0x0001
64 #define FI_POLYSLANT 0x0002
65 #define FI_OBLIQUE 0x0004
66 #define FI_SCALABLE 0x0008
67 #define FI_FW_BOOK 0x0010
68 #define FI_FW_DEMI 0x0020
69 #define FI_VARIABLEPITCH 0x0040
70 #define FI_FIXEDPITCH 0x0080
72 #define FI_FIXEDEX 0x1000
73 #define FI_NORMAL 0x2000
74 #define FI_SUBSET 0x4000
75 #define FI_TRUETYPE 0x8000
80 #define FI_ENC_ISO8859 1
81 #define FI_ENC_ISO646 2
82 #define FI_ENC_MICROSOFT 3
84 #define FI_ENC_ASCII 5
85 #define FI_ENC_VISCII 6
87 #define FI_ENC_TIS620 8
92 X11DRV_CPTABLE_UNICODE,
97 X11DRV_CPTABLE_SYMBOL,
101 typedef struct tagFontInfo
103 struct tagFontInfo* next;
108 WORD internal_charset;
110 /* LFD parameters can be quite different from the actual metrics */
113 UINT16 lfd_resolution;
117 /* Font resource list for EnumFont() purposes */
119 #define FR_SOFTFONT 0x1000 /* - .FON or .FOT file */
120 #define FR_SOFTRESOURCE 0x2000 /* - resource handle */
121 #define FR_REMOVED 0x4000 /* delayed remove */
122 #define FR_NAMESET 0x8000
124 #define LFD_FIELDS 14
131 const char* set_width;
132 const char* add_style;
133 const char* pixel_size;
134 const char* point_size;
135 const char* resolution_x;
136 const char* resolution_y;
138 const char* average_width;
139 const char* charset_registry;
140 const char* charset_encoding;
143 typedef struct tagFontResource
145 struct tagFontResource* next;
152 HANDLE hOwner; /* For FR_SOFTFONT/FR_SOFTRESOURCE fonts */
153 CHAR lfFaceName[LF_FACESIZE];
157 float a,b,c,d; /* pixelsize matrix, FIXME: switch to MAT2 format */
158 unsigned long RAW_ASCENT;
159 unsigned long RAW_DESCENT;
165 #define FO_RESOURCE_MASK 0x000F
166 #define FO_SYSTEM 0x0001 /* resident in cache */
167 #define FO_SOFTFONT 0x0002 /* installed at runtime */
168 #define FO_SHARED 0x0004 /* MITSHM */
169 #define FO_REMOVED 0x0008 /* remove when count falls to 0 */
171 #define FO_MATCH_MASK 0x00F0
172 #define FO_MATCH_NORASTER 0x0010
173 #define FO_MATCH_PAF 0x0020
174 #define FO_MATCH_XYINDEP 0x0040
176 #define FO_SYNTH_MASK 0xFF00
177 #define FO_SYNTH_HEIGHT 0x2000
178 #define FO_SYNTH_WIDTH 0x4000
179 #define FO_SYNTH_ROTATE 0x8000
180 #define FO_SYNTH_BOLD 0x0100
181 #define FO_SYNTH_ITALIC 0x0200
182 #define FO_SYNTH_UNDERLINE 0x0400
183 #define FO_SYNTH_STRIKEOUT 0x0800
185 /* Realized screen font */
187 #define X11FONT_REFOBJS_MAX 4
191 XFontStruct* fs; /* text metrics */
192 fontResource* fr; /* font family */
193 fontInfo* fi; /* font instance info */
194 Pixmap* lpPixmap; /* optional character bitmasks for synth fonts */
195 X_PHYSFONT prefobjs[X11FONT_REFOBJS_MAX]; /* font objects for DBCS charsets */
197 XFONTTRANS *lpX11Trans; /* Info for X11R6 transform */
198 float rescale; /* Rescale for large fonts */
199 INT16 foInternalLeading;
200 INT16 foAvgCharWidth;
201 INT16 foMaxCharWidth;
204 /* font cache housekeeping */
219 WORD internal_charset;
224 LPLOGFONT16 lpLogFontParam;
225 FONTENUMPROC16 lpEnumFunc;
228 LPNEWTEXTMETRICEX16 lpTextMetric;
229 LPENUMLOGFONTEX16 lpLogFont;
230 SEGPTR segTextMetric;
236 LPLOGFONTW lpLogFontParam;
237 FONTENUMPROCEXW lpEnumFunc;
240 LPNEWTEXTMETRICEXW lpTextMetric;
241 LPENUMLOGFONTEXW lpLogFont;
245 extern fontObject* XFONT_GetFontObject( X_PHYSFONT pFont );
246 extern XFontStruct* XFONT_GetFontStruct( X_PHYSFONT pFont );
247 extern LPIFONTINFO16 XFONT_GetFontInfo( X_PHYSFONT pFont );
249 /* internal charset(hibyte must be set) */
250 /* lobyte is DEFAULT_CHARSET(=0). */
251 #define X11FONT_JISX0201_CHARSET 0x100
252 #define X11FONT_JISX0212_CHARSET 0x200
254 typedef struct tagX11DRV_CP
256 WORD (*penum_subfont_charset)( UINT index );
257 XChar2b* (*punicode_to_char2b)( fontObject* pfo,
258 LPCWSTR lpwstr, UINT count );
259 void (*pDrawString)( fontObject* pfo, Display* pdisp, Drawable d, GC gc,
260 int x, int y, XChar2b* pstr, int count );
261 int (*pTextWidth)( fontObject* pfo, XChar2b* pstr, int count );
262 void (*pDrawText)( fontObject* pfo, Display* pdisp, Drawable d, GC gc,
263 int x, int y, XTextItem16* pitems, int count );
264 void (*pTextExtents)( fontObject* pfo, XChar2b* pstr, int count,
265 int* pdir, int* pascent, int* pdescent,
267 void (*pGetTextMetricsA)( fontObject* pfo, LPTEXTMETRICA pTM );
270 extern const X11DRV_CP X11DRV_cptable[X11DRV_CPTABLE_COUNT];
272 #endif /* __WINE_X11FONT_H */