Imported Upstream version 1.15.1
[deb_xorg-server.git] / xkb / xkbgeom.h
1 /************************************************************
2 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3
4 Permission to use, copy, modify, and distribute this
5 software and its documentation for any purpose and without
6 fee is hereby granted, provided that the above copyright
7 notice appear in all copies and that both that copyright
8 notice and this permission notice appear in supporting
9 documentation, and that the name of Silicon Graphics not be
10 used in advertising or publicity pertaining to distribution
11 of the software without specific prior written permission.
12 Silicon Graphics makes no representation about the suitability
13 of this software for any purpose. It is provided "as is"
14 without any express or implied warranty.
15
16 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
23 THE USE OR PERFORMANCE OF THIS SOFTWARE.
24
25 ********************************************************/
26
27 #ifndef _XKBGEOM_H_
28 #define _XKBGEOM_H_
29
30 #include "xkbstr.h"
31
32 #define XkbAddGeomKeyAlias SrvXkbAddGeomKeyAlias
33 #define XkbAddGeomColor SrvXkbAddGeomColor
34 #define XkbAddGeomDoodad SrvXkbAddGeomDoodad
35 #define XkbAddGeomKey SrvXkbAddGeomKey
36 #define XkbAddGeomOutline SrvXkbAddGeomOutline
37 #define XkbAddGeomOverlay SrvXkbAddGeomOverlay
38 #define XkbAddGeomOverlayRow SrvXkbAddGeomOverlayRow
39 #define XkbAddGeomOverlayKey SrvXkbAddGeomOverlayKey
40 #define XkbAddGeomProperty SrvXkbAddGeomProperty
41 #define XkbAddGeomRow SrvXkbAddGeomRow
42 #define XkbAddGeomSection SrvXkbAddGeomSection
43 #define XkbAddGeomShape SrvXkbAddGeomShape
44 #define XkbAllocGeometry SrvXkbAllocGeometry
45 #define XkbFreeGeomKeyAliases SrvXkbFreeGeomKeyAliases
46 #define XkbFreeGeomColors SrvXkbFreeGeomColors
47 #define XkbFreeGeomDoodads SrvXkbFreeGeomDoodads
48 #define XkbFreeGeomProperties SrvXkbFreeGeomProperties
49 #define XkbFreeGeomKeys SrvXkbFreeGeomKeys
50 #define XkbFreeGeomRows SrvXkbFreeGeomRows
51 #define XkbFreeGeomSections SrvXkbFreeGeomSections
52 #define XkbFreeGeomPoints SrvXkbFreeGeomPoints
53 #define XkbFreeGeomOutlines SrvXkbFreeGeomOutlines
54 #define XkbFreeGeomShapes SrvXkbFreeGeomShapes
55 #define XkbFreeGeometry SrvXkbFreeGeometry
56
57 typedef struct _XkbProperty {
58 char *name;
59 char *value;
60 } XkbPropertyRec, *XkbPropertyPtr;
61
62 typedef struct _XkbColor {
63 unsigned int pixel;
64 char *spec;
65 } XkbColorRec, *XkbColorPtr;
66
67 typedef struct _XkbPoint {
68 short x;
69 short y;
70 } XkbPointRec, *XkbPointPtr;
71
72 typedef struct _XkbBounds {
73 short x1, y1;
74 short x2, y2;
75 } XkbBoundsRec, *XkbBoundsPtr;
76
77 #define XkbBoundsWidth(b) (((b)->x2)-((b)->x1))
78 #define XkbBoundsHeight(b) (((b)->y2)-((b)->y1))
79
80 typedef struct _XkbOutline {
81 unsigned short num_points;
82 unsigned short sz_points;
83 unsigned short corner_radius;
84 XkbPointPtr points;
85 } XkbOutlineRec, *XkbOutlinePtr;
86
87 typedef struct _XkbShape {
88 Atom name;
89 unsigned short num_outlines;
90 unsigned short sz_outlines;
91 XkbOutlinePtr outlines;
92 XkbOutlinePtr approx;
93 XkbOutlinePtr primary;
94 XkbBoundsRec bounds;
95 } XkbShapeRec, *XkbShapePtr;
96
97 #define XkbOutlineIndex(s,o) ((int)((o)-&(s)->outlines[0]))
98
99 typedef struct _XkbShapeDoodad {
100 Atom name;
101 unsigned char type;
102 unsigned char priority;
103 short top;
104 short left;
105 short angle;
106 unsigned short color_ndx;
107 unsigned short shape_ndx;
108 } XkbShapeDoodadRec, *XkbShapeDoodadPtr;
109
110 #define XkbShapeDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
111 #define XkbShapeDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
112 #define XkbSetShapeDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
113 #define XkbSetShapeDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
114
115 typedef struct _XkbTextDoodad {
116 Atom name;
117 unsigned char type;
118 unsigned char priority;
119 short top;
120 short left;
121 short angle;
122 short width;
123 short height;
124 unsigned short color_ndx;
125 char *text;
126 char *font;
127 } XkbTextDoodadRec, *XkbTextDoodadPtr;
128
129 #define XkbTextDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
130 #define XkbSetTextDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
131
132 typedef struct _XkbIndicatorDoodad {
133 Atom name;
134 unsigned char type;
135 unsigned char priority;
136 short top;
137 short left;
138 short angle;
139 unsigned short shape_ndx;
140 unsigned short on_color_ndx;
141 unsigned short off_color_ndx;
142 } XkbIndicatorDoodadRec, *XkbIndicatorDoodadPtr;
143
144 #define XkbIndicatorDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
145 #define XkbIndicatorDoodadOnColor(g,d) (&(g)->colors[(d)->on_color_ndx])
146 #define XkbIndicatorDoodadOffColor(g,d) (&(g)->colors[(d)->off_color_ndx])
147 #define XkbSetIndicatorDoodadOnColor(g,d,c) \
148 ((d)->on_color_ndx= (c)-&(g)->colors[0])
149 #define XkbSetIndicatorDoodadOffColor(g,d,c) \
150 ((d)->off_color_ndx= (c)-&(g)->colors[0])
151 #define XkbSetIndicatorDoodadShape(g,d,s) \
152 ((d)->shape_ndx= (s)-&(g)->shapes[0])
153
154 typedef struct _XkbLogoDoodad {
155 Atom name;
156 unsigned char type;
157 unsigned char priority;
158 short top;
159 short left;
160 short angle;
161 unsigned short color_ndx;
162 unsigned short shape_ndx;
163 char *logo_name;
164 } XkbLogoDoodadRec, *XkbLogoDoodadPtr;
165
166 #define XkbLogoDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
167 #define XkbLogoDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
168 #define XkbSetLogoDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
169 #define XkbSetLogoDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
170
171 typedef struct _XkbAnyDoodad {
172 Atom name;
173 unsigned char type;
174 unsigned char priority;
175 short top;
176 short left;
177 short angle;
178 } XkbAnyDoodadRec, *XkbAnyDoodadPtr;
179
180 typedef union _XkbDoodad {
181 XkbAnyDoodadRec any;
182 XkbShapeDoodadRec shape;
183 XkbTextDoodadRec text;
184 XkbIndicatorDoodadRec indicator;
185 XkbLogoDoodadRec logo;
186 } XkbDoodadRec, *XkbDoodadPtr;
187
188 #define XkbUnknownDoodad 0
189 #define XkbOutlineDoodad 1
190 #define XkbSolidDoodad 2
191 #define XkbTextDoodad 3
192 #define XkbIndicatorDoodad 4
193 #define XkbLogoDoodad 5
194
195 typedef struct _XkbKey {
196 XkbKeyNameRec name;
197 short gap;
198 unsigned char shape_ndx;
199 unsigned char color_ndx;
200 } XkbKeyRec, *XkbKeyPtr;
201
202 #define XkbKeyShape(g,k) (&(g)->shapes[(k)->shape_ndx])
203 #define XkbKeyColor(g,k) (&(g)->colors[(k)->color_ndx])
204 #define XkbSetKeyShape(g,k,s) ((k)->shape_ndx= (s)-&(g)->shapes[0])
205 #define XkbSetKeyColor(g,k,c) ((k)->color_ndx= (c)-&(g)->colors[0])
206
207 typedef struct _XkbRow {
208 short top;
209 short left;
210 unsigned short num_keys;
211 unsigned short sz_keys;
212 int vertical;
213 XkbKeyPtr keys;
214 XkbBoundsRec bounds;
215 } XkbRowRec, *XkbRowPtr;
216
217 typedef struct _XkbSection {
218 Atom name;
219 unsigned char priority;
220 short top;
221 short left;
222 unsigned short width;
223 unsigned short height;
224 short angle;
225 unsigned short num_rows;
226 unsigned short num_doodads;
227 unsigned short num_overlays;
228 unsigned short sz_rows;
229 unsigned short sz_doodads;
230 unsigned short sz_overlays;
231 XkbRowPtr rows;
232 XkbDoodadPtr doodads;
233 XkbBoundsRec bounds;
234 struct _XkbOverlay *overlays;
235 } XkbSectionRec, *XkbSectionPtr;
236
237 typedef struct _XkbOverlayKey {
238 XkbKeyNameRec over;
239 XkbKeyNameRec under;
240 } XkbOverlayKeyRec, *XkbOverlayKeyPtr;
241
242 typedef struct _XkbOverlayRow {
243 unsigned short row_under;
244 unsigned short num_keys;
245 unsigned short sz_keys;
246 XkbOverlayKeyPtr keys;
247 } XkbOverlayRowRec, *XkbOverlayRowPtr;
248
249 typedef struct _XkbOverlay {
250 Atom name;
251 XkbSectionPtr section_under;
252 unsigned short num_rows;
253 unsigned short sz_rows;
254 XkbOverlayRowPtr rows;
255 XkbBoundsPtr bounds;
256 } XkbOverlayRec, *XkbOverlayPtr;
257
258 typedef struct _XkbGeometry {
259 Atom name;
260 unsigned short width_mm;
261 unsigned short height_mm;
262 char *label_font;
263 XkbColorPtr label_color;
264 XkbColorPtr base_color;
265 unsigned short sz_properties;
266 unsigned short sz_colors;
267 unsigned short sz_shapes;
268 unsigned short sz_sections;
269 unsigned short sz_doodads;
270 unsigned short sz_key_aliases;
271 unsigned short num_properties;
272 unsigned short num_colors;
273 unsigned short num_shapes;
274 unsigned short num_sections;
275 unsigned short num_doodads;
276 unsigned short num_key_aliases;
277 XkbPropertyPtr properties;
278 XkbColorPtr colors;
279 XkbShapePtr shapes;
280 XkbSectionPtr sections;
281 XkbDoodadPtr doodads;
282 XkbKeyAliasPtr key_aliases;
283 } XkbGeometryRec;
284
285 #define XkbGeomColorIndex(g,c) ((int)((c)-&(g)->colors[0]))
286
287 #define XkbGeomPropertiesMask (1<<0)
288 #define XkbGeomColorsMask (1<<1)
289 #define XkbGeomShapesMask (1<<2)
290 #define XkbGeomSectionsMask (1<<3)
291 #define XkbGeomDoodadsMask (1<<4)
292 #define XkbGeomKeyAliasesMask (1<<5)
293 #define XkbGeomAllMask (0x3f)
294
295 typedef struct _XkbGeometrySizes {
296 unsigned int which;
297 unsigned short num_properties;
298 unsigned short num_colors;
299 unsigned short num_shapes;
300 unsigned short num_sections;
301 unsigned short num_doodads;
302 unsigned short num_key_aliases;
303 } XkbGeometrySizesRec, *XkbGeometrySizesPtr;
304
305 /**
306 * Specifies which items should be cleared in an XKB geometry array
307 * when the array is reallocated.
308 */
309 typedef enum {
310 XKB_GEOM_CLEAR_NONE, /* Don't clear any items, just reallocate. */
311 XKB_GEOM_CLEAR_EXCESS, /* Clear new extra items after reallocation. */
312 XKB_GEOM_CLEAR_ALL /* Clear all items after reallocation. */
313 } XkbGeomClearance;
314
315 extern XkbPropertyPtr XkbAddGeomProperty(XkbGeometryPtr /* geom */ ,
316 char * /* name */ ,
317 char * /* value */
318 );
319
320 extern XkbKeyAliasPtr XkbAddGeomKeyAlias(XkbGeometryPtr /* geom */ ,
321 char * /* alias */ ,
322 char * /* real */
323 );
324
325 extern XkbColorPtr XkbAddGeomColor(XkbGeometryPtr /* geom */ ,
326 char * /* spec */ ,
327 unsigned int /* pixel */
328 );
329
330 extern XkbOutlinePtr XkbAddGeomOutline(XkbShapePtr /* shape */ ,
331 int /* sz_points */
332 );
333
334 extern XkbShapePtr XkbAddGeomShape(XkbGeometryPtr /* geom */ ,
335 Atom /* name */ ,
336 int /* sz_outlines */
337 );
338
339 extern XkbKeyPtr XkbAddGeomKey(XkbRowPtr /* row */
340 );
341
342 extern XkbRowPtr XkbAddGeomRow(XkbSectionPtr /* section */ ,
343 int /* sz_keys */
344 );
345
346 extern XkbSectionPtr XkbAddGeomSection(XkbGeometryPtr /* geom */ ,
347 Atom /* name */ ,
348 int /* sz_rows */ ,
349 int /* sz_doodads */ ,
350 int /* sz_overlays */
351 );
352
353 extern XkbOverlayPtr XkbAddGeomOverlay(XkbSectionPtr /* section */ ,
354 Atom /* name */ ,
355 int /* sz_rows */
356 );
357
358 extern XkbOverlayRowPtr XkbAddGeomOverlayRow(XkbOverlayPtr /* overlay */ ,
359 int /* row_under */ ,
360 int /* sz_keys */
361 );
362
363 extern XkbOverlayKeyPtr XkbAddGeomOverlayKey(XkbOverlayPtr /* overlay */ ,
364 XkbOverlayRowPtr /* row */ ,
365 char * /* over */ ,
366 char * /* under */
367 );
368
369 extern XkbDoodadPtr XkbAddGeomDoodad(XkbGeometryPtr /* geom */ ,
370 XkbSectionPtr /* section */ ,
371 Atom /* name */
372 );
373
374 extern void
375 XkbFreeGeomKeyAliases(XkbGeometryPtr /* geom */ ,
376 int /* first */ ,
377 int /* count */ ,
378 Bool /* freeAll */
379 );
380
381 extern void
382 XkbFreeGeomColors(XkbGeometryPtr /* geom */ ,
383 int /* first */ ,
384 int /* count */ ,
385 Bool /* freeAll */
386 );
387
388 extern void
389 XkbFreeGeomDoodads(XkbDoodadPtr /* doodads */ ,
390 int /* nDoodads */ ,
391 Bool /* freeAll */
392 );
393
394 extern void
395 XkbFreeGeomProperties(XkbGeometryPtr /* geom */ ,
396 int /* first */ ,
397 int /* count */ ,
398 Bool /* freeAll */
399 );
400
401 extern void
402 XkbFreeGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
403 int /* first */ ,
404 int /* count */ ,
405 Bool /* freeAll */
406 );
407
408 extern void
409 XkbFreeGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
410 int /* first */ ,
411 int /* count */ ,
412 Bool /* freeAll */
413 );
414
415 extern void
416 XkbFreeGeomOverlays(XkbSectionPtr /* section */ ,
417 int /* first */ ,
418 int /* count */ ,
419 Bool /* freeAll */
420 );
421
422 extern void
423 XkbFreeGeomKeys(XkbRowPtr /* row */ ,
424 int /* first */ ,
425 int /* count */ ,
426 Bool /* freeAll */
427 );
428
429 extern void
430 XkbFreeGeomRows(XkbSectionPtr /* section */ ,
431 int /* first */ ,
432 int /* count */ ,
433 Bool /* freeAll */
434 );
435
436 extern void
437 XkbFreeGeomSections(XkbGeometryPtr /* geom */ ,
438 int /* first */ ,
439 int /* count */ ,
440 Bool /* freeAll */
441 );
442
443 extern void
444 XkbFreeGeomPoints(XkbOutlinePtr /* outline */ ,
445 int /* first */ ,
446 int /* count */ ,
447 Bool /* freeAll */
448 );
449
450 extern void
451 XkbFreeGeomOutlines(XkbShapePtr /* shape */ ,
452 int /* first */ ,
453 int /* count */ ,
454 Bool /* freeAll */
455 );
456
457 extern void
458 XkbFreeGeomShapes(XkbGeometryPtr /* geom */ ,
459 int /* first */ ,
460 int /* count */ ,
461 Bool /* freeAll */
462 );
463
464 extern void
465 XkbFreeGeometry(XkbGeometryPtr /* geom */ ,
466 unsigned int /* which */ ,
467 Bool /* freeMap */
468 );
469
470 extern Bool
471 XkbGeomRealloc(void ** /* buffer */ ,
472 int /* szItems */ ,
473 int /* nrItems */ ,
474 int /* itemSize */ ,
475 XkbGeomClearance /* clearance */
476 );
477
478 extern Status XkbAllocGeomProps(XkbGeometryPtr /* geom */ ,
479 int /* nProps */
480 );
481
482 extern Status XkbAllocGeomKeyAliases(XkbGeometryPtr /* geom */ ,
483 int /* nAliases */
484 );
485
486 extern Status XkbAllocGeomColors(XkbGeometryPtr /* geom */ ,
487 int /* nColors */
488 );
489
490 extern Status XkbAllocGeomShapes(XkbGeometryPtr /* geom */ ,
491 int /* nShapes */
492 );
493
494 extern Status XkbAllocGeomSections(XkbGeometryPtr /* geom */ ,
495 int /* nSections */
496 );
497
498 extern Status XkbAllocGeomOverlays(XkbSectionPtr /* section */ ,
499 int /* num_needed */
500 );
501
502 extern Status XkbAllocGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
503 int /* num_needed */
504 );
505
506 extern Status XkbAllocGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
507 int /* num_needed */
508 );
509
510 extern Status XkbAllocGeomDoodads(XkbGeometryPtr /* geom */ ,
511 int /* nDoodads */
512 );
513
514 extern Status XkbAllocGeomSectionDoodads(XkbSectionPtr /* section */ ,
515 int /* nDoodads */
516 );
517
518 extern Status XkbAllocGeomOutlines(XkbShapePtr /* shape */ ,
519 int /* nOL */
520 );
521
522 extern Status XkbAllocGeomRows(XkbSectionPtr /* section */ ,
523 int /* nRows */
524 );
525
526 extern Status XkbAllocGeomPoints(XkbOutlinePtr /* ol */ ,
527 int /* nPts */
528 );
529
530 extern Status XkbAllocGeomKeys(XkbRowPtr /* row */ ,
531 int /* nKeys */
532 );
533
534 extern Status XkbAllocGeometry(XkbDescPtr /* xkb */ ,
535 XkbGeometrySizesPtr /* sizes */
536 );
537
538 extern Bool
539 XkbComputeShapeTop(XkbShapePtr /* shape */ ,
540 XkbBoundsPtr /* bounds */
541 );
542
543 extern Bool
544 XkbComputeShapeBounds(XkbShapePtr /* shape */
545 );
546
547 extern Bool
548 XkbComputeRowBounds(XkbGeometryPtr /* geom */ ,
549 XkbSectionPtr /* section */ ,
550 XkbRowPtr /* row */
551 );
552
553 extern Bool
554 XkbComputeSectionBounds(XkbGeometryPtr /* geom */ ,
555 XkbSectionPtr /* section */
556 );
557
558 extern char *XkbFindOverlayForKey(XkbGeometryPtr /* geom */ ,
559 XkbSectionPtr /* wanted */ ,
560 char * /* under */
561 );
562
563 #endif /* _XKBGEOM_H_ */