blob: cde280e4b3499f8ba7197cec0b4c42945bb9895d [file] [log] [blame]
Alexandre Julliard23946ad1997-06-16 17:43:53 +00001/*
2 * X11 physical font definitions
3 *
4 * Copyright 1997 Alex Korobka
5 */
6
7#ifndef __WINE_X11FONT_H
8#define __WINE_X11FONT_H
9
10#include "gdi.h"
Huw D M Davies9c68faa1998-11-25 12:36:03 +000011#include "x11drv.h"
Patrik Stridvallc7a8dde1999-04-25 12:36:53 +000012#include "pshpack1.h"
Alexandre Julliard23946ad1997-06-16 17:43:53 +000013
14/* this is a part of the font resource header, should
15 * make it easier to implement dynamic softfont loading */
16
17typedef struct
18{
19 INT16 dfType;
20 INT16 dfPoints;
21 INT16 dfVertRes;
22 INT16 dfHorizRes;
23 INT16 dfAscent;
24 INT16 dfInternalLeading;
25 INT16 dfExternalLeading;
26 CHAR dfItalic;
27 CHAR dfUnderline;
28 CHAR dfStrikeOut;
29 INT16 dfWeight;
Douglas Ridgwayab9e8bc1999-01-01 18:41:22 +000030 BYTE dfCharSet;
Alexandre Julliard23946ad1997-06-16 17:43:53 +000031 INT16 dfPixWidth;
32 INT16 dfPixHeight;
33 CHAR dfPitchAndFamily;
34 INT16 dfAvgWidth;
35 INT16 dfMaxWidth;
36 CHAR dfFirstChar;
37 CHAR dfLastChar;
38 CHAR dfDefaultChar;
39 CHAR dfBreakChar;
40 INT16 dfWidthBytes;
41 LPCSTR dfDevice;
42 LPCSTR dfFace;
43} IFONTINFO16, *LPIFONTINFO16;
44
Patrik Stridvallc7a8dde1999-04-25 12:36:53 +000045#include "poppack.h"
Alexandre Julliard23946ad1997-06-16 17:43:53 +000046
47/* internal flags */
48
49#define FI_POLYWEIGHT 0x0001
50#define FI_POLYSLANT 0x0002
51#define FI_OBLIQUE 0x0004
52#define FI_SCALABLE 0x0008
53#define FI_FW_BOOK 0x0010
54#define FI_FW_DEMI 0x0020
55#define FI_VARIABLEPITCH 0x0040
56#define FI_FIXEDPITCH 0x0080
57
Alexandre Julliard23946ad1997-06-16 17:43:53 +000058#define FI_FIXEDEX 0x1000
59#define FI_NORMAL 0x2000
60#define FI_SUBSET 0x4000
61#define FI_TRUETYPE 0x8000
62
Alex Korobka01d1a6a1998-12-26 19:42:02 +000063/* code pages */
64
65#define FI_ENC_ANSI 0
66#define FI_ENC_ISO8859 1
67#define FI_ENC_ISO646 2
68#define FI_ENC_MICROSOFT 3
69#define FI_ENC_KOI8 4
70#define FI_ENC_ASCII 5
71#define FI_ENC_VISCII 6
72#define FI_ENC_TCVN 7
73#define FI_ENC_TIS620 8
74
Hidenori Takeshimac86cb242000-08-14 17:25:13 +000075enum X11DRV_CPTABLE
76{
77 X11DRV_CPTABLE_SBCS,
78 X11DRV_CPTABLE_UNICODE,
79 X11DRV_CPTABLE_CP932,
80 X11DRV_CPTABLE_CP936,
81 X11DRV_CPTABLE_CP949,
82 X11DRV_CPTABLE_CP950,
Huw D M Davies8bf80212001-10-23 19:54:27 +000083 X11DRV_CPTABLE_SYMBOL,
Hidenori Takeshimac86cb242000-08-14 17:25:13 +000084 X11DRV_CPTABLE_COUNT
85};
86
Alexandre Julliard23946ad1997-06-16 17:43:53 +000087typedef struct tagFontInfo
88{
89 struct tagFontInfo* next;
90 UINT16 fi_flags;
Alex Korobka01d1a6a1998-12-26 19:42:02 +000091 UINT16 fi_encoding;
Dmitry Timoshkov2850b662000-06-10 04:44:12 +000092 UINT16 codepage;
Hidenori Takeshimac86cb242000-08-14 17:25:13 +000093 UINT16 cptable;
Hidenori Takeshima5b1b5122000-08-20 19:04:04 +000094 WORD internal_charset;
Alexandre Julliard23946ad1997-06-16 17:43:53 +000095
96 /* LFD parameters can be quite different from the actual metrics */
97
98 UINT16 lfd_height;
Alexandre Julliard23946ad1997-06-16 17:43:53 +000099 UINT16 lfd_resolution;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000100 IFONTINFO16 df;
101} fontInfo;
102
103/* Font resource list for EnumFont() purposes */
104
105#define FR_SOFTFONT 0x1000 /* - .FON or .FOT file */
106#define FR_SOFTRESOURCE 0x2000 /* - resource handle */
107#define FR_REMOVED 0x4000 /* delayed remove */
108#define FR_NAMESET 0x8000
109
Richard Cohen8dde3c71999-09-05 12:18:57 +0000110#define LFD_FIELDS 14
111typedef struct
112{
Hidenori Takeshimac86cb242000-08-14 17:25:13 +0000113 const char* foundry;
114 const char* family;
115 const char* weight;
116 const char* slant;
117 const char* set_width;
118 const char* add_style;
119 const char* pixel_size;
120 const char* point_size;
121 const char* resolution_x;
122 const char* resolution_y;
123 const char* spacing;
124 const char* average_width;
125 const char* charset_registry;
126 const char* charset_encoding;
Richard Cohen8dde3c71999-09-05 12:18:57 +0000127} LFD;
128
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000129typedef struct tagFontResource
130{
131 struct tagFontResource* next;
132 UINT16 fr_flags;
Alex Korobka01d1a6a1998-12-26 19:42:02 +0000133 UINT16 fr_penalty;
134 UINT16 fi_count;
135 UINT16 fo_count;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000136 fontInfo* fi;
Richard Cohen8dde3c71999-09-05 12:18:57 +0000137 LFD* resource;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000138 HANDLE hOwner; /* For FR_SOFTFONT/FR_SOFTRESOURCE fonts */
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000139 CHAR lfFaceName[LF_FACESIZE];
140} fontResource;
141
Alexandre Julliard642d3131998-07-12 19:29:36 +0000142typedef struct {
Alex Korobka01d1a6a1998-12-26 19:42:02 +0000143 float a,b,c,d; /* pixelsize matrix, FIXME: switch to MAT2 format */
Alexandre Julliard642d3131998-07-12 19:29:36 +0000144 unsigned long RAW_ASCENT;
145 unsigned long RAW_DESCENT;
146 float pixelsize;
147 float ascent;
148 float descent;
149} XFONTTRANS;
150
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000151#define FO_RESOURCE_MASK 0x000F
152#define FO_SYSTEM 0x0001 /* resident in cache */
153#define FO_SOFTFONT 0x0002 /* installed at runtime */
154#define FO_SHARED 0x0004 /* MITSHM */
155#define FO_REMOVED 0x0008 /* remove when count falls to 0 */
156
157#define FO_MATCH_MASK 0x00F0
158#define FO_MATCH_NORASTER 0x0010
159#define FO_MATCH_PAF 0x0020
160#define FO_MATCH_XYINDEP 0x0040
161
162#define FO_SYNTH_MASK 0xFF00
163#define FO_SYNTH_HEIGHT 0x2000
164#define FO_SYNTH_WIDTH 0x4000
165#define FO_SYNTH_ROTATE 0x8000
166#define FO_SYNTH_BOLD 0x0100
167#define FO_SYNTH_ITALIC 0x0200
168#define FO_SYNTH_UNDERLINE 0x0400
169#define FO_SYNTH_STRIKEOUT 0x0800
170
171/* Realized screen font */
172
Hidenori Takeshima67ccc082000-08-15 12:01:47 +0000173#define X11FONT_REFOBJS_MAX 4
174
175typedef struct
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000176{
177 XFontStruct* fs; /* text metrics */
178 fontResource* fr; /* font family */
179 fontInfo* fi; /* font instance info */
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000180 Pixmap* lpPixmap; /* optional character bitmasks for synth fonts */
Hidenori Takeshima67ccc082000-08-15 12:01:47 +0000181 X_PHYSFONT prefobjs[X11FONT_REFOBJS_MAX]; /* font objects for DBCS charsets */
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000182
Alexandre Julliard642d3131998-07-12 19:29:36 +0000183 XFONTTRANS *lpX11Trans; /* Info for X11R6 transform */
Huw D M Davies28896ee1999-07-24 12:10:23 +0000184 float rescale; /* Rescale for large fonts */
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000185 INT16 foInternalLeading;
186 INT16 foAvgCharWidth;
Alexandre Julliard642d3131998-07-12 19:29:36 +0000187 INT16 foMaxCharWidth;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000188 UINT16 fo_flags;
189
190 /* font cache housekeeping */
191
192 UINT16 count;
193 UINT16 lru;
194 UINT16 lfchecksum;
195 LOGFONT16 lf;
196} fontObject;
197
198typedef struct
199{
200 fontResource* pfr;
201 fontInfo* pfi;
202 UINT16 height;
203 UINT16 flags;
204 LPLOGFONT16 plf;
Hidenori Takeshima5b1b5122000-08-20 19:04:04 +0000205 WORD internal_charset;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000206} fontMatch;
207
208typedef struct
209{
210 LPLOGFONT16 lpLogFontParam;
211 FONTENUMPROC16 lpEnumFunc;
212 LPARAM lpData;
213
214 LPNEWTEXTMETRICEX16 lpTextMetric;
215 LPENUMLOGFONTEX16 lpLogFont;
216 SEGPTR segTextMetric;
217 SEGPTR segLogFont;
218} fontEnum16;
219
220typedef struct
221{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000222 LPLOGFONTW lpLogFontParam;
Ulrich Czekallae6ab9d31999-10-24 17:26:45 +0000223 FONTENUMPROCEXW lpEnumFunc;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000224 LPARAM lpData;
225
Alexandre Julliarda3960291999-02-26 11:11:13 +0000226 LPNEWTEXTMETRICEXW lpTextMetric;
227 LPENUMLOGFONTEXW lpLogFont;
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000228 DWORD dwFlags;
229} fontEnum32;
230
231extern fontObject* XFONT_GetFontObject( X_PHYSFONT pFont );
232extern XFontStruct* XFONT_GetFontStruct( X_PHYSFONT pFont );
233extern LPIFONTINFO16 XFONT_GetFontInfo( X_PHYSFONT pFont );
234
Hidenori Takeshima5b1b5122000-08-20 19:04:04 +0000235/* internal charset(hibyte must be set) */
236/* lobyte is DEFAULT_CHARSET(=0). */
237#define X11FONT_JISX0201_CHARSET 0x100
238#define X11FONT_JISX0212_CHARSET 0x200
239
Hidenori Takeshimac86cb242000-08-14 17:25:13 +0000240typedef struct tagX11DRV_CP
241{
Hidenori Takeshima5b1b5122000-08-20 19:04:04 +0000242 WORD (*penum_subfont_charset)( UINT index );
Hidenori Takeshimac86cb242000-08-14 17:25:13 +0000243 XChar2b* (*punicode_to_char2b)( fontObject* pfo,
244 LPCWSTR lpwstr, UINT count );
245 void (*pDrawString)( fontObject* pfo, Display* pdisp, Drawable d, GC gc,
246 int x, int y, XChar2b* pstr, int count );
247 int (*pTextWidth)( fontObject* pfo, XChar2b* pstr, int count );
248 void (*pDrawText)( fontObject* pfo, Display* pdisp, Drawable d, GC gc,
249 int x, int y, XTextItem16* pitems, int count );
250 void (*pTextExtents)( fontObject* pfo, XChar2b* pstr, int count,
251 int* pdir, int* pascent, int* pdescent,
252 int* pwidth );
Hidenori Takeshimab7392f52000-08-18 23:44:58 +0000253 void (*pGetTextMetricsA)( fontObject* pfo, LPTEXTMETRICA pTM );
Hidenori Takeshimac86cb242000-08-14 17:25:13 +0000254} X11DRV_CP;
255
256extern const X11DRV_CP X11DRV_cptable[X11DRV_CPTABLE_COUNT];
257
Patrik Stridvall0f8bc5b1999-04-22 16:27:50 +0000258#endif /* __WINE_X11FONT_H */