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