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