chiark / gitweb /
Initial revision
[ssr] / StraySrc / Libraries / Steel / h / font
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
24 typedef 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
38 extern 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
53 extern 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
69 extern os_error * font_lose(font f);
70
71 typedef 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
98 extern os_error * font_readdef(font, font_def*);
99
100 typedef 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
122 extern os_error * font_readinfo(font, font_info*);
123
124
125 typedef 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
157 extern 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   
179 extern 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
194 extern 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
207 extern 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
220 extern 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
232 extern os_error * font_setfont(font);
233
234
235 typedef 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
258 extern 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
275 extern 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
290 extern 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
306 extern 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
319 extern 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
332 extern 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
346 extern 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
361 extern 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
383 extern os_error *font_setpalette(int background, int foreground, int offset, 
384                           int physical_back, int physical_fore);
385
386 typedef 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
404 extern 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
416 extern 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
430 extern 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    
445 extern 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
452 typedef enum {font_CONVERT, font_IGNORE, font_ERROR} font_action_on_bitmap;
453
454 extern 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
461 extern os_error *font_output_size (size_t *size);
462
463 extern 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
471 extern os_error *font_output_to_screen (void);
472
473 # endif
474
475 /* end font.h */