VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/fontsproto-2.1.3/X11/fonts/fontstruct.h@ 99743

Last change on this file since 99743 was 98146, checked in by vboxsync, 2 years ago

Additions/x11: OSE export fixing for various X proto headers.

  • Property svn:eol-style set to native
File size: 9.2 KB
Line 
1/***********************************************************
2Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
3
4 All Rights Reserved
5
6Permission to use, copy, modify, and distribute this software and its
7documentation for any purpose and without fee is hereby granted,
8provided that the above copyright notice appear in all copies and that
9both that copyright notice and this permission notice appear in
10supporting documentation, and that the name of Digital not be
11used in advertising or publicity pertaining to distribution of the
12software without specific, written prior permission.
13
14DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20SOFTWARE.
21
22******************************************************************/
23
24#ifndef FONTSTR_H
25#define FONTSTR_H
26
27#include <X11/Xproto.h>
28#include "font.h"
29#include <X11/Xfuncproto.h>
30#include <X11/Xdefs.h>
31
32/*
33 * This version of the server font data strucutre is only for describing
34 * the in memory data structure. The file structure is not necessarily a
35 * copy of this. That is up to the compiler and the OS layer font loading
36 * machinery.
37 */
38
39#define GLYPHPADOPTIONS 4 /* 1, 2, 4, or 8 */
40
41typedef struct _FontProp {
42 long name;
43 long value; /* assumes ATOM is not larger than INT32 */
44} FontPropRec;
45
46typedef struct _FontResolution {
47 unsigned short x_resolution;
48 unsigned short y_resolution;
49 unsigned short point_size;
50} FontResolutionRec;
51
52typedef struct _ExtentInfo {
53 DrawDirection drawDirection;
54 int fontAscent;
55 int fontDescent;
56 int overallAscent;
57 int overallDescent;
58 int overallWidth;
59 int overallLeft;
60 int overallRight;
61} ExtentInfoRec;
62
63typedef struct _CharInfo {
64 xCharInfo metrics; /* info preformatted for Queries */
65 char *bits; /* pointer to glyph image */
66} CharInfoRec;
67
68/*
69 * Font is created at font load time. It is specific to a single encoding.
70 * e.g. not all of the glyphs in a font may be part of a single encoding.
71 */
72
73typedef struct _FontInfo {
74 unsigned short firstCol;
75 unsigned short lastCol;
76 unsigned short firstRow;
77 unsigned short lastRow;
78 unsigned short defaultCh;
79 unsigned int noOverlap:1;
80 unsigned int terminalFont:1;
81 unsigned int constantMetrics:1;
82 unsigned int constantWidth:1;
83 unsigned int inkInside:1;
84 unsigned int inkMetrics:1;
85 unsigned int allExist:1;
86 unsigned int drawDirection:2;
87 unsigned int cachable:1;
88 unsigned int anamorphic:1;
89 short maxOverlap;
90 short pad;
91 xCharInfo maxbounds;
92 xCharInfo minbounds;
93 xCharInfo ink_maxbounds;
94 xCharInfo ink_minbounds;
95 short fontAscent;
96 short fontDescent;
97 int nprops;
98 FontPropPtr props;
99 char *isStringProp;
100} FontInfoRec;
101
102typedef struct _Font {
103 int refcnt;
104 FontInfoRec info;
105 char bit;
106 char byte;
107 char glyph;
108 char scan;
109 fsBitmapFormat format;
110 int (*get_glyphs) (FontPtr /* font */,
111 unsigned long /* count */,
112 unsigned char * /* chars */,
113 FontEncoding /* encoding */,
114 unsigned long * /* count */,
115 CharInfoPtr * /* glyphs */);
116 int (*get_metrics) (FontPtr /* font */,
117 unsigned long /* count */,
118 unsigned char * /* chars */,
119 FontEncoding /* encoding */,
120 unsigned long * /* count */,
121 xCharInfo ** /* glyphs */);
122 void (*unload_font) (FontPtr /* font */);
123 void (*unload_glyphs) (FontPtr /* font */);
124 FontPathElementPtr fpe;
125 void *svrPrivate;
126 void *fontPrivate;
127 void *fpePrivate;
128 int maxPrivate;
129 void **devPrivates;
130} FontRec;
131
132#define FontGetPrivate(pFont,n) ((n) > (pFont)->maxPrivate ? (void *) 0 : \
133 (pFont)->devPrivates[n])
134
135#define FontSetPrivate(pFont,n,ptr) ((n) > (pFont)->maxPrivate ? \
136 _FontSetNewPrivate (pFont, n, ptr) : \
137 ((((pFont)->devPrivates[n] = (ptr)) != 0) || TRUE))
138
139typedef struct _FontNames {
140 int nnames;
141 int size;
142 int *length;
143 char **names;
144} FontNamesRec;
145
146
147/* External view of font paths */
148typedef struct _FontPathElement {
149 int name_length;
150#if FONT_PATH_ELEMENT_NAME_CONST
151 const
152#endif
153 char *name;
154 int type;
155 int refcount;
156 void *private;
157} FontPathElementRec;
158
159typedef Bool (*NameCheckFunc) (const char *name);
160typedef int (*InitFpeFunc) (FontPathElementPtr fpe);
161typedef int (*FreeFpeFunc) (FontPathElementPtr fpe);
162typedef int (*ResetFpeFunc) (FontPathElementPtr fpe);
163typedef int (*OpenFontFunc) ( void *client,
164 FontPathElementPtr fpe,
165 Mask flags,
166 const char* name,
167 int namelen,
168 fsBitmapFormat format,
169 fsBitmapFormatMask fmask,
170 XID id,
171 FontPtr* pFont,
172 char** aliasName,
173 FontPtr non_cachable_font);
174typedef void (*CloseFontFunc) (FontPathElementPtr fpe, FontPtr pFont);
175typedef int (*ListFontsFunc) (void *client,
176 FontPathElementPtr fpe,
177 const char* pat,
178 int len,
179 int max,
180 FontNamesPtr names);
181
182typedef int (*StartLfwiFunc) (void *client,
183 FontPathElementPtr fpe,
184 const char* pat,
185 int len,
186 int max,
187 void ** privatep);
188
189typedef int (*NextLfwiFunc) (void *client,
190 FontPathElementPtr fpe,
191 char** name,
192 int* namelen,
193 FontInfoPtr* info,
194 int* numFonts,
195 void *private);
196
197typedef int (*WakeupFpeFunc) (FontPathElementPtr fpe,
198 unsigned long* LastSelectMask);
199
200typedef void (*ClientDiedFunc) (void *client,
201 FontPathElementPtr fpe);
202
203typedef int (*LoadGlyphsFunc) (void *client,
204 FontPtr pfont,
205 Bool range_flag,
206 unsigned int nchars,
207 int item_size,
208 unsigned char* data);
209
210typedef int (*StartLaFunc) (void *client,
211 FontPathElementPtr fpe,
212 const char* pat,
213 int len,
214 int max,
215 void ** privatep);
216
217typedef int (*NextLaFunc) (void *client,
218 FontPathElementPtr fpe,
219 char** namep,
220 int* namelenp,
221 char** resolvedp,
222 int* resolvedlenp,
223 void *private);
224
225typedef void (*SetPathFunc)(void);
226
227typedef struct _FPEFunctions {
228 NameCheckFunc name_check;
229 InitFpeFunc init_fpe;
230 ResetFpeFunc reset_fpe;
231 FreeFpeFunc free_fpe;
232 OpenFontFunc open_font;
233 CloseFontFunc close_font;
234 ListFontsFunc list_fonts;
235 StartLaFunc start_list_fonts_and_aliases;
236 NextLaFunc list_next_font_or_alias;
237 StartLfwiFunc start_list_fonts_with_info;
238 NextLfwiFunc list_next_font_with_info;
239 WakeupFpeFunc wakeup_fpe;
240 ClientDiedFunc client_died;
241 /* for load_glyphs, range_flag = 0 ->
242 nchars = # of characters in data
243 item_size = bytes/char
244 data = list of characters
245 range_flag = 1 ->
246 nchars = # of fsChar2b's in data
247 item_size is ignored
248 data = list of fsChar2b's */
249 LoadGlyphsFunc load_glyphs;
250 SetPathFunc set_path_hook;
251} FPEFunctionsRec, FPEFunctions;
252
253/*
254 * Various macros for computing values based on contents of
255 * the above structures
256 */
257
258#define GLYPHWIDTHPIXELS(pci) \
259 ((pci)->metrics.rightSideBearing - (pci)->metrics.leftSideBearing)
260
261#define GLYPHHEIGHTPIXELS(pci) \
262 ((pci)->metrics.ascent + (pci)->metrics.descent)
263
264#define GLYPHWIDTHBYTES(pci) (((GLYPHWIDTHPIXELS(pci))+7) >> 3)
265
266#define GLYPHWIDTHPADDED(bc) (((bc)+7) & ~0x7)
267
268#define BYTES_PER_ROW(bits, nbytes) \
269 ((nbytes) == 1 ? (((bits)+7)>>3) /* pad to 1 byte */ \
270 :(nbytes) == 2 ? ((((bits)+15)>>3)&~1) /* pad to 2 bytes */ \
271 :(nbytes) == 4 ? ((((bits)+31)>>3)&~3) /* pad to 4 bytes */ \
272 :(nbytes) == 8 ? ((((bits)+63)>>3)&~7) /* pad to 8 bytes */ \
273 : 0)
274
275#define BYTES_FOR_GLYPH(ci,pad) (GLYPHHEIGHTPIXELS(ci) * \
276 BYTES_PER_ROW(GLYPHWIDTHPIXELS(ci),pad))
277/*
278 * Macros for computing different bounding boxes for fonts; from
279 * the font protocol
280 */
281
282#define FONT_MAX_ASCENT(pi) ((pi)->fontAscent > (pi)->ink_maxbounds.ascent ? \
283 (pi)->fontAscent : (pi)->ink_maxbounds.ascent)
284#define FONT_MAX_DESCENT(pi) ((pi)->fontDescent > (pi)->ink_maxbounds.descent ? \
285 (pi)->fontDescent : (pi)->ink_maxbounds.descent)
286#define FONT_MAX_HEIGHT(pi) (FONT_MAX_ASCENT(pi) + FONT_MAX_DESCENT(pi))
287#define FONT_MIN_LEFT(pi) ((pi)->ink_minbounds.leftSideBearing < 0 ? \
288 (pi)->ink_minbounds.leftSideBearing : 0)
289#define FONT_MAX_RIGHT(pi) ((pi)->ink_maxbounds.rightSideBearing > \
290 (pi)->ink_maxbounds.characterWidth ? \
291 (pi)->ink_maxbounds.rightSideBearing : \
292 (pi)->ink_maxbounds.characterWidth)
293#define FONT_MAX_WIDTH(pi) (FONT_MAX_RIGHT(pi) - FONT_MIN_LEFT(pi))
294
295#include "fontproto.h"
296
297#endif /* FONTSTR_H */
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette