Imported Upstream version 1.15.1
[deb_xorg-server.git] / xkb / xkbgeom.h
CommitLineData
a09e091a
JB
1/************************************************************
2Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3
4Permission to use, copy, modify, and distribute this
5software and its documentation for any purpose and without
6fee is hereby granted, provided that the above copyright
7notice appear in all copies and that both that copyright
8notice and this permission notice appear in supporting
9documentation, and that the name of Silicon Graphics not be
10used in advertising or publicity pertaining to distribution
11of the software without specific prior written permission.
12Silicon Graphics makes no representation about the suitability
13of this software for any purpose. It is provided "as is"
14without any express or implied warranty.
15
16SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
23THE 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
57typedef struct _XkbProperty {
58 char *name;
59 char *value;
60} XkbPropertyRec, *XkbPropertyPtr;
61
62typedef struct _XkbColor {
63 unsigned int pixel;
64 char *spec;
65} XkbColorRec, *XkbColorPtr;
66
67typedef struct _XkbPoint {
68 short x;
69 short y;
70} XkbPointRec, *XkbPointPtr;
71
72typedef 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
80typedef struct _XkbOutline {
81 unsigned short num_points;
82 unsigned short sz_points;
83 unsigned short corner_radius;
84 XkbPointPtr points;
85} XkbOutlineRec, *XkbOutlinePtr;
86
87typedef 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
99typedef 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
115typedef 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
132typedef 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
154typedef 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
171typedef 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
180typedef 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
195typedef 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
207typedef 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
217typedef 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
237typedef struct _XkbOverlayKey {
238 XkbKeyNameRec over;
239 XkbKeyNameRec under;
240} XkbOverlayKeyRec, *XkbOverlayKeyPtr;
241
242typedef struct _XkbOverlayRow {
243 unsigned short row_under;
244 unsigned short num_keys;
245 unsigned short sz_keys;
246 XkbOverlayKeyPtr keys;
247} XkbOverlayRowRec, *XkbOverlayRowPtr;
248
249typedef 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
258typedef 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
295typedef 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 */
309typedef 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
315extern XkbPropertyPtr XkbAddGeomProperty(XkbGeometryPtr /* geom */ ,
316 char * /* name */ ,
317 char * /* value */
318 );
319
320extern XkbKeyAliasPtr XkbAddGeomKeyAlias(XkbGeometryPtr /* geom */ ,
321 char * /* alias */ ,
322 char * /* real */
323 );
324
325extern XkbColorPtr XkbAddGeomColor(XkbGeometryPtr /* geom */ ,
326 char * /* spec */ ,
327 unsigned int /* pixel */
328 );
329
330extern XkbOutlinePtr XkbAddGeomOutline(XkbShapePtr /* shape */ ,
331 int /* sz_points */
332 );
333
334extern XkbShapePtr XkbAddGeomShape(XkbGeometryPtr /* geom */ ,
335 Atom /* name */ ,
336 int /* sz_outlines */
337 );
338
339extern XkbKeyPtr XkbAddGeomKey(XkbRowPtr /* row */
340 );
341
342extern XkbRowPtr XkbAddGeomRow(XkbSectionPtr /* section */ ,
343 int /* sz_keys */
344 );
345
346extern XkbSectionPtr XkbAddGeomSection(XkbGeometryPtr /* geom */ ,
347 Atom /* name */ ,
348 int /* sz_rows */ ,
349 int /* sz_doodads */ ,
350 int /* sz_overlays */
351 );
352
353extern XkbOverlayPtr XkbAddGeomOverlay(XkbSectionPtr /* section */ ,
354 Atom /* name */ ,
355 int /* sz_rows */
356 );
357
358extern XkbOverlayRowPtr XkbAddGeomOverlayRow(XkbOverlayPtr /* overlay */ ,
359 int /* row_under */ ,
360 int /* sz_keys */
361 );
362
363extern XkbOverlayKeyPtr XkbAddGeomOverlayKey(XkbOverlayPtr /* overlay */ ,
364 XkbOverlayRowPtr /* row */ ,
365 char * /* over */ ,
366 char * /* under */
367 );
368
369extern XkbDoodadPtr XkbAddGeomDoodad(XkbGeometryPtr /* geom */ ,
370 XkbSectionPtr /* section */ ,
371 Atom /* name */
372 );
373
374extern void
375 XkbFreeGeomKeyAliases(XkbGeometryPtr /* geom */ ,
376 int /* first */ ,
377 int /* count */ ,
378 Bool /* freeAll */
379 );
380
381extern void
382 XkbFreeGeomColors(XkbGeometryPtr /* geom */ ,
383 int /* first */ ,
384 int /* count */ ,
385 Bool /* freeAll */
386 );
387
388extern void
389 XkbFreeGeomDoodads(XkbDoodadPtr /* doodads */ ,
390 int /* nDoodads */ ,
391 Bool /* freeAll */
392 );
393
394extern void
395 XkbFreeGeomProperties(XkbGeometryPtr /* geom */ ,
396 int /* first */ ,
397 int /* count */ ,
398 Bool /* freeAll */
399 );
400
401extern void
402 XkbFreeGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
403 int /* first */ ,
404 int /* count */ ,
405 Bool /* freeAll */
406 );
407
408extern void
409 XkbFreeGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
410 int /* first */ ,
411 int /* count */ ,
412 Bool /* freeAll */
413 );
414
415extern void
416 XkbFreeGeomOverlays(XkbSectionPtr /* section */ ,
417 int /* first */ ,
418 int /* count */ ,
419 Bool /* freeAll */
420 );
421
422extern void
423 XkbFreeGeomKeys(XkbRowPtr /* row */ ,
424 int /* first */ ,
425 int /* count */ ,
426 Bool /* freeAll */
427 );
428
429extern void
430 XkbFreeGeomRows(XkbSectionPtr /* section */ ,
431 int /* first */ ,
432 int /* count */ ,
433 Bool /* freeAll */
434 );
435
436extern void
437 XkbFreeGeomSections(XkbGeometryPtr /* geom */ ,
438 int /* first */ ,
439 int /* count */ ,
440 Bool /* freeAll */
441 );
442
443extern void
444 XkbFreeGeomPoints(XkbOutlinePtr /* outline */ ,
445 int /* first */ ,
446 int /* count */ ,
447 Bool /* freeAll */
448 );
449
450extern void
451 XkbFreeGeomOutlines(XkbShapePtr /* shape */ ,
452 int /* first */ ,
453 int /* count */ ,
454 Bool /* freeAll */
455 );
456
457extern void
458 XkbFreeGeomShapes(XkbGeometryPtr /* geom */ ,
459 int /* first */ ,
460 int /* count */ ,
461 Bool /* freeAll */
462 );
463
464extern void
465 XkbFreeGeometry(XkbGeometryPtr /* geom */ ,
466 unsigned int /* which */ ,
467 Bool /* freeMap */
468 );
469
470extern Bool
471 XkbGeomRealloc(void ** /* buffer */ ,
472 int /* szItems */ ,
473 int /* nrItems */ ,
474 int /* itemSize */ ,
475 XkbGeomClearance /* clearance */
476 );
477
478extern Status XkbAllocGeomProps(XkbGeometryPtr /* geom */ ,
479 int /* nProps */
480 );
481
482extern Status XkbAllocGeomKeyAliases(XkbGeometryPtr /* geom */ ,
483 int /* nAliases */
484 );
485
486extern Status XkbAllocGeomColors(XkbGeometryPtr /* geom */ ,
487 int /* nColors */
488 );
489
490extern Status XkbAllocGeomShapes(XkbGeometryPtr /* geom */ ,
491 int /* nShapes */
492 );
493
494extern Status XkbAllocGeomSections(XkbGeometryPtr /* geom */ ,
495 int /* nSections */
496 );
497
498extern Status XkbAllocGeomOverlays(XkbSectionPtr /* section */ ,
499 int /* num_needed */
500 );
501
502extern Status XkbAllocGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
503 int /* num_needed */
504 );
505
506extern Status XkbAllocGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
507 int /* num_needed */
508 );
509
510extern Status XkbAllocGeomDoodads(XkbGeometryPtr /* geom */ ,
511 int /* nDoodads */
512 );
513
514extern Status XkbAllocGeomSectionDoodads(XkbSectionPtr /* section */ ,
515 int /* nDoodads */
516 );
517
518extern Status XkbAllocGeomOutlines(XkbShapePtr /* shape */ ,
519 int /* nOL */
520 );
521
522extern Status XkbAllocGeomRows(XkbSectionPtr /* section */ ,
523 int /* nRows */
524 );
525
526extern Status XkbAllocGeomPoints(XkbOutlinePtr /* ol */ ,
527 int /* nPts */
528 );
529
530extern Status XkbAllocGeomKeys(XkbRowPtr /* row */ ,
531 int /* nKeys */
532 );
533
534extern Status XkbAllocGeometry(XkbDescPtr /* xkb */ ,
535 XkbGeometrySizesPtr /* sizes */
536 );
537
538extern Bool
539 XkbComputeShapeTop(XkbShapePtr /* shape */ ,
540 XkbBoundsPtr /* bounds */
541 );
542
543extern Bool
544 XkbComputeShapeBounds(XkbShapePtr /* shape */
545 );
546
547extern Bool
548 XkbComputeRowBounds(XkbGeometryPtr /* geom */ ,
549 XkbSectionPtr /* section */ ,
550 XkbRowPtr /* row */
551 );
552
553extern Bool
554 XkbComputeSectionBounds(XkbGeometryPtr /* geom */ ,
555 XkbSectionPtr /* section */
556 );
557
558extern char *XkbFindOverlayForKey(XkbGeometryPtr /* geom */ ,
559 XkbSectionPtr /* wanted */ ,
560 char * /* under */
561 );
562
563#endif /* _XKBGEOM_H_ */