📄 nano-x.h
字号:
#define GR_EVENT_TYPE_CLIENT_DATA_REQ 18
#define GR_EVENT_TYPE_CLIENT_DATA 19
#define GR_EVENT_TYPE_SELECTION_CHANGED 20
#define GR_EVENT_TYPE_TIMER 21
#define GR_EVENT_TYPE_PORTRAIT_CHANGED 22
/* Event masks */
#define GR_EVENTMASK(n) (((GR_EVENT_MASK) 1) << (n))
#define GR_EVENT_MASK_NONE GR_EVENTMASK(GR_EVENT_TYPE_NONE)
#define GR_EVENT_MASK_ERROR 0x80000000L
#define GR_EVENT_MASK_EXPOSURE GR_EVENTMASK(GR_EVENT_TYPE_EXPOSURE)
#define GR_EVENT_MASK_BUTTON_DOWN GR_EVENTMASK(GR_EVENT_TYPE_BUTTON_DOWN)
#define GR_EVENT_MASK_BUTTON_UP GR_EVENTMASK(GR_EVENT_TYPE_BUTTON_UP)
#define GR_EVENT_MASK_MOUSE_ENTER GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_ENTER)
#define GR_EVENT_MASK_MOUSE_EXIT GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_EXIT)
#define GR_EVENT_MASK_MOUSE_MOTION GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_MOTION)
#define GR_EVENT_MASK_MOUSE_POSITION GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_POSITION)
#define GR_EVENT_MASK_KEY_DOWN GR_EVENTMASK(GR_EVENT_TYPE_KEY_DOWN)
#define GR_EVENT_MASK_KEY_UP GR_EVENTMASK(GR_EVENT_TYPE_KEY_UP)
#define GR_EVENT_MASK_FOCUS_IN GR_EVENTMASK(GR_EVENT_TYPE_FOCUS_IN)
#define GR_EVENT_MASK_FOCUS_OUT GR_EVENTMASK(GR_EVENT_TYPE_FOCUS_OUT)
#define GR_EVENT_MASK_FDINPUT GR_EVENTMASK(GR_EVENT_TYPE_FDINPUT)
#define GR_EVENT_MASK_UPDATE GR_EVENTMASK(GR_EVENT_TYPE_UPDATE)
#define GR_EVENT_MASK_CHLD_UPDATE GR_EVENTMASK(GR_EVENT_TYPE_CHLD_UPDATE)
#define GR_EVENT_MASK_CLOSE_REQ GR_EVENTMASK(GR_EVENT_TYPE_CLOSE_REQ)
#define GR_EVENT_MASK_TIMEOUT GR_EVENTMASK(GR_EVENT_TYPE_TIMEOUT)
#define GR_EVENT_MASK_SCREENSAVER GR_EVENTMASK(GR_EVENT_TYPE_SCREENSAVER)
#define GR_EVENT_MASK_CLIENT_DATA_REQ GR_EVENTMASK(GR_EVENT_TYPE_CLIENT_DATA_REQ)
#define GR_EVENT_MASK_CLIENT_DATA GR_EVENTMASK(GR_EVENT_TYPE_CLIENT_DATA)
#define GR_EVENT_MASK_SELECTION_CHANGED GR_EVENTMASK(GR_EVENT_TYPE_SELECTION_CHANGED)
#define GR_EVENT_MASK_TIMER GR_EVENTMASK(GR_EVENT_TYPE_TIMER)
#define GR_EVENT_MASK_PORTRAIT_CHANGED GR_EVENTMASK(GR_EVENT_TYPE_PORTRAIT_CHANGED)
#define GR_EVENT_MASK_ALL ((GR_EVENT_MASK) -1L)
/* update event types */
#define GR_UPDATE_MAP 1
#define GR_UPDATE_UNMAP 2
#define GR_UPDATE_MOVE 3
#define GR_UPDATE_SIZE 4
#define GR_UPDATE_UNMAPTEMP 5 /* unmap during window move/resize*/
#define GR_UPDATE_ACTIVATE 6 /* toplevel window [de]activate*/
#define GR_UPDATE_DESTROY 7
/* Event for errors detected by the server.
* These events are not delivered to GrGetNextEvent, but instead call
* the user supplied error handling function. Only the first one of
* these errors at a time is saved for delivery to the client since
* there is not much to be done about errors anyway except complain
* and exit.
*/
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_FUNC_NAME name; /* function name which failed */
GR_ERROR code; /* error code */
GR_ID id; /* resource id (maybe useless) */
} GR_EVENT_ERROR;
/* Event for a mouse button pressed down or released. */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* window id event delivered to */
GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
GR_COORD rootx; /* root window x coordinate */
GR_COORD rooty; /* root window y coordinate */
GR_COORD x; /* window x coordinate of mouse */
GR_COORD y; /* window y coordinate of mouse */
GR_BUTTON buttons; /* current state of all buttons */
GR_BUTTON changebuttons; /* buttons which went down or up */
GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
GR_TIMEOUT time; /* tickcount time value*/
} GR_EVENT_BUTTON;
/* Event for a keystroke typed for the window with has focus. */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* window id event delived to */
GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
GR_COORD rootx; /* root window x coordinate */
GR_COORD rooty; /* root window y coordinate */
GR_COORD x; /* window x coordinate of mouse */
GR_COORD y; /* window y coordinate of mouse */
GR_BUTTON buttons; /* current state of buttons */
GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
GR_KEY ch; /* 16-bit unicode key value, MWKEY_xxx */
GR_SCANCODE scancode; /* OEM scancode value if available*/
} GR_EVENT_KEYSTROKE;
/* Event for exposure for a region of a window. */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* window id */
GR_COORD x; /* window x coordinate of exposure */
GR_COORD y; /* window y coordinate of exposure */
GR_SIZE width; /* width of exposure */
GR_SIZE height; /* height of exposure */
} GR_EVENT_EXPOSURE;
/* General events for focus in or focus out for a window, or mouse enter
* or mouse exit from a window, or window unmapping or mapping, etc.
* Server portrait mode changes are also sent using this event to
* all windows that request it.
*/
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* window id */
GR_WINDOW_ID otherid; /* new/old focus id for focus events*/
} GR_EVENT_GENERAL;
/* Events for mouse motion or mouse position. */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* window id event delivered to */
GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
GR_COORD rootx; /* root window x coordinate */
GR_COORD rooty; /* root window y coordinate */
GR_COORD x; /* window x coordinate of mouse */
GR_COORD y; /* window y coordinate of mouse */
GR_BUTTON buttons; /* current state of buttons */
GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
} GR_EVENT_MOUSE;
/* GrRegisterInput event*/
typedef struct {
GR_EVENT_TYPE type; /* event type */
int fd; /* input fd*/
} GR_EVENT_FDINPUT;
/* GR_EVENT_TYPE_UPDATE */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* select window id*/
GR_WINDOW_ID subwid; /* update window id (=wid for UPDATE event)*/
GR_COORD x; /* new window x coordinate */
GR_COORD y; /* new window y coordinate */
GR_SIZE width; /* new width */
GR_SIZE height; /* new height */
GR_UPDATE_TYPE utype; /* update_type */
} GR_EVENT_UPDATE;
/* GR_EVENT_TYPE_SCREENSAVER */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_BOOL activate; /* true = activate, false = deactivate */
} GR_EVENT_SCREENSAVER;
/* GR_EVENT_TYPE_CLIENT_DATA_REQ */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* ID of requested window */
GR_WINDOW_ID rid; /* ID of window to send data to */
GR_SERIALNO serial; /* Serial number of transaction */
GR_MIMETYPE mimetype; /* Type to supply data as */
} GR_EVENT_CLIENT_DATA_REQ;
/* GR_EVENT_TYPE_CLIENT_DATA */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID wid; /* ID of window data is destined for */
GR_WINDOW_ID rid; /* ID of window data is from */
GR_SERIALNO serial; /* Serial number of transaction */
unsigned long len; /* Total length of data */
unsigned long datalen; /* Length of following data */
void *data; /* Pointer to data (filled in on client side) */
} GR_EVENT_CLIENT_DATA;
/* GR_EVENT_TYPE_SELECTION_CHANGED */
typedef struct {
GR_EVENT_TYPE type; /* event type */
GR_WINDOW_ID new_owner; /* ID of new selection owner */
} GR_EVENT_SELECTION_CHANGED;
/* GR_EVENT_TYPE_TIMER */
typedef struct {
GR_EVENT_TYPE type; /* event type, GR_EVENT_TYPE_TIMER */
GR_WINDOW_ID wid; /* ID of window timer is destined for */
GR_TIMER_ID tid; /* ID of expired timer */
} GR_EVENT_TIMER;
/*
* Union of all possible event structures.
* This is the structure returned by the GrGetNextEvent and similar routines.
*/
typedef union {
GR_EVENT_TYPE type; /* event type */
GR_EVENT_ERROR error; /* error event */
GR_EVENT_GENERAL general; /* general window events */
GR_EVENT_BUTTON button; /* button events */
GR_EVENT_KEYSTROKE keystroke; /* keystroke events */
GR_EVENT_EXPOSURE exposure; /* exposure events */
GR_EVENT_MOUSE mouse; /* mouse motion events */
GR_EVENT_FDINPUT fdinput; /* fd input events*/
GR_EVENT_UPDATE update; /* window update events */
GR_EVENT_SCREENSAVER screensaver; /* Screen saver events */
GR_EVENT_CLIENT_DATA_REQ clientdatareq; /* Request for client data events */
GR_EVENT_CLIENT_DATA clientdata; /* Client data events */
GR_EVENT_SELECTION_CHANGED selectionchanged; /* Selection owner changed */
GR_EVENT_TIMER timer;
} GR_EVENT;
typedef void (*GR_FNCALLBACKEVENT)(GR_EVENT *);
/* Pixel packings within words. */
#define GR_BITMAPBITS (sizeof(GR_BITMAP) * 8)
#define GR_ZEROBITS ((GR_BITMAP) 0x0000)
#define GR_ONEBITS ((GR_BITMAP) 0xffff)
#define GR_FIRSTBIT ((GR_BITMAP) 0x8000)
#define GR_LASTBIT ((GR_BITMAP) 0x0001)
#define GR_BITVALUE(n) ((GR_BITMAP) (((GR_BITMAP) 1) << (n)))
#define GR_SHIFTBIT(m) ((GR_BITMAP) ((m) << 1))
#define GR_NEXTBIT(m) ((GR_BITMAP) ((m) >> 1))
#define GR_TESTBIT(m) (((m) & GR_FIRSTBIT) != 0)
/* Size of bitmaps. */
#define GR_BITMAP_SIZE(width, height) ((height) * \
(((width) + sizeof(GR_BITMAP) * 8 - 1) / (sizeof(GR_BITMAP) * 8)))
#define GR_MAX_BITMAP_SIZE \
GR_BITMAP_SIZE(MWMAX_CURSOR_SIZE, MWMAX_CURSOR_SIZE)
/* GrGetSysColor colors*/
/* desktop background*/
#define GR_COLOR_DESKTOP 0
/* caption colors*/
#define GR_COLOR_ACTIVECAPTION 1
#define GR_COLOR_ACTIVECAPTIONTEXT 2
#define GR_COLOR_INACTIVECAPTION 3
#define GR_COLOR_INACTIVECAPTIONTEXT 4
/* 3d border shades*/
#define GR_COLOR_WINDOWFRAME 5
#define GR_COLOR_BTNSHADOW 6
#define GR_COLOR_3DLIGHT 7
#define GR_COLOR_BTNHIGHLIGHT 8
/* top level application window backgrounds/text*/
#define GR_COLOR_APPWINDOW 9
#define GR_COLOR_APPTEXT 10
/* button control backgrounds/text (usually same as app window colors)*/
#define GR_COLOR_BTNFACE 11
#define GR_COLOR_BTNTEXT 12
/* edit/listbox control backgrounds/text, selected highlights*/
#define GR_COLOR_WINDOW 13
#define GR_COLOR_WINDOWTEXT 14
#define GR_COLOR_HIGHLIGHT 15
#define GR_COLOR_HIGHLIGHTTEXT 16
#define GR_COLOR_GRAYTEXT 17
/* menu backgrounds/text*/
#define GR_COLOR_MENUTEXT 18
#define GR_COLOR_MENU 19
/* Error strings per error number*/
#define GR_ERROR_STRINGS \
"", \
"Bad window id: %d\n", \
"Bad graphics context: %d\n", \
"Bad cursor size\n", \
"Out of server memory\n", \
"Bad window size: %d\n", \
"Keyboard error\n", \
"Mouse error\n", \
"Input only window: %d\n", \
"Illegal on root window: %d\n", \
"Clipping overflow\n", \
"Screen error\n", \
"Unmapped focus window: %d\n", \
"Bad drawing mode gc: %d\n"
extern char *nxErrorStrings[];
/* Public graphics routines. */
void GrFlush(void);
int GrOpen(void);
void GrClose(void);
void GrDelay(GR_TIMEOUT msecs);
void GrGetScreenInfo(GR_SCREEN_INFO *sip);
GR_COLOR GrGetSysColor(int index);
GR_WINDOW_ID GrNewWindow(GR_WINDOW_ID parent, GR_COORD x, GR_COORD y,
GR_SIZE width, GR_SIZE height, GR_SIZE bordersize,
GR_COLOR background, GR_COLOR bordercolor);
GR_WINDOW_ID GrNewPixmap(GR_SIZE width, GR_SIZE height, void * addr);
GR_WINDOW_ID GrNewInputWindow(GR_WINDOW_ID parent, GR_COORD x, GR_COORD y,
GR_SIZE width, GR_SIZE height);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -