xkbgeom.h revision 706f2543
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 XkbAllocGeomKeyAliases		SrvXkbAllocGeomKeyAliases
45#define XkbAllocGeomColors		SrvXkbAllocGeomColors
46#define XkbAllocGeomDoodads		SrvXkbAllocGeomDoodads
47#define XkbAllocGeomKeys		SrvXkbAllocGeomKeys
48#define XkbAllocGeomOutlines		SrvXkbAllocGeomOutlines
49#define XkbAllocGeomPoints		SrvXkbAllocGeomPoints
50#define XkbAllocGeomProps		SrvXkbAllocGeomProps
51#define XkbAllocGeomRows		SrvXkbAllocGeomRows
52#define XkbAllocGeomSectionDoodads	SrvXkbAllocGeomSectionDoodads
53#define XkbAllocGeomSections		SrvXkbAllocGeomSections
54#define	XkbAllocGeomOverlays		SrvXkbAllocGeomOverlays
55#define	XkbAllocGeomOverlayRows		SrvXkbAllocGeomOverlayRows
56#define	XkbAllocGeomOverlayKeys		SrvXkbAllocGeomOverlayKeys
57#define XkbAllocGeomShapes		SrvXkbAllocGeomShapes
58#define XkbAllocGeometry		SrvXkbAllocGeometry
59#define XkbFreeGeomKeyAliases		SrvXkbFreeGeomKeyAliases
60#define XkbFreeGeomColors		SrvXkbFreeGeomColors
61#define XkbFreeGeomDoodads		SrvXkbFreeGeomDoodads
62#define XkbFreeGeomProperties		SrvXkbFreeGeomProperties
63#define	XkbFreeGeomOverlayKeys		SrvXkbFreeGeomOverlayKeys
64#define	XkbFreeGeomOverlayRows		SrvXkbFreeGeomOverlayRows
65#define	XkbFreeGeomOverlays		SrvXkbFreeGeomOverlays
66#define	XkbFreeGeomKeys			SrvXkbFreeGeomKeys
67#define	XkbFreeGeomRows			SrvXkbFreeGeomRows
68#define XkbFreeGeomSections		SrvXkbFreeGeomSections
69#define	XkbFreeGeomPoints		SrvXkbFreeGeomPoints
70#define	XkbFreeGeomOutlines		SrvXkbFreeGeomOutlines
71#define XkbFreeGeomShapes		SrvXkbFreeGeomShapes
72#define XkbFreeGeometry			SrvXkbFreeGeometry
73
74typedef	struct _XkbProperty {
75	char	*name;
76	char	*value;
77} XkbPropertyRec,*XkbPropertyPtr;
78
79typedef struct _XkbColor {
80	unsigned int 	pixel;
81	char *		spec;
82} XkbColorRec,*XkbColorPtr;
83
84typedef	struct _XkbPoint {
85	short	x;
86	short	y;
87} XkbPointRec, *XkbPointPtr;
88
89typedef struct	_XkbBounds {
90	short	x1,y1;
91	short	x2,y2;
92} XkbBoundsRec, *XkbBoundsPtr;
93#define	XkbBoundsWidth(b)	(((b)->x2)-((b)->x1))
94#define	XkbBoundsHeight(b)	(((b)->y2)-((b)->y1))
95
96typedef struct _XkbOutline {
97	unsigned short	num_points;
98	unsigned short	sz_points;
99	unsigned short	corner_radius;
100	XkbPointPtr	points;
101} XkbOutlineRec, *XkbOutlinePtr;
102
103typedef struct _XkbShape {
104	Atom	 	 name;
105	unsigned short	 num_outlines;
106	unsigned short	 sz_outlines;
107	XkbOutlinePtr	 outlines;
108	XkbOutlinePtr	 approx;
109	XkbOutlinePtr	 primary;
110	XkbBoundsRec	 bounds;
111} XkbShapeRec, *XkbShapePtr;
112#define	XkbOutlineIndex(s,o)	((int)((o)-&(s)->outlines[0]))
113
114typedef struct _XkbShapeDoodad {
115	Atom		 name;
116	unsigned char	 type;
117	unsigned char	 priority;
118	short		 top;
119	short		 left;
120	short	 	 angle;
121	unsigned short	 color_ndx;
122	unsigned short	 shape_ndx;
123} XkbShapeDoodadRec, *XkbShapeDoodadPtr;
124#define	XkbShapeDoodadColor(g,d)	(&(g)->colors[(d)->color_ndx])
125#define	XkbShapeDoodadShape(g,d)	(&(g)->shapes[(d)->shape_ndx])
126#define	XkbSetShapeDoodadColor(g,d,c)	((d)->color_ndx= (c)-&(g)->colors[0])
127#define	XkbSetShapeDoodadShape(g,d,s)	((d)->shape_ndx= (s)-&(g)->shapes[0])
128
129typedef struct _XkbTextDoodad {
130	Atom		 name;
131	unsigned char	 type;
132	unsigned char	 priority;
133	short	 	 top;
134	short	 	 left;
135	short	 	 angle;
136	short	 	 width;
137	short		 height;
138	unsigned short	 color_ndx;
139	char *		 text;
140	char *		 font;
141} XkbTextDoodadRec, *XkbTextDoodadPtr;
142#define	XkbTextDoodadColor(g,d)	(&(g)->colors[(d)->color_ndx])
143#define	XkbSetTextDoodadColor(g,d,c)	((d)->color_ndx= (c)-&(g)->colors[0])
144
145typedef struct _XkbIndicatorDoodad {
146	Atom		 name;
147	unsigned char	 type;
148	unsigned char	 priority;
149	short	 	 top;
150	short	 	 left;
151	short		 angle;
152	unsigned short	 shape_ndx;
153	unsigned short	 on_color_ndx;
154	unsigned short	 off_color_ndx;
155} XkbIndicatorDoodadRec, *XkbIndicatorDoodadPtr;
156#define	XkbIndicatorDoodadShape(g,d)	(&(g)->shapes[(d)->shape_ndx])
157#define	XkbIndicatorDoodadOnColor(g,d)	(&(g)->colors[(d)->on_color_ndx])
158#define	XkbIndicatorDoodadOffColor(g,d)	(&(g)->colors[(d)->off_color_ndx])
159#define	XkbSetIndicatorDoodadOnColor(g,d,c) \
160				((d)->on_color_ndx= (c)-&(g)->colors[0])
161#define	XkbSetIndicatorDoodadOffColor(g,d,c) \
162				((d)->off_color_ndx= (c)-&(g)->colors[0])
163#define	XkbSetIndicatorDoodadShape(g,d,s) \
164				((d)->shape_ndx= (s)-&(g)->shapes[0])
165
166typedef struct _XkbLogoDoodad {
167	Atom		 name;
168	unsigned char	 type;
169	unsigned char	 priority;
170	short		 top;
171	short		 left;
172	short	 	 angle;
173	unsigned short	 color_ndx;
174	unsigned short	 shape_ndx;
175	char *		 logo_name;
176} XkbLogoDoodadRec, *XkbLogoDoodadPtr;
177#define	XkbLogoDoodadColor(g,d)		(&(g)->colors[(d)->color_ndx])
178#define	XkbLogoDoodadShape(g,d)		(&(g)->shapes[(d)->shape_ndx])
179#define	XkbSetLogoDoodadColor(g,d,c)	((d)->color_ndx= (c)-&(g)->colors[0])
180#define	XkbSetLogoDoodadShape(g,d,s)	((d)->shape_ndx= (s)-&(g)->shapes[0])
181
182typedef struct _XkbAnyDoodad {
183	Atom		 name;
184	unsigned char	 type;
185	unsigned char	 priority;
186	short	 	 top;
187	short	 	 left;
188	short		 angle;
189} XkbAnyDoodadRec, *XkbAnyDoodadPtr;
190
191typedef union _XkbDoodad {
192	XkbAnyDoodadRec		any;
193	XkbShapeDoodadRec	shape;
194	XkbTextDoodadRec	text;
195	XkbIndicatorDoodadRec	indicator;
196	XkbLogoDoodadRec	logo;
197} XkbDoodadRec, *XkbDoodadPtr;
198
199#define	XkbUnknownDoodad	0
200#define	XkbOutlineDoodad	1
201#define	XkbSolidDoodad		2
202#define	XkbTextDoodad		3
203#define	XkbIndicatorDoodad	4
204#define	XkbLogoDoodad		5
205
206typedef struct _XkbKey {
207	XkbKeyNameRec	 name;
208	short		 gap;
209	unsigned char	 shape_ndx;
210	unsigned char	 color_ndx;
211} XkbKeyRec, *XkbKeyPtr;
212#define	XkbKeyShape(g,k)	(&(g)->shapes[(k)->shape_ndx])
213#define	XkbKeyColor(g,k)	(&(g)->colors[(k)->color_ndx])
214#define	XkbSetKeyShape(g,k,s)	((k)->shape_ndx= (s)-&(g)->shapes[0])
215#define	XkbSetKeyColor(g,k,c)	((k)->color_ndx= (c)-&(g)->colors[0])
216
217typedef struct _XkbRow {
218	short	 	top;
219	short	 	left;
220	unsigned short	num_keys;
221	unsigned short	sz_keys;
222	int		vertical;
223	XkbKeyPtr	keys;
224	XkbBoundsRec	bounds;
225} XkbRowRec, *XkbRowPtr;
226
227typedef struct _XkbSection {
228	Atom		 name;
229	unsigned char	 priority;
230	short	 	 top;
231	short	 	 left;
232	unsigned short	 width;
233	unsigned short	 height;
234	short	 	 angle;
235	unsigned short	 num_rows;
236	unsigned short	 num_doodads;
237	unsigned short	 num_overlays;
238	unsigned short	 sz_rows;
239	unsigned short	 sz_doodads;
240	unsigned short	 sz_overlays;
241	XkbRowPtr	 rows;
242	XkbDoodadPtr	 doodads;
243	XkbBoundsRec	 bounds;
244	struct _XkbOverlay *overlays;
245} XkbSectionRec, *XkbSectionPtr;
246
247typedef	struct _XkbOverlayKey {
248	XkbKeyNameRec	over;
249	XkbKeyNameRec	under;
250} XkbOverlayKeyRec,*XkbOverlayKeyPtr;
251
252typedef struct _XkbOverlayRow {
253	unsigned short		row_under;
254	unsigned short		num_keys;
255	unsigned short		sz_keys;
256	XkbOverlayKeyPtr	keys;
257} XkbOverlayRowRec,*XkbOverlayRowPtr;
258
259typedef struct _XkbOverlay {
260	Atom			name;
261	XkbSectionPtr		section_under;
262	unsigned short		num_rows;
263	unsigned short		sz_rows;
264	XkbOverlayRowPtr	rows;
265	XkbBoundsPtr		bounds;
266} XkbOverlayRec,*XkbOverlayPtr;
267
268typedef struct _XkbGeometry {
269	Atom		 name;
270	unsigned short	 width_mm;
271	unsigned short	 height_mm;
272	char *		 label_font;
273	XkbColorPtr	 label_color;
274	XkbColorPtr	 base_color;
275	unsigned short	 sz_properties;
276	unsigned short	 sz_colors;
277	unsigned short	 sz_shapes;
278	unsigned short   sz_sections;
279	unsigned short	 sz_doodads;
280	unsigned short	 sz_key_aliases;
281	unsigned short	 num_properties;
282	unsigned short	 num_colors;
283	unsigned short	 num_shapes;
284	unsigned short	 num_sections;
285	unsigned short	 num_doodads;
286	unsigned short	 num_key_aliases;
287	XkbPropertyPtr	 properties;
288	XkbColorPtr	 colors;
289	XkbShapePtr	 shapes;
290	XkbSectionPtr	 sections;
291	XkbDoodadPtr	 doodads;
292	XkbKeyAliasPtr	 key_aliases;
293} XkbGeometryRec;
294#define	XkbGeomColorIndex(g,c)	((int)((c)-&(g)->colors[0]))
295
296#define	XkbGeomPropertiesMask	(1<<0)
297#define	XkbGeomColorsMask	(1<<1)
298#define	XkbGeomShapesMask	(1<<2)
299#define	XkbGeomSectionsMask	(1<<3)
300#define	XkbGeomDoodadsMask	(1<<4)
301#define	XkbGeomKeyAliasesMask	(1<<5)
302#define	XkbGeomAllMask		(0x3f)
303
304typedef struct _XkbGeometrySizes {
305	unsigned int	which;
306	unsigned short	num_properties;
307	unsigned short	num_colors;
308	unsigned short	num_shapes;
309	unsigned short	num_sections;
310	unsigned short	num_doodads;
311	unsigned short	num_key_aliases;
312} XkbGeometrySizesRec,*XkbGeometrySizesPtr;
313
314extern	XkbPropertyPtr
315XkbAddGeomProperty(
316    XkbGeometryPtr	/* geom */,
317    char *		/* name */,
318    char *		/* value */
319);
320
321extern	XkbKeyAliasPtr
322XkbAddGeomKeyAlias(
323    XkbGeometryPtr	/* geom */,
324    char *		/* alias */,
325    char *		/* real */
326);
327
328extern	XkbColorPtr
329XkbAddGeomColor(
330    XkbGeometryPtr	/* geom */,
331    char *		/* spec */,
332    unsigned int	/* pixel */
333);
334
335extern	XkbOutlinePtr
336XkbAddGeomOutline(
337    XkbShapePtr		/* shape */,
338    int			/* sz_points */
339);
340
341extern XkbShapePtr
342XkbAddGeomShape(
343    XkbGeometryPtr	/* geom */,
344    Atom		/* name */,
345    int			/* sz_outlines */
346);
347
348extern XkbKeyPtr
349XkbAddGeomKey(
350    XkbRowPtr		/* row */
351);
352
353extern XkbRowPtr
354XkbAddGeomRow(
355    XkbSectionPtr	/* section */,
356    int			/* sz_keys */
357);
358
359extern XkbSectionPtr
360XkbAddGeomSection(
361    XkbGeometryPtr	/* geom */,
362    Atom		/* name */,
363    int			/* sz_rows */,
364    int			/* sz_doodads */,
365    int			/* sz_overlays */
366);
367
368extern XkbOverlayPtr
369XkbAddGeomOverlay(
370    XkbSectionPtr	/* section */,
371    Atom		/* name */,
372    int			/* sz_rows */
373);
374
375extern XkbOverlayRowPtr
376XkbAddGeomOverlayRow(
377    XkbOverlayPtr	/* overlay */,
378    int			/* row_under */,
379    int			/* sz_keys */
380);
381
382extern XkbOverlayKeyPtr
383XkbAddGeomOverlayKey(
384    XkbOverlayPtr	/* overlay */,
385    XkbOverlayRowPtr	/* row */,
386    char *		/* over */,
387    char *		/* under */
388);
389
390extern XkbDoodadPtr
391XkbAddGeomDoodad(
392    XkbGeometryPtr	/* geom */,
393    XkbSectionPtr	/* section */,
394    Atom		/* name */
395);
396
397
398extern void
399XkbFreeGeomKeyAliases(
400    XkbGeometryPtr	/* geom */,
401    int			/* first */,
402    int			/* count */,
403    Bool		/* freeAll */
404);
405
406extern void
407XkbFreeGeomColors(
408    XkbGeometryPtr	/* geom */,
409    int			/* first */,
410    int			/* count */,
411    Bool		/* freeAll */
412);
413
414extern void
415XkbFreeGeomDoodads(
416    XkbDoodadPtr	/* doodads */,
417    int			/* nDoodads */,
418    Bool		/* freeAll */
419);
420
421
422extern void
423XkbFreeGeomProperties(
424    XkbGeometryPtr	/* geom */,
425    int			/* first */,
426    int			/* count */,
427    Bool		/* freeAll */
428);
429
430extern void
431XkbFreeGeomOverlayKeys(
432    XkbOverlayRowPtr	/* row */,
433    int			/* first */,
434    int			/* count */,
435    Bool		/* freeAll */
436);
437
438extern void
439XkbFreeGeomOverlayRows(
440    XkbOverlayPtr	/* overlay */,
441    int			/* first */,
442    int			/* count */,
443    Bool		/* freeAll */
444);
445
446extern void
447XkbFreeGeomOverlays(
448    XkbSectionPtr	/* section */,
449    int			/* first */,
450    int			/* count */,
451    Bool		/* freeAll */
452);
453
454extern void
455XkbFreeGeomKeys(
456    XkbRowPtr		/* row */,
457    int			/* first */,
458    int			/* count */,
459    Bool		/* freeAll */
460);
461
462extern void
463XkbFreeGeomRows(
464    XkbSectionPtr	/* section */,
465    int			/* first */,
466    int			/* count */,
467    Bool		/* freeAll */
468);
469
470extern void
471XkbFreeGeomSections(
472    XkbGeometryPtr	/* geom */,
473    int			/* first */,
474    int			/* count */,
475    Bool		/* freeAll */
476);
477
478
479extern void
480XkbFreeGeomPoints(
481    XkbOutlinePtr	/* outline */,
482    int			/* first */,
483    int			/* count */,
484    Bool		/* freeAll */
485);
486
487extern void
488XkbFreeGeomOutlines(
489    XkbShapePtr		/* shape */,
490    int			/* first */,
491    int			/* count */,
492    Bool		/* freeAll */
493);
494
495extern void
496XkbFreeGeomShapes(
497    XkbGeometryPtr	/* geom */,
498    int			/* first */,
499    int			/* count */,
500    Bool		/* freeAll */
501);
502
503extern void
504XkbFreeGeometry(
505    XkbGeometryPtr	/* geom */,
506    unsigned int	/* which */,
507    Bool		/* freeMap */
508);
509
510extern Status
511XkbAllocGeomProps(
512    XkbGeometryPtr	/* geom */,
513    int			/* nProps */
514);
515
516extern Status
517XkbAllocGeomKeyAliases(
518    XkbGeometryPtr	/* geom */,
519    int			/* nAliases */
520);
521
522extern Status
523XkbAllocGeomColors(
524    XkbGeometryPtr	/* geom */,
525    int			/* nColors */
526);
527
528extern Status
529XkbAllocGeomShapes(
530    XkbGeometryPtr	/* geom */,
531    int			/* nShapes */
532);
533
534extern Status
535XkbAllocGeomSections(
536    XkbGeometryPtr	/* geom */,
537    int			/* nSections */
538);
539
540extern Status
541XkbAllocGeomOverlays(
542    XkbSectionPtr	/* section */,
543    int			/* num_needed */
544);
545
546extern Status
547XkbAllocGeomOverlayRows(
548    XkbOverlayPtr	/* overlay */,
549    int			/* num_needed */
550);
551
552extern Status
553XkbAllocGeomOverlayKeys(
554    XkbOverlayRowPtr	/* row */,
555    int			/* num_needed */
556);
557
558extern Status
559XkbAllocGeomDoodads(
560    XkbGeometryPtr	/* geom */,
561    int			/* nDoodads */
562);
563
564extern Status
565XkbAllocGeomSectionDoodads(
566    XkbSectionPtr	/* section */,
567    int			/* nDoodads */
568);
569
570extern Status
571XkbAllocGeomOutlines(
572    XkbShapePtr		/* shape */,
573    int			/* nOL */
574);
575
576extern Status
577XkbAllocGeomRows(
578    XkbSectionPtr	/* section */,
579    int			/* nRows */
580);
581
582extern Status
583XkbAllocGeomPoints(
584    XkbOutlinePtr	/* ol */,
585    int			/* nPts */
586);
587
588extern Status
589XkbAllocGeomKeys(
590    XkbRowPtr		/* row */,
591    int			/* nKeys */
592);
593
594extern	Status
595XkbAllocGeometry(
596	XkbDescPtr		/* xkb */,
597	XkbGeometrySizesPtr	/* sizes */
598);
599
600extern	Bool
601XkbComputeShapeTop(
602	XkbShapePtr		/* shape */,
603	XkbBoundsPtr		/* bounds */
604);
605
606extern	Bool
607XkbComputeShapeBounds(
608	XkbShapePtr		/* shape */
609);
610
611extern	Bool
612XkbComputeRowBounds(
613	XkbGeometryPtr		/* geom */,
614	XkbSectionPtr		/* section */,
615	XkbRowPtr		/* row */
616);
617
618extern	Bool
619XkbComputeSectionBounds(
620	XkbGeometryPtr		/* geom */,
621	XkbSectionPtr		/* section */
622);
623
624extern	char *
625XkbFindOverlayForKey(
626	XkbGeometryPtr		/* geom */,
627	XkbSectionPtr		/* wanted */,
628	char *			/* under */
629);
630
631#endif /* _XKBGEOM_H_ */
632