Initial revision
[ssr] / StraySrc / Libraries / Steel / h / font
CommitLineData
2ee739cc 1/****************************************************************************
2 * This source file was written by Acorn Computers Limited. It is part of *
3 * the RISCOS library for writing applications in C for RISC OS. It may be *
4 * used freely in the creation of programs for Archimedes. It should be *
5 * used with Acorn's C Compiler Release 3 or later. *
6 * *
7 ***************************************************************************/
8
9/*
10 * Title : font.h
11 * Purpose: access to RISC OS font facilities
12 *
13 */
14
15# ifndef __font_h
16# define __font_h
17
18# ifndef __os_h
19# include "os.h"
20# endif
21
22# include "drawmod.h"
23
24typedef int font; /* abstract font handle */
25
26
27/* ---------------------------- font_cacheaddress --------------------------
28 * Description: Informs caller of font cache used and font cache size.
29 *
30 * Parameters: int *version -- version number
31 * int *cacheused -- amount of font cache used (in bytes)
32 * int *cachesize -- total size of font cache (in bytes)
33 * Returns: os_error* -- possible error condition
34 * Other Info: Version number is *100, so v.1.07 would be returned as 107.
35 *
36 */
37
38extern os_error * font_cacheaddress(int *version, int *cacheused, int *cachesize);
39
40
41/* ------------------------------- font_find -------------------------------
42 * Description: Gives caller a handle to font, given its name.
43 *
44 * Parameters: char *name -- the font name
45 * int xsize, ysize -- x/y point size (in 16ths of a point)
46 * int xres, yres -- x/y resolution in dots per inch
47 * font* -- the returned font handle
48 * Returns: Possible error condition.
49 * Other Info: none.
50 *
51 */
52
53extern os_error * font_find(
54 char* name,
55 int xsize, int ysize, /* in 16ths of a point */
56 int xres, int yres, /* dots per inch of resolution: 0->use default */
57 font*); /* result */
58
59
60/* ------------------------------- font_lose -------------------------------
61 * Description: Informs font manager that a font is no longer needed
62 *
63 * Parameters: font f -- the font
64 * Returns: possible error condition.
65 * Other Info: none.
66 *
67 */
68
69extern os_error * font_lose(font f);
70
71typedef struct font_def {
72 char name[16];
73 int xsize, ysize, xres, yres; /* as above */
74 int usage, age;
75} font_def;
76
77
78/* ------------------------------ font_readdef -----------------------------
79 * Description: Get details about a font, given its handle.
80 *
81 * Parameters: font -- the font handle
82 * font_def* -- pointer to buffer to hold returned details
83 * Returns: possible error condition.
84 * Other Info: This function fills in details re: font, into the supplied
85 * buffer(a variable of type 'font_def').
86 * fields of this buffer are as follows:
87 * name -- font name
88 * xsize, ysize -- x/y point size * 16
89 * xres, yres -- x/y resolution (dots per inch)
90 * usage -- number of times Font_FindFont has found
91 * the font minus number of times
92 * Font_LoseFont has been used on it
93 * age -- number of font accesses made since this
94 * one was last accessed.
95 *
96 */
97
98extern os_error * font_readdef(font, font_def*);
99
100typedef struct font_info {
101 int minx, miny, maxx, maxy;
102} font_info;
103
104
105/* ------------------------------- font_readinfo ---------------------------
106 * Description: Informs caller of minimal area covering any character in
107 * the font bounding box.
108 *
109 * Parameters: font -- the font handle
110 * font_info* -- pointer to buffer to hold returned details
111 * Returns: possible error condition.
112 * Other Info: Fills in details re: font in supplied buffer (variable of
113 * type 'font_info').
114 * fields of this buffer are as follows:
115 * minx -- min x coord in pixels (inclusive)
116 * maxx -- max x coord in pixels (inclusive)
117 * miny -- min y coord in pixels (exclusive)
118 * maxy -- max y coord in pixels (exclusive).
119 *
120 */
121
122extern os_error * font_readinfo(font, font_info*);
123
124
125typedef struct font_string {
126
127 char* s;
128 int x; /* inout, in 1/72000 inch */
129 int y; /* inout, in 1/72000 inch */
130 int split; /* inout: space char, or -1 */
131 /* on exit, = count of space or printable */
132 int term; /* inout, index into s */
133
134 } font_string;
135
136
137/* -------------------------------- font_strwidth --------------------------
138 * Description: Determine 'width' of string.
139 *
140 * Parameters: font_string *fs -- the string, with fields:
141 * s -- string itself
142 * x -- max x offset before termination
143 * y -- max y offset before termination
144 * split -- string split character
145 * term -- index of char to terminate by
146 * Returns: possible error condition.
147 * Other Info: On exit fs fields hold:
148 * s -- unchanged
149 * x -- x offset after printing string
150 * y -- y offset after printing string
151 * split -- no. of split chars found
152 * no. of printable chars if split was -1
153 * term -- index into string at which terminated.
154 *
155 */
156
157extern os_error * font_strwidth(font_string *fs);
158
159
160/* paint options */
161#define font_JUSTIFY 0x01 /* justify text */
162#define font_RUBOUT 0x02 /* rub-out box required */
163#define font_ABS 0x04 /* absolute co-ordinates */
164 /* 8 not used */
165#define font_OSCOORDS 0x10 /* os coords supplied (otherwise 1/72000 inch) */
166
167
168/* ------------------------------- font_paint -----------------------------
169 * Description: Paint the given string at coords x,y.
170 *
171 * Parameters: char * -- the string
172 * int options -- set using "paint options" defined above
173 * int x, y -- coords (either os or 1/72000 inch)
174 * Returns: possible error condition.
175 * Other Info: none.
176 *
177 */
178
179extern os_error * font_paint(char*, int options, int x, int y);
180
181
182/* ------------------------------- font_caret -----------------------------
183 * Description: Set colour, size and position of the caret.
184 *
185 * Parameters: int colour -- EORed onto screen
186 * int height -- in OS coordinates
187 * int flags -- bit 4 set ==> OS coords, else 1/72000 inch
188 * int x,y -- x/y coords
189 * Returns: possible error condition.
190 * Other Info: none.
191 *
192 */
193
194extern os_error *font_caret(int colour, int height, int flags, int x, int y);
195
196
197/* ---------------------------- font_converttoos ---------------------------
198 * Description: Converts coords in 1/72000 inch to OS units.
199 *
200 * Parameters: int x_inch, y_inch -- x/y coords in 1/72000 inch
201 * int *x_os, *y_os -- x/y coords in OS units
202 * Returns: possible error condition.
203 * Other Info: none.
204 *
205 */
206
207extern os_error *font_converttoos(int x_inch, int y_inch, int *x_os, int *y_os);
208
209
210/* --------------------------- font_converttopoints ------------------------
211 * Description: Converts OS units to 1/72000 inch.
212 *
213 * Parameters: int x_os, y_os -- x/y coords in OS units
214 * int *x_inch, *y_inch -- x/y coords in 1/72000 inch
215 * Returns: possible error condition.
216 * Other Info: none.
217 *
218 */
219
220extern os_error *font_converttopoints(int x_os, int y_os, int *x_inch, int *y_inch);
221
222
223/* ------------------------------- font_setfont ----------------------------
224 * Description: Sets up font used for subsequent painting or size-requests.
225 *
226 * Parameters: font -- the font handle
227 * Returns: possible error condition.
228 * Other Info: none.
229 *
230 */
231
232extern os_error * font_setfont(font);
233
234
235typedef struct font_state {
236
237 font f;
238 int back_colour;
239 int fore_colour;
240 int offset;
241
242 } font_state;
243
244
245/* --------------------------------- font_current --------------------------
246 * Description: Informs caller of current font state.
247 *
248 * Parameters: font_state *f -- pointer to buffer to hold font state
249 * Returns: possible error condition.
250 * Other Info: returned buffer(into variable of type 'font_state'):
251 * font f -- handle of current font
252 * int back_colour -- current background colour
253 * int fore_colour -- current foreground colour
254 * int offset -- foreground colour offset.
255 *
256 */
257
258extern os_error *font_current(font_state *f);
259
260
261/* -------------------------------- font_future ----------------------------
262 * Description: Informs caller of font characteristics after a future
263 * font_paint.
264 *
265 * Parameters: font_state *f -- pointer to buffer to hold font state
266 * Returns: possible error condition.
267 * Other Info: buffer contents:
268 * font f -- handle of font which would be selected
269 * int back_colour -- future background colour
270 * int fore_colour -- future foreground colour
271 * int offset -- foreground colour offset.
272 *
273 */
274
275extern os_error *font_future(font_state *f);
276
277
278/* ------------------------------- font_findcaret --------------------------
279 * Description: Informs caller of nearest point in a string to the caret
280 * position.
281 *
282 * Parameters: font_string *fs -- the string
283 * fields: char *s -- the string itself
284 * int x,y -- x/y coords of caret
285 * Returns: possible error condition.
286 * Other Info: returned fields of fs as in font_strwidth.
287 *
288 */
289
290extern os_error *font_findcaret(font_string *fs);
291
292
293/* ----------------------------- font_charbbox -----------------------------
294 * Description: Informs caller of bounding box of char in given font.
295 *
296 * Parameters: font -- the font handle
297 * char -- the ASCII character
298 * int options -- only relevant option if font_OSCOORDS
299 * font_info * -- pointer to buffer to hold font info
300 * Returns: possible error condition.
301 * Other Info: if OS coords are used and font has been scaled, box may
302 * be surrounded by area of blank pixels.
303 *
304 */
305
306extern os_error * font_charbbox(font, char, int options, font_info*);
307
308
309/* -------------------------- font_readscalefactor -------------------------
310 * Description: Informs caller of x and y scale factors used by font.
311 * manager for converting between OS coords and 1/72000 inch
312 *
313 * Parameters: int *x, *y -- returned scale factors
314 * Returns: possible error condition.
315 * Other Info: none.
316 *
317 */
318
319extern os_error *font_readscalefactor(int *x, int *y);
320
321
322/* ---------------------------- font_setscalefactor -----------------------
323 * Description: Sets the scale factors used by font manager.
324 *
325 * Parameters: int x,y -- the new scale factors
326 * Returns: possible error condition.
327 * Other Info: scale factors may have been changed by another application
328 * well-behaved applications save and restore scale factors.
329 *
330 */
331
332extern os_error *font_setscalefactor(int x, int y);
333
334
335/* ------------------------------- font_list -------------------------------
336 * Description: Gives name of an available font.
337 *
338 * Parameters: char* -- pointer to buffer to hold font name
339 * int* -- count of fonts found (0 on first call)
340 * Returns: possible error condition.
341 * Other Info: count is -1 if no more names
342 * typically used in loop until count == -1.
343 *
344 */
345
346extern os_error * font_list(char*, int*);
347
348
349/* ------------------------------ font_setcolour ---------------------------
350 * Description: Sets the current font(optionally), changes foreground
351 * and background colours, and offset for that font.
352 *
353 * Parameters: font -- the font handle (0 for current font)
354 * int background, foreground -- back/foreground colours
355 * int offset -- foreground offset colour (-14 to +14)
356 * Returns: possible error condition.
357 * Other Info: none.
358 *
359 */
360
361extern os_error * font_setcolour(font, int background, int foreground, int offset);
362
363
364#define font_BlueGun 0x01000000 /* 8-bit field: phsical colour blue gun. */
365#define font_GreenGun 0x00010000 /* 8-bit field: phsical colour green gun. */
366#define font_RedGun 0x00000100 /* 8-bit field: phsical colour red gun. */
367
368
369/* --------------------------- font_setpalette -----------------------------
370 * Description: Sets the anti-alias palette
371 *
372 * Parameters: int background -- logical background colour
373 * int foreground -- logical foreground colour
374 * int offset -- foreground colour offset
375 * int physical_back -- physical background colour
376 * int physical_fore -- physical foreground colour
377 * Returns: possible error condition.
378 * Other Info: physical_back and physical_fore are of the form:
379 * 0xBBGGRR00 (see #defines above).
380 *
381 */
382
383extern os_error *font_setpalette(int background, int foreground, int offset,
384 int physical_back, int physical_fore);
385
386typedef struct font_threshold {
387
388 char offset;
389 char thresholds[15];
390
391 } font_threshold;
392
393
394/* ------------------------- font_readthresholds ---------------------------
395 * Description: Reads the list of threshold values that the font manager
396 * uses when painting characters.
397 *
398 * Parameters: font_theshold *th -- pointer to result buffer
399 * Returns: possible error condition.
400 * Other Info: none.
401 *
402 */
403
404extern os_error *font_readthresholds(font_threshold *th);
405
406
407/* ------------------------- font_setthresholds ----------------------------
408 * Description: Sets up threshold values for painting colours.
409 *
410 * Parameters: font_threshold *th -- pointer to a threshold table
411 * Returns: possible error condition.
412 * Other Info: none.
413 *
414 */
415
416extern os_error *font_setthresholds(font_threshold *th);
417
418
419/* ------------------------- font_findcaretj -------------------------------
420 * Description: Finds nearest point where the caret can go (using
421 * justification offsets).
422 *
423 * Parameters: font_string *fs -- the string (set up as in font_findcaret)
424 * int offset_x, offset-y -- the justification offsets
425 * Returns: possible error condition.
426 * Other Info: if offsets are both zero then same as font_findcaret.
427 *
428 */
429
430extern os_error *font_findcaretj(font_string *fs, int offset_x, int offset_y);
431
432
433/* ------------------------ font_stringbbox --------------------------------
434 * Description: Measures the size of a string (without printing it).
435 *
436 * Parameters: char *s -- the string
437 * font_info *fi -- pointer to buffer to hold font info
438 * Returns: possible error condition.
439 * Other Info: fields returned in fi are:
440 * minx, miny -- bounding box min x/y
441 * maxx, maxy -- bounding box min x/y.
442 *
443 */
444
445extern os_error *font_stringbbox(char *s, font_info *fi);
446
447/* new SWIS */
448
449/*---------------------------------------------------------------------------*/
450/*Routines to create a draw module path object from calls to font_paint*/
451
452typedef enum {font_CONVERT, font_IGNORE, font_ERROR} font_action_on_bitmap;
453
454extern os_error
455 *font_output_to_null
456 ( BOOL add_hints,
457 BOOL output_skeleton,
458 font_action_on_bitmap action_on_bitmap
459 );
460
461extern os_error *font_output_size (size_t *size);
462
463extern os_error
464 *font_output_to_buffer
465 ( drawmod_buffer *buff_ptr,
466 BOOL add_hints,
467 BOOL output_skeleton,
468 font_action_on_bitmap action_on_bitmap
469 );
470
471extern os_error *font_output_to_screen (void);
472
473# endif
474
475/* end font.h */