xkbgeom.h revision 4642e01f
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
314_XFUNCPROTOBEGIN
315
316extern	XkbPropertyPtr
317XkbAddGeomProperty(
318    XkbGeometryPtr	/* geom */,
319    char *		/* name */,
320    char *		/* value */
321);
322
323extern	XkbKeyAliasPtr
324XkbAddGeomKeyAlias(
325    XkbGeometryPtr	/* geom */,
326    char *		/* alias */,
327    char *		/* real */
328);
329
330extern	XkbColorPtr
331XkbAddGeomColor(
332    XkbGeometryPtr	/* geom */,
333    char *		/* spec */,
334    unsigned int	/* pixel */
335);
336
337extern	XkbOutlinePtr
338XkbAddGeomOutline(
339    XkbShapePtr		/* shape */,
340    int			/* sz_points */
341);
342
343extern XkbShapePtr
344XkbAddGeomShape(
345    XkbGeometryPtr	/* geom */,
346    Atom		/* name */,
347    int			/* sz_outlines */
348);
349
350extern XkbKeyPtr
351XkbAddGeomKey(
352    XkbRowPtr		/* row */
353);
354
355extern XkbRowPtr
356XkbAddGeomRow(
357    XkbSectionPtr	/* section */,
358    int			/* sz_keys */
359);
360
361extern XkbSectionPtr
362XkbAddGeomSection(
363    XkbGeometryPtr	/* geom */,
364    Atom		/* name */,
365    int			/* sz_rows */,
366    int			/* sz_doodads */,
367    int			/* sz_overlays */
368);
369
370extern XkbOverlayPtr
371XkbAddGeomOverlay(
372    XkbSectionPtr	/* section */,
373    Atom		/* name */,
374    int			/* sz_rows */
375);
376
377extern XkbOverlayRowPtr
378XkbAddGeomOverlayRow(
379    XkbOverlayPtr	/* overlay */,
380    int			/* row_under */,
381    int			/* sz_keys */
382);
383
384extern XkbOverlayKeyPtr
385XkbAddGeomOverlayKey(
386    XkbOverlayPtr	/* overlay */,
387    XkbOverlayRowPtr	/* row */,
388    char *		/* over */,
389    char *		/* under */
390);
391
392extern XkbDoodadPtr
393XkbAddGeomDoodad(
394    XkbGeometryPtr	/* geom */,
395    XkbSectionPtr	/* section */,
396    Atom		/* name */
397);
398
399
400extern void
401XkbFreeGeomKeyAliases(
402    XkbGeometryPtr	/* geom */,
403    int			/* first */,
404    int			/* count */,
405    Bool		/* freeAll */
406);
407
408extern void
409XkbFreeGeomColors(
410    XkbGeometryPtr	/* geom */,
411    int			/* first */,
412    int			/* count */,
413    Bool		/* freeAll */
414);
415
416extern void
417XkbFreeGeomDoodads(
418    XkbDoodadPtr	/* doodads */,
419    int			/* nDoodads */,
420    Bool		/* freeAll */
421);
422
423
424extern void
425XkbFreeGeomProperties(
426    XkbGeometryPtr	/* geom */,
427    int			/* first */,
428    int			/* count */,
429    Bool		/* freeAll */
430);
431
432extern void
433XkbFreeGeomOverlayKeys(
434    XkbOverlayRowPtr	/* row */,
435    int			/* first */,
436    int			/* count */,
437    Bool		/* freeAll */
438);
439
440extern void
441XkbFreeGeomOverlayRows(
442    XkbOverlayPtr	/* overlay */,
443    int			/* first */,
444    int			/* count */,
445    Bool		/* freeAll */
446);
447
448extern void
449XkbFreeGeomOverlays(
450    XkbSectionPtr	/* section */,
451    int			/* first */,
452    int			/* count */,
453    Bool		/* freeAll */
454);
455
456extern void
457XkbFreeGeomKeys(
458    XkbRowPtr		/* row */,
459    int			/* first */,
460    int			/* count */,
461    Bool		/* freeAll */
462);
463
464extern void
465XkbFreeGeomRows(
466    XkbSectionPtr	/* section */,
467    int			/* first */,
468    int			/* count */,
469    Bool		/* freeAll */
470);
471
472extern void
473XkbFreeGeomSections(
474    XkbGeometryPtr	/* geom */,
475    int			/* first */,
476    int			/* count */,
477    Bool		/* freeAll */
478);
479
480
481extern void
482XkbFreeGeomPoints(
483    XkbOutlinePtr	/* outline */,
484    int			/* first */,
485    int			/* count */,
486    Bool		/* freeAll */
487);
488
489extern void
490XkbFreeGeomOutlines(
491    XkbShapePtr		/* shape */,
492    int			/* first */,
493    int			/* count */,
494    Bool		/* freeAll */
495);
496
497extern void
498XkbFreeGeomShapes(
499    XkbGeometryPtr	/* geom */,
500    int			/* first */,
501    int			/* count */,
502    Bool		/* freeAll */
503);
504
505extern void
506XkbFreeGeometry(
507    XkbGeometryPtr	/* geom */,
508    unsigned int	/* which */,
509    Bool		/* freeMap */
510);
511
512extern Status
513XkbAllocGeomProps(
514    XkbGeometryPtr	/* geom */,
515    int			/* nProps */
516);
517
518extern Status
519XkbAllocGeomKeyAliases(
520    XkbGeometryPtr	/* geom */,
521    int			/* nAliases */
522);
523
524extern Status
525XkbAllocGeomColors(
526    XkbGeometryPtr	/* geom */,
527    int			/* nColors */
528);
529
530extern Status
531XkbAllocGeomShapes(
532    XkbGeometryPtr	/* geom */,
533    int			/* nShapes */
534);
535
536extern Status
537XkbAllocGeomSections(
538    XkbGeometryPtr	/* geom */,
539    int			/* nSections */
540);
541
542extern Status
543XkbAllocGeomOverlays(
544    XkbSectionPtr	/* section */,
545    int			/* num_needed */
546);
547
548extern Status
549XkbAllocGeomOverlayRows(
550    XkbOverlayPtr	/* overlay */,
551    int			/* num_needed */
552);
553
554extern Status
555XkbAllocGeomOverlayKeys(
556    XkbOverlayRowPtr	/* row */,
557    int			/* num_needed */
558);
559
560extern Status
561XkbAllocGeomDoodads(
562    XkbGeometryPtr	/* geom */,
563    int			/* nDoodads */
564);
565
566extern Status
567XkbAllocGeomSectionDoodads(
568    XkbSectionPtr	/* section */,
569    int			/* nDoodads */
570);
571
572extern Status
573XkbAllocGeomOutlines(
574    XkbShapePtr		/* shape */,
575    int			/* nOL */
576);
577
578extern Status
579XkbAllocGeomRows(
580    XkbSectionPtr	/* section */,
581    int			/* nRows */
582);
583
584extern Status
585XkbAllocGeomPoints(
586    XkbOutlinePtr	/* ol */,
587    int			/* nPts */
588);
589
590extern Status
591XkbAllocGeomKeys(
592    XkbRowPtr		/* row */,
593    int			/* nKeys */
594);
595
596extern	Status
597XkbAllocGeometry(
598	XkbDescPtr		/* xkb */,
599	XkbGeometrySizesPtr	/* sizes */
600);
601
602extern	Bool
603XkbComputeShapeTop(
604	XkbShapePtr		/* shape */,
605	XkbBoundsPtr		/* bounds */
606);
607
608extern	Bool
609XkbComputeShapeBounds(
610	XkbShapePtr		/* shape */
611);
612
613extern	Bool
614XkbComputeRowBounds(
615	XkbGeometryPtr		/* geom */,
616	XkbSectionPtr		/* section */,
617	XkbRowPtr		/* row */
618);
619
620extern	Bool
621XkbComputeSectionBounds(
622	XkbGeometryPtr		/* geom */,
623	XkbSectionPtr		/* section */
624);
625
626extern	char *
627XkbFindOverlayForKey(
628	XkbGeometryPtr		/* geom */,
629	XkbSectionPtr		/* wanted */,
630	char *			/* under */
631);
632
633_XFUNCPROTOEND
634
635#endif /* _XKBGEOM_H_ */
636