xref: /OK3568_Linux_fs/external/xserver/xkb/xkbgeom.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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_ */
564