You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
564 lines
17 KiB
C
564 lines
17 KiB
C
/************************************************************
|
|
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
|
|
|
|
Permission to use, copy, modify, and distribute this
|
|
software and its documentation for any purpose and without
|
|
fee is hereby granted, provided that the above copyright
|
|
notice appear in all copies and that both that copyright
|
|
notice and this permission notice appear in supporting
|
|
documentation, and that the name of Silicon Graphics not be
|
|
used in advertising or publicity pertaining to distribution
|
|
of the software without specific prior written permission.
|
|
Silicon Graphics makes no representation about the suitability
|
|
of this software for any purpose. It is provided "as is"
|
|
without any express or implied warranty.
|
|
|
|
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
|
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
|
|
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
|
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
|
|
THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
********************************************************/
|
|
|
|
#ifndef _XKBGEOM_H_
|
|
#define _XKBGEOM_H_
|
|
|
|
#include "xkbstr.h"
|
|
|
|
#define XkbAddGeomKeyAlias SrvXkbAddGeomKeyAlias
|
|
#define XkbAddGeomColor SrvXkbAddGeomColor
|
|
#define XkbAddGeomDoodad SrvXkbAddGeomDoodad
|
|
#define XkbAddGeomKey SrvXkbAddGeomKey
|
|
#define XkbAddGeomOutline SrvXkbAddGeomOutline
|
|
#define XkbAddGeomOverlay SrvXkbAddGeomOverlay
|
|
#define XkbAddGeomOverlayRow SrvXkbAddGeomOverlayRow
|
|
#define XkbAddGeomOverlayKey SrvXkbAddGeomOverlayKey
|
|
#define XkbAddGeomProperty SrvXkbAddGeomProperty
|
|
#define XkbAddGeomRow SrvXkbAddGeomRow
|
|
#define XkbAddGeomSection SrvXkbAddGeomSection
|
|
#define XkbAddGeomShape SrvXkbAddGeomShape
|
|
#define XkbAllocGeometry SrvXkbAllocGeometry
|
|
#define XkbFreeGeomKeyAliases SrvXkbFreeGeomKeyAliases
|
|
#define XkbFreeGeomColors SrvXkbFreeGeomColors
|
|
#define XkbFreeGeomDoodads SrvXkbFreeGeomDoodads
|
|
#define XkbFreeGeomProperties SrvXkbFreeGeomProperties
|
|
#define XkbFreeGeomKeys SrvXkbFreeGeomKeys
|
|
#define XkbFreeGeomRows SrvXkbFreeGeomRows
|
|
#define XkbFreeGeomSections SrvXkbFreeGeomSections
|
|
#define XkbFreeGeomPoints SrvXkbFreeGeomPoints
|
|
#define XkbFreeGeomOutlines SrvXkbFreeGeomOutlines
|
|
#define XkbFreeGeomShapes SrvXkbFreeGeomShapes
|
|
#define XkbFreeGeometry SrvXkbFreeGeometry
|
|
|
|
typedef struct _XkbProperty {
|
|
char *name;
|
|
char *value;
|
|
} XkbPropertyRec, *XkbPropertyPtr;
|
|
|
|
typedef struct _XkbColor {
|
|
unsigned int pixel;
|
|
char *spec;
|
|
} XkbColorRec, *XkbColorPtr;
|
|
|
|
typedef struct _XkbPoint {
|
|
short x;
|
|
short y;
|
|
} XkbPointRec, *XkbPointPtr;
|
|
|
|
typedef struct _XkbBounds {
|
|
short x1, y1;
|
|
short x2, y2;
|
|
} XkbBoundsRec, *XkbBoundsPtr;
|
|
|
|
#define XkbBoundsWidth(b) (((b)->x2)-((b)->x1))
|
|
#define XkbBoundsHeight(b) (((b)->y2)-((b)->y1))
|
|
|
|
typedef struct _XkbOutline {
|
|
unsigned short num_points;
|
|
unsigned short sz_points;
|
|
unsigned short corner_radius;
|
|
XkbPointPtr points;
|
|
} XkbOutlineRec, *XkbOutlinePtr;
|
|
|
|
typedef struct _XkbShape {
|
|
Atom name;
|
|
unsigned short num_outlines;
|
|
unsigned short sz_outlines;
|
|
XkbOutlinePtr outlines;
|
|
XkbOutlinePtr approx;
|
|
XkbOutlinePtr primary;
|
|
XkbBoundsRec bounds;
|
|
} XkbShapeRec, *XkbShapePtr;
|
|
|
|
#define XkbOutlineIndex(s,o) ((int)((o)-&(s)->outlines[0]))
|
|
|
|
typedef struct _XkbShapeDoodad {
|
|
Atom name;
|
|
unsigned char type;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
short angle;
|
|
unsigned short color_ndx;
|
|
unsigned short shape_ndx;
|
|
} XkbShapeDoodadRec, *XkbShapeDoodadPtr;
|
|
|
|
#define XkbShapeDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
#define XkbShapeDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
#define XkbSetShapeDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
#define XkbSetShapeDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
typedef struct _XkbTextDoodad {
|
|
Atom name;
|
|
unsigned char type;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
short angle;
|
|
short width;
|
|
short height;
|
|
unsigned short color_ndx;
|
|
char *text;
|
|
char *font;
|
|
} XkbTextDoodadRec, *XkbTextDoodadPtr;
|
|
|
|
#define XkbTextDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
#define XkbSetTextDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
typedef struct _XkbIndicatorDoodad {
|
|
Atom name;
|
|
unsigned char type;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
short angle;
|
|
unsigned short shape_ndx;
|
|
unsigned short on_color_ndx;
|
|
unsigned short off_color_ndx;
|
|
} XkbIndicatorDoodadRec, *XkbIndicatorDoodadPtr;
|
|
|
|
#define XkbIndicatorDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
#define XkbIndicatorDoodadOnColor(g,d) (&(g)->colors[(d)->on_color_ndx])
|
|
#define XkbIndicatorDoodadOffColor(g,d) (&(g)->colors[(d)->off_color_ndx])
|
|
#define XkbSetIndicatorDoodadOnColor(g,d,c) \
|
|
((d)->on_color_ndx= (c)-&(g)->colors[0])
|
|
#define XkbSetIndicatorDoodadOffColor(g,d,c) \
|
|
((d)->off_color_ndx= (c)-&(g)->colors[0])
|
|
#define XkbSetIndicatorDoodadShape(g,d,s) \
|
|
((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
typedef struct _XkbLogoDoodad {
|
|
Atom name;
|
|
unsigned char type;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
short angle;
|
|
unsigned short color_ndx;
|
|
unsigned short shape_ndx;
|
|
char *logo_name;
|
|
} XkbLogoDoodadRec, *XkbLogoDoodadPtr;
|
|
|
|
#define XkbLogoDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
#define XkbLogoDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
#define XkbSetLogoDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
#define XkbSetLogoDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
typedef struct _XkbAnyDoodad {
|
|
Atom name;
|
|
unsigned char type;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
short angle;
|
|
} XkbAnyDoodadRec, *XkbAnyDoodadPtr;
|
|
|
|
typedef union _XkbDoodad {
|
|
XkbAnyDoodadRec any;
|
|
XkbShapeDoodadRec shape;
|
|
XkbTextDoodadRec text;
|
|
XkbIndicatorDoodadRec indicator;
|
|
XkbLogoDoodadRec logo;
|
|
} XkbDoodadRec, *XkbDoodadPtr;
|
|
|
|
#define XkbUnknownDoodad 0
|
|
#define XkbOutlineDoodad 1
|
|
#define XkbSolidDoodad 2
|
|
#define XkbTextDoodad 3
|
|
#define XkbIndicatorDoodad 4
|
|
#define XkbLogoDoodad 5
|
|
|
|
typedef struct _XkbKey {
|
|
XkbKeyNameRec name;
|
|
short gap;
|
|
unsigned char shape_ndx;
|
|
unsigned char color_ndx;
|
|
} XkbKeyRec, *XkbKeyPtr;
|
|
|
|
#define XkbKeyShape(g,k) (&(g)->shapes[(k)->shape_ndx])
|
|
#define XkbKeyColor(g,k) (&(g)->colors[(k)->color_ndx])
|
|
#define XkbSetKeyShape(g,k,s) ((k)->shape_ndx= (s)-&(g)->shapes[0])
|
|
#define XkbSetKeyColor(g,k,c) ((k)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
typedef struct _XkbRow {
|
|
short top;
|
|
short left;
|
|
unsigned short num_keys;
|
|
unsigned short sz_keys;
|
|
int vertical;
|
|
XkbKeyPtr keys;
|
|
XkbBoundsRec bounds;
|
|
} XkbRowRec, *XkbRowPtr;
|
|
|
|
typedef struct _XkbSection {
|
|
Atom name;
|
|
unsigned char priority;
|
|
short top;
|
|
short left;
|
|
unsigned short width;
|
|
unsigned short height;
|
|
short angle;
|
|
unsigned short num_rows;
|
|
unsigned short num_doodads;
|
|
unsigned short num_overlays;
|
|
unsigned short sz_rows;
|
|
unsigned short sz_doodads;
|
|
unsigned short sz_overlays;
|
|
XkbRowPtr rows;
|
|
XkbDoodadPtr doodads;
|
|
XkbBoundsRec bounds;
|
|
struct _XkbOverlay *overlays;
|
|
} XkbSectionRec, *XkbSectionPtr;
|
|
|
|
typedef struct _XkbOverlayKey {
|
|
XkbKeyNameRec over;
|
|
XkbKeyNameRec under;
|
|
} XkbOverlayKeyRec, *XkbOverlayKeyPtr;
|
|
|
|
typedef struct _XkbOverlayRow {
|
|
unsigned short row_under;
|
|
unsigned short num_keys;
|
|
unsigned short sz_keys;
|
|
XkbOverlayKeyPtr keys;
|
|
} XkbOverlayRowRec, *XkbOverlayRowPtr;
|
|
|
|
typedef struct _XkbOverlay {
|
|
Atom name;
|
|
XkbSectionPtr section_under;
|
|
unsigned short num_rows;
|
|
unsigned short sz_rows;
|
|
XkbOverlayRowPtr rows;
|
|
XkbBoundsPtr bounds;
|
|
} XkbOverlayRec, *XkbOverlayPtr;
|
|
|
|
typedef struct _XkbGeometry {
|
|
Atom name;
|
|
unsigned short width_mm;
|
|
unsigned short height_mm;
|
|
char *label_font;
|
|
XkbColorPtr label_color;
|
|
XkbColorPtr base_color;
|
|
unsigned short sz_properties;
|
|
unsigned short sz_colors;
|
|
unsigned short sz_shapes;
|
|
unsigned short sz_sections;
|
|
unsigned short sz_doodads;
|
|
unsigned short sz_key_aliases;
|
|
unsigned short num_properties;
|
|
unsigned short num_colors;
|
|
unsigned short num_shapes;
|
|
unsigned short num_sections;
|
|
unsigned short num_doodads;
|
|
unsigned short num_key_aliases;
|
|
XkbPropertyPtr properties;
|
|
XkbColorPtr colors;
|
|
XkbShapePtr shapes;
|
|
XkbSectionPtr sections;
|
|
XkbDoodadPtr doodads;
|
|
XkbKeyAliasPtr key_aliases;
|
|
} XkbGeometryRec;
|
|
|
|
#define XkbGeomColorIndex(g,c) ((int)((c)-&(g)->colors[0]))
|
|
|
|
#define XkbGeomPropertiesMask (1<<0)
|
|
#define XkbGeomColorsMask (1<<1)
|
|
#define XkbGeomShapesMask (1<<2)
|
|
#define XkbGeomSectionsMask (1<<3)
|
|
#define XkbGeomDoodadsMask (1<<4)
|
|
#define XkbGeomKeyAliasesMask (1<<5)
|
|
#define XkbGeomAllMask (0x3f)
|
|
|
|
typedef struct _XkbGeometrySizes {
|
|
unsigned int which;
|
|
unsigned short num_properties;
|
|
unsigned short num_colors;
|
|
unsigned short num_shapes;
|
|
unsigned short num_sections;
|
|
unsigned short num_doodads;
|
|
unsigned short num_key_aliases;
|
|
} XkbGeometrySizesRec, *XkbGeometrySizesPtr;
|
|
|
|
/**
|
|
* Specifies which items should be cleared in an XKB geometry array
|
|
* when the array is reallocated.
|
|
*/
|
|
typedef enum {
|
|
XKB_GEOM_CLEAR_NONE, /* Don't clear any items, just reallocate. */
|
|
XKB_GEOM_CLEAR_EXCESS, /* Clear new extra items after reallocation. */
|
|
XKB_GEOM_CLEAR_ALL /* Clear all items after reallocation. */
|
|
} XkbGeomClearance;
|
|
|
|
extern XkbPropertyPtr XkbAddGeomProperty(XkbGeometryPtr /* geom */ ,
|
|
char * /* name */ ,
|
|
char * /* value */
|
|
);
|
|
|
|
extern XkbKeyAliasPtr XkbAddGeomKeyAlias(XkbGeometryPtr /* geom */ ,
|
|
char * /* alias */ ,
|
|
char * /* real */
|
|
);
|
|
|
|
extern XkbColorPtr XkbAddGeomColor(XkbGeometryPtr /* geom */ ,
|
|
char * /* spec */ ,
|
|
unsigned int /* pixel */
|
|
);
|
|
|
|
extern XkbOutlinePtr XkbAddGeomOutline(XkbShapePtr /* shape */ ,
|
|
int /* sz_points */
|
|
);
|
|
|
|
extern XkbShapePtr XkbAddGeomShape(XkbGeometryPtr /* geom */ ,
|
|
Atom /* name */ ,
|
|
int /* sz_outlines */
|
|
);
|
|
|
|
extern XkbKeyPtr XkbAddGeomKey(XkbRowPtr /* row */
|
|
);
|
|
|
|
extern XkbRowPtr XkbAddGeomRow(XkbSectionPtr /* section */ ,
|
|
int /* sz_keys */
|
|
);
|
|
|
|
extern XkbSectionPtr XkbAddGeomSection(XkbGeometryPtr /* geom */ ,
|
|
Atom /* name */ ,
|
|
int /* sz_rows */ ,
|
|
int /* sz_doodads */ ,
|
|
int /* sz_overlays */
|
|
);
|
|
|
|
extern XkbOverlayPtr XkbAddGeomOverlay(XkbSectionPtr /* section */ ,
|
|
Atom /* name */ ,
|
|
int /* sz_rows */
|
|
);
|
|
|
|
extern XkbOverlayRowPtr XkbAddGeomOverlayRow(XkbOverlayPtr /* overlay */ ,
|
|
int /* row_under */ ,
|
|
int /* sz_keys */
|
|
);
|
|
|
|
extern XkbOverlayKeyPtr XkbAddGeomOverlayKey(XkbOverlayPtr /* overlay */ ,
|
|
XkbOverlayRowPtr /* row */ ,
|
|
char * /* over */ ,
|
|
char * /* under */
|
|
);
|
|
|
|
extern XkbDoodadPtr XkbAddGeomDoodad(XkbGeometryPtr /* geom */ ,
|
|
XkbSectionPtr /* section */ ,
|
|
Atom /* name */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomKeyAliases(XkbGeometryPtr /* geom */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomColors(XkbGeometryPtr /* geom */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomDoodads(XkbDoodadPtr /* doodads */ ,
|
|
int /* nDoodads */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomProperties(XkbGeometryPtr /* geom */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomOverlays(XkbSectionPtr /* section */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomKeys(XkbRowPtr /* row */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomRows(XkbSectionPtr /* section */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomSections(XkbGeometryPtr /* geom */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomPoints(XkbOutlinePtr /* outline */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomOutlines(XkbShapePtr /* shape */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeomShapes(XkbGeometryPtr /* geom */ ,
|
|
int /* first */ ,
|
|
int /* count */ ,
|
|
Bool /* freeAll */
|
|
);
|
|
|
|
extern void
|
|
XkbFreeGeometry(XkbGeometryPtr /* geom */ ,
|
|
unsigned int /* which */ ,
|
|
Bool /* freeMap */
|
|
);
|
|
|
|
extern Bool
|
|
XkbGeomRealloc(void ** /* buffer */ ,
|
|
int /* szItems */ ,
|
|
int /* nrItems */ ,
|
|
int /* itemSize */ ,
|
|
XkbGeomClearance /* clearance */
|
|
);
|
|
|
|
extern Status XkbAllocGeomProps(XkbGeometryPtr /* geom */ ,
|
|
int /* nProps */
|
|
);
|
|
|
|
extern Status XkbAllocGeomKeyAliases(XkbGeometryPtr /* geom */ ,
|
|
int /* nAliases */
|
|
);
|
|
|
|
extern Status XkbAllocGeomColors(XkbGeometryPtr /* geom */ ,
|
|
int /* nColors */
|
|
);
|
|
|
|
extern Status XkbAllocGeomShapes(XkbGeometryPtr /* geom */ ,
|
|
int /* nShapes */
|
|
);
|
|
|
|
extern Status XkbAllocGeomSections(XkbGeometryPtr /* geom */ ,
|
|
int /* nSections */
|
|
);
|
|
|
|
extern Status XkbAllocGeomOverlays(XkbSectionPtr /* section */ ,
|
|
int /* num_needed */
|
|
);
|
|
|
|
extern Status XkbAllocGeomOverlayRows(XkbOverlayPtr /* overlay */ ,
|
|
int /* num_needed */
|
|
);
|
|
|
|
extern Status XkbAllocGeomOverlayKeys(XkbOverlayRowPtr /* row */ ,
|
|
int /* num_needed */
|
|
);
|
|
|
|
extern Status XkbAllocGeomDoodads(XkbGeometryPtr /* geom */ ,
|
|
int /* nDoodads */
|
|
);
|
|
|
|
extern Status XkbAllocGeomSectionDoodads(XkbSectionPtr /* section */ ,
|
|
int /* nDoodads */
|
|
);
|
|
|
|
extern Status XkbAllocGeomOutlines(XkbShapePtr /* shape */ ,
|
|
int /* nOL */
|
|
);
|
|
|
|
extern Status XkbAllocGeomRows(XkbSectionPtr /* section */ ,
|
|
int /* nRows */
|
|
);
|
|
|
|
extern Status XkbAllocGeomPoints(XkbOutlinePtr /* ol */ ,
|
|
int /* nPts */
|
|
);
|
|
|
|
extern Status XkbAllocGeomKeys(XkbRowPtr /* row */ ,
|
|
int /* nKeys */
|
|
);
|
|
|
|
extern Status XkbAllocGeometry(XkbDescPtr /* xkb */ ,
|
|
XkbGeometrySizesPtr /* sizes */
|
|
);
|
|
|
|
extern Bool
|
|
XkbComputeShapeTop(XkbShapePtr /* shape */ ,
|
|
XkbBoundsPtr /* bounds */
|
|
);
|
|
|
|
extern Bool
|
|
XkbComputeShapeBounds(XkbShapePtr /* shape */
|
|
);
|
|
|
|
extern Bool
|
|
XkbComputeRowBounds(XkbGeometryPtr /* geom */ ,
|
|
XkbSectionPtr /* section */ ,
|
|
XkbRowPtr /* row */
|
|
);
|
|
|
|
extern Bool
|
|
XkbComputeSectionBounds(XkbGeometryPtr /* geom */ ,
|
|
XkbSectionPtr /* section */
|
|
);
|
|
|
|
extern char *XkbFindOverlayForKey(XkbGeometryPtr /* geom */ ,
|
|
XkbSectionPtr /* wanted */ ,
|
|
char * /* under */
|
|
);
|
|
|
|
#endif /* _XKBGEOM_H_ */
|