Release 980301
[wine] / include / x11font.h
1 /*
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"
11
12 #pragma pack(1)
13
14 /* this is a part of the font resource header, should 
15  * make it easier to implement dynamic softfont loading */
16
17 typedef 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;
30     CHAR        dfCharSet;
31     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
45 #pragma pack(4)
46
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
58 #define FI_ENC_ISO8859      0x0100      /* iso8859-*    */
59 #define FI_ENC_ISO646       0x0200      /* iso646*      */
60 #define FI_ENC_ANSI         0x0400      /* ansi-0       */
61 #define FI_ENC_MSCODEPAGE   0x0800      /* cp125-*      */
62
63 #define FI_FIXEDEX          0x1000
64 #define FI_NORMAL           0x2000
65 #define FI_SUBSET           0x4000
66 #define FI_TRUETYPE         0x8000
67
68 typedef struct tagFontInfo
69 {
70     struct tagFontInfo*         next;
71     UINT16                      fi_flags;
72
73  /* LFD parameters can be quite different from the actual metrics */
74
75     UINT16                      lfd_height;
76     UINT16                      lfd_width;
77     UINT16                      lfd_decipoints;
78     UINT16                      lfd_resolution;
79
80     IFONTINFO16                 df;
81 } fontInfo;
82
83 /* Font resource list for EnumFont() purposes */
84
85 #define FR_SOFTFONT         0x1000              /* - .FON or .FOT file */
86 #define FR_SOFTRESOURCE     0x2000              /* - resource handle */
87 #define FR_REMOVED          0x4000              /* delayed remove */
88 #define FR_NAMESET          0x8000
89
90 typedef struct tagFontResource
91 {
92   struct tagFontResource*       next;
93   UINT16                        fr_flags;
94   UINT16                        count;
95   fontInfo*                     fi;
96   char*                         resource;
97   CHAR                          lfFaceName[LF_FACESIZE];
98 } fontResource;
99
100 #define FO_RESOURCE_MASK        0x000F
101 #define FO_SYSTEM               0x0001          /* resident in cache */
102 #define FO_SOFTFONT             0x0002          /* installed at runtime */
103 #define FO_SHARED               0x0004          /* MITSHM */
104 #define FO_REMOVED              0x0008          /* remove when count falls to 0 */
105
106 #define FO_MATCH_MASK           0x00F0
107 #define FO_MATCH_NORASTER       0x0010
108 #define FO_MATCH_PAF            0x0020
109 #define FO_MATCH_XYINDEP        0x0040
110
111 #define FO_SYNTH_MASK           0xFF00
112 #define FO_SYNTH_HEIGHT         0x2000
113 #define FO_SYNTH_WIDTH          0x4000
114 #define FO_SYNTH_ROTATE         0x8000
115 #define FO_SYNTH_BOLD           0x0100
116 #define FO_SYNTH_ITALIC         0x0200
117 #define FO_SYNTH_UNDERLINE      0x0400
118 #define FO_SYNTH_STRIKEOUT      0x0800
119
120 /* Realized screen font */
121
122 typedef struct 
123 {
124   XFontStruct*          fs;                     /* text metrics */
125   fontResource*         fr;                     /* font family */
126   fontInfo*             fi;                     /* font instance info */
127   LPMAT2*               lpXForm;                /* optional transformation matrix */
128   Pixmap*               lpPixmap;               /* optional character bitmasks for synth fonts */
129
130   INT16                 foInternalLeading;
131   INT16                 foAvgCharWidth;
132   UINT16                fo_flags;
133
134   /* font cache housekeeping */
135
136   UINT16                count;
137   UINT16                lru;
138   UINT16                lfchecksum;
139   LOGFONT16             lf;
140 } fontObject;
141
142 typedef struct
143 {
144   fontResource*         pfr;
145   fontInfo*             pfi;
146   UINT16                height;
147   UINT16                flags;
148   LPLOGFONT16           plf;
149 } fontMatch;
150
151 typedef struct
152 {
153   LPLOGFONT16           lpLogFontParam;
154   FONTENUMPROC16        lpEnumFunc;
155   LPARAM                lpData;
156
157   LPNEWTEXTMETRICEX16   lpTextMetric;
158   LPENUMLOGFONTEX16     lpLogFont;
159   SEGPTR                segTextMetric;
160   SEGPTR                segLogFont;
161 } fontEnum16;
162
163 typedef struct
164 {
165   LPLOGFONT32W          lpLogFontParam;
166   FONTENUMPROC32W       lpEnumFunc;
167   LPARAM                lpData;
168
169   LPNEWTEXTMETRICEX32W  lpTextMetric;
170   LPENUMLOGFONTEX32W    lpLogFont;
171   DWORD                 dwFlags;
172 } fontEnum32;
173
174 extern fontObject* XFONT_GetFontObject( X_PHYSFONT pFont );
175 extern XFontStruct* XFONT_GetFontStruct( X_PHYSFONT pFont );
176 extern LPIFONTINFO16 XFONT_GetFontInfo( X_PHYSFONT pFont );
177
178 #endif __WINE_X11FONT_H 
179