3 /* Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com>
4 * Copyright (c) 2000 Alex Holden <alex@linuxhacker.org>
5 * Copyright (c) 1991 David I. Bell
6 * Permission is granted to use, distribute, or modify this source,
7 * provided that this copyright notice remains intact.
9 * Nano-X public definition header file: user applications should
10 * include only this header file.
17 #include <cyg/kernel/kapi.h>
20 #include "mwtypes.h" /* exported engine MW* types*/
23 * The following typedefs are inherited from the Microwindows
26 typedef MWCOORD GR_COORD; /* coordinate value */
27 typedef MWCOORD GR_SIZE; /* size value */
28 typedef MWCOLORVAL GR_COLOR; /* full color value */
29 typedef MWPIXELVAL GR_PIXELVAL; /* hw pixel value*/
30 typedef MWIMAGEBITS GR_BITMAP; /* bitmap unit */
31 typedef MWUCHAR GR_CHAR; /* filename, window title */
32 typedef MWKEY GR_KEY; /* keystroke value*/
33 typedef MWSCANCODE GR_SCANCODE; /* oem keystroke scancode value*/
34 typedef MWKEYMOD GR_KEYMOD; /* keystroke modifiers*/
35 typedef MWSCREENINFO GR_SCREEN_INFO; /* screen information*/
36 typedef MWWINDOWFBINFO GR_WINDOW_FB_INFO; /* direct client-mapped window info*/
37 typedef MWFONTINFO GR_FONT_INFO; /* font information*/
38 typedef MWIMAGEINFO GR_IMAGE_INFO; /* image information*/
39 typedef MWIMAGEHDR GR_IMAGE_HDR; /* multicolor image representation*/
40 typedef MWLOGFONT GR_LOGFONT; /* logical font descriptor*/
41 typedef MWPALENTRY GR_PALENTRY; /* palette entry*/
42 typedef MWPOINT GR_POINT; /* definition of a point*/
43 typedef MWTIMEOUT GR_TIMEOUT; /* timeout value */
44 typedef MWFONTLIST GR_FONTLIST; /* list of fonts */
45 typedef MWKBINFO GR_KBINFO; /* keyboard information */
48 typedef int GR_COUNT; /* number of items */
49 typedef unsigned char GR_CHAR_WIDTH; /* width of character */
50 typedef unsigned int GR_ID; /* resource ids */
51 typedef GR_ID GR_DRAW_ID; /* drawable id */
52 typedef GR_DRAW_ID GR_WINDOW_ID; /* window or pixmap id */
53 typedef GR_ID GR_GC_ID; /* graphics context id */
54 typedef GR_ID GR_REGION_ID; /* region id */
55 typedef GR_ID GR_FONT_ID; /* font id */
56 typedef GR_ID GR_IMAGE_ID; /* image id */
57 typedef GR_ID GR_TIMER_ID; /* timer id */
58 typedef GR_ID GR_CURSOR_ID; /* cursor id */
59 typedef unsigned short GR_BOOL; /* boolean value */
60 typedef int GR_ERROR; /* error types*/
61 typedef int GR_EVENT_TYPE; /* event types */
62 typedef int GR_UPDATE_TYPE; /* window update types */
63 typedef unsigned long GR_EVENT_MASK; /* event masks */
64 typedef char GR_FUNC_NAME[25];/* function name */
65 typedef unsigned long GR_WM_PROPS; /* window property flags */
66 typedef unsigned long GR_SERIALNO; /* Selection request ID number */
67 typedef unsigned short GR_MIMETYPE; /* Index into mime type list */
68 typedef unsigned long GR_LENGTH; /* Length of a block of data */
69 typedef unsigned int GR_BUTTON; /* mouse button value*/
71 /* Nano-X rectangle, different from MWRECT*/
79 /* The root window id. */
80 #define GR_ROOT_WINDOW_ID ((GR_WINDOW_ID) 1)
82 /* GR_COLOR color constructor*/
83 #define GR_RGB(r,g,b) MWRGB(r,g,b)
85 /* Drawing modes for GrSetGCMode*/
86 #define GR_MODE_COPY MWMODE_COPY /* src*/
87 #define GR_MODE_SET MWMODE_COPY /* obsolete, use GR_MODE_COPY*/
88 #define GR_MODE_XOR MWMODE_XOR /* src ^ dst*/
89 #define GR_MODE_OR MWMODE_OR /* src | dst*/
90 #define GR_MODE_AND MWMODE_AND /* src & dst*/
91 #define GR_MODE_CLEAR MWMODE_CLEAR /* 0*/
92 #define GR_MODE_SETTO1 MWMODE_SETTO1 /* 11111111*/ /* will be GR_MODE_SET*/
93 #define GR_MODE_EQUIV MWMODE_EQUIV /* ~(src ^ dst)*/
94 #define GR_MODE_NOR MWMODE_NOR /* ~(src | dst)*/
95 #define GR_MODE_NAND MWMODE_NAND /* ~(src & dst)*/
96 #define GR_MODE_INVERT MWMODE_INVERT /* ~dst*/
97 #define GR_MODE_COPYINVERTED MWMODE_COPYINVERTED /* ~src*/
98 #define GR_MODE_ORINVERTED MWMODE_ORINVERTED /* ~src | dst*/
99 #define GR_MODE_ANDINVERTED MWMODE_ANDINVERTED /* ~src & dst*/
100 #define GR_MODE_ORREVERSE MWMODE_ORREVERSE /* src | ~dst*/
101 #define GR_MODE_ANDREVERSE MWMODE_ANDREVERSE /* src & ~dst*/
102 #define GR_MODE_NOOP MWMODE_NOOP /* dst*/
104 #define GR_MODE_DRAWMASK 0x00FF
105 #define GR_MODE_EXCLUDECHILDREN 0x0100 /* exclude children on clip*/
107 /* builtin font std names*/
108 #define GR_FONT_SYSTEM_VAR MWFONT_SYSTEM_VAR
109 #define GR_FONT_GUI_VAR MWFONT_GUI_VAR
110 #define GR_FONT_OEM_FIXED MWFONT_OEM_FIXED
111 #define GR_FONT_SYSTEM_FIXED MWFONT_SYSTEM_FIXED
113 /* GrText/GrGetTextSize encoding flags*/
114 #define GR_TFASCII MWTF_ASCII
115 #define GR_TFUTF8 MWTF_UTF8
116 #define GR_TFUC16 MWTF_UC16
117 #define GR_TFUC32 MWTF_UC32
118 #define GR_TFPACKMASK MWTF_PACKMASK
120 /* GrText alignment flags*/
121 #define GR_TFTOP MWTF_TOP
122 #define GR_TFBASELINE MWTF_BASELINE
123 #define GR_TFBOTTOM MWTF_BOTTOM
125 /* GrSetFontAttr flags*/
126 #define GR_TFKERNING MWTF_KERNING
127 #define GR_TFANTIALIAS MWTF_ANTIALIAS
128 #define GR_TFUNDERLINE MWTF_UNDERLINE
130 /* GrArc, GrArcAngle types*/
131 #define GR_ARC MWARC /* arc only*/
132 #define GR_ARCOUTLINE MWARCOUTLINE /* arc + outline*/
133 #define GR_PIE MWPIE /* pie (filled)*/
139 /* Loadable Image support definition */
140 #define GR_IMAGE_MAX_SIZE (-1)
143 #define GR_BUTTON_R MWBUTTON_R /* right button*/
144 #define GR_BUTTON_M MWBUTTON_M /* middle button*/
145 #define GR_BUTTON_L MWBUTTON_L /* left button */
146 #define GR_BUTTON_ANY (MWBUTTON_R|MWBUTTON_M|MWBUTTON_L) /* any*/
148 /* GrSetBackgroundPixmap flags */
149 #define GR_BACKGROUND_TILE 0 /* Tile across the window */
150 #define GR_BACKGROUND_CENTER 1 /* Draw in center of window */
151 #define GR_BACKGROUND_TOPLEFT 2 /* Draw at top left of window */
152 #define GR_BACKGROUND_STRETCH 4 /* Stretch image to fit window*/
153 #define GR_BACKGROUND_TRANS 8 /* Don't fill in gaps */
155 /* GrNewPixmapFromData flags*/
156 #define GR_BMDATA_BYTEREVERSE 01 /* byte-reverse bitmap data*/
157 #define GR_BMDATA_BYTESWAP 02 /* byte-swap bitmap data*/
159 #if 0 /* don't define unimp'd flags*/
160 /* Window property flags */
161 #define GR_WM_PROP_NORESIZE 0x04 /* don't let user resize window */
162 #define GR_WM_PROP_NOICONISE 0x08 /* don't let user iconise window */
163 #define GR_WM_PROP_NOWINMENU 0x10 /* don't display a window menu button */
164 #define GR_WM_PROP_NOROLLUP 0x20 /* don't let user roll window up */
165 #define GR_WM_PROP_ONTOP 0x200 /* try to keep window always on top */
166 #define GR_WM_PROP_STICKY 0x400 /* keep window after desktop change */
167 #define GR_WM_PROP_DND 0x2000 /* accept drag and drop icons */
170 /* Window properties*/
171 #define GR_WM_PROPS_NOBACKGROUND 0x00000001L/* Don't draw window background*/
172 #define GR_WM_PROPS_NOFOCUS 0x00000002L /* Don't set focus to this window*/
173 #define GR_WM_PROPS_NOMOVE 0x00000004L /* Don't let user move window*/
174 #define GR_WM_PROPS_NORAISE 0x00000008L /* Don't let user raise window*/
175 #define GR_WM_PROPS_NODECORATE 0x00000010L /* Don't redecorate window*/
176 #define GR_WM_PROPS_NOAUTOMOVE 0x00000020L /* Don't move window on 1st map*/
177 #define GR_WM_PROPS_NOAUTORESIZE 0x00000040L /* Don't resize window on 1st map*/
179 /* default decoration style*/
180 #define GR_WM_PROPS_APPWINDOW 0x00000000L /* Leave appearance to WM*/
181 #define GR_WM_PROPS_APPMASK 0xF0000000L /* Appearance mask*/
182 #define GR_WM_PROPS_BORDER 0x80000000L /* Single line border*/
183 #define GR_WM_PROPS_APPFRAME 0x40000000L /* 3D app frame (overrides border)*/
184 #define GR_WM_PROPS_CAPTION 0x20000000L /* Title bar*/
185 #define GR_WM_PROPS_CLOSEBOX 0x10000000L /* Close box*/
186 #define GR_WM_PROPS_MAXIMIZE 0x08000000L /* Application is maximized*/
188 /* Flags for indicating valid bits in GrSetWMProperties call*/
189 #define GR_WM_FLAGS_PROPS 0x0001 /* Properties*/
190 #define GR_WM_FLAGS_TITLE 0x0002 /* Title*/
191 #define GR_WM_FLAGS_BACKGROUND 0x0004 /* Background color*/
192 #define GR_WM_FLAGS_BORDERSIZE 0x0008 /* Border size*/
193 #define GR_WM_FLAGS_BORDERCOLOR 0x0010 /* Border color*/
195 /* Window manager properties used by the Gr[GS]etWMProperties calls. */
196 /* NOTE: this struct must be hand-packed to a DWORD boundary for nxproto.h*/
198 GR_WM_PROPS flags; /* Which properties valid in struct for set*/
199 GR_WM_PROPS props; /* Window property bits*/
200 GR_CHAR *title; /* Window title*/
201 GR_COLOR background; /* Window background color*/
202 GR_SIZE bordersize; /* Window border size*/
203 GR_COLOR bordercolor; /* Window border color*/
206 /* Window properties returned by the GrGetWindowInfo call. */
208 GR_WINDOW_ID wid; /* window id (or 0 if no such window) */
209 GR_WINDOW_ID parent; /* parent window id */
210 GR_WINDOW_ID child; /* first child window id (or 0) */
211 GR_WINDOW_ID sibling; /* next sibling window id (or 0) */
212 GR_BOOL inputonly; /* TRUE if window is input only */
213 GR_BOOL mapped; /* TRUE if window is mapped */
214 GR_COUNT unmapcount; /* reasons why window is unmapped */
215 GR_COORD x; /* absolute x position of window */
216 GR_COORD y; /* absolute y position of window */
217 GR_SIZE width; /* width of window */
218 GR_SIZE height; /* height of window */
219 GR_SIZE bordersize; /* size of border */
220 GR_COLOR bordercolor; /* color of border */
221 GR_COLOR background; /* background color */
222 GR_EVENT_MASK eventmask; /* current event mask for this client */
223 GR_WM_PROPS props; /* window properties */
224 GR_CURSOR_ID cursor; /* cursor id*/
225 unsigned long processid; /* process id of owner*/
228 /* Graphics context properties returned by the GrGetGCInfo call. */
230 GR_GC_ID gcid; /* GC id (or 0 if no such GC) */
231 int mode; /* drawing mode */
232 GR_REGION_ID region; /* user region */
233 int xoff; /* x offset of user region*/
234 int yoff; /* y offset of user region*/
235 GR_FONT_ID font; /* font number */
236 GR_COLOR foreground; /* foreground color */
237 GR_COLOR background; /* background color */
238 GR_BOOL usebackground; /* use background in bitmaps */
243 GR_COUNT count; /* # valid entries*/
244 GR_PALENTRY palette[256]; /* palette*/
248 #define GR_ERROR_BAD_WINDOW_ID 1
249 #define GR_ERROR_BAD_GC_ID 2
250 #define GR_ERROR_BAD_CURSOR_SIZE 3
251 #define GR_ERROR_MALLOC_FAILED 4
252 #define GR_ERROR_BAD_WINDOW_SIZE 5
253 #define GR_ERROR_KEYBOARD_ERROR 6
254 #define GR_ERROR_MOUSE_ERROR 7
255 #define GR_ERROR_INPUT_ONLY_WINDOW 8
256 #define GR_ERROR_ILLEGAL_ON_ROOT_WINDOW 9
257 #define GR_ERROR_TOO_MUCH_CLIPPING 10
258 #define GR_ERROR_SCREEN_ERROR 11
259 #define GR_ERROR_UNMAPPED_FOCUS_WINDOW 12
260 #define GR_ERROR_BAD_DRAWING_MODE 13
263 * Mouse motion is generated for every motion of the mouse, and is used to
264 * track the entire history of the mouse (many events and lots of overhead).
265 * Mouse position ignores the history of the motion, and only reports the
266 * latest position of the mouse by only queuing the latest such event for
267 * any single client (good for rubber-banding).
269 #define GR_EVENT_TYPE_ERROR (-1)
270 #define GR_EVENT_TYPE_NONE 0
271 #define GR_EVENT_TYPE_EXPOSURE 1
272 #define GR_EVENT_TYPE_BUTTON_DOWN 2
273 #define GR_EVENT_TYPE_BUTTON_UP 3
274 #define GR_EVENT_TYPE_MOUSE_ENTER 4
275 #define GR_EVENT_TYPE_MOUSE_EXIT 5
276 #define GR_EVENT_TYPE_MOUSE_MOTION 6
277 #define GR_EVENT_TYPE_MOUSE_POSITION 7
278 #define GR_EVENT_TYPE_KEY_DOWN 8
279 #define GR_EVENT_TYPE_KEY_UP 9
280 #define GR_EVENT_TYPE_FOCUS_IN 10
281 #define GR_EVENT_TYPE_FOCUS_OUT 11
282 #define GR_EVENT_TYPE_FDINPUT 12
283 #define GR_EVENT_TYPE_UPDATE 13
284 #define GR_EVENT_TYPE_CHLD_UPDATE 14
285 #define GR_EVENT_TYPE_CLOSE_REQ 15
286 #define GR_EVENT_TYPE_TIMEOUT 16
287 #define GR_EVENT_TYPE_SCREENSAVER 17
288 #define GR_EVENT_TYPE_CLIENT_DATA_REQ 18
289 #define GR_EVENT_TYPE_CLIENT_DATA 19
290 #define GR_EVENT_TYPE_SELECTION_CHANGED 20
291 #define GR_EVENT_TYPE_TIMER 21
292 #define GR_EVENT_TYPE_PORTRAIT_CHANGED 22
295 #define GR_EVENTMASK(n) (((GR_EVENT_MASK) 1) << (n))
297 #define GR_EVENT_MASK_NONE GR_EVENTMASK(GR_EVENT_TYPE_NONE)
298 #define GR_EVENT_MASK_ERROR 0x80000000L
299 #define GR_EVENT_MASK_EXPOSURE GR_EVENTMASK(GR_EVENT_TYPE_EXPOSURE)
300 #define GR_EVENT_MASK_BUTTON_DOWN GR_EVENTMASK(GR_EVENT_TYPE_BUTTON_DOWN)
301 #define GR_EVENT_MASK_BUTTON_UP GR_EVENTMASK(GR_EVENT_TYPE_BUTTON_UP)
302 #define GR_EVENT_MASK_MOUSE_ENTER GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_ENTER)
303 #define GR_EVENT_MASK_MOUSE_EXIT GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_EXIT)
304 #define GR_EVENT_MASK_MOUSE_MOTION GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_MOTION)
305 #define GR_EVENT_MASK_MOUSE_POSITION GR_EVENTMASK(GR_EVENT_TYPE_MOUSE_POSITION)
306 #define GR_EVENT_MASK_KEY_DOWN GR_EVENTMASK(GR_EVENT_TYPE_KEY_DOWN)
307 #define GR_EVENT_MASK_KEY_UP GR_EVENTMASK(GR_EVENT_TYPE_KEY_UP)
308 #define GR_EVENT_MASK_FOCUS_IN GR_EVENTMASK(GR_EVENT_TYPE_FOCUS_IN)
309 #define GR_EVENT_MASK_FOCUS_OUT GR_EVENTMASK(GR_EVENT_TYPE_FOCUS_OUT)
310 #define GR_EVENT_MASK_FDINPUT GR_EVENTMASK(GR_EVENT_TYPE_FDINPUT)
311 #define GR_EVENT_MASK_UPDATE GR_EVENTMASK(GR_EVENT_TYPE_UPDATE)
312 #define GR_EVENT_MASK_CHLD_UPDATE GR_EVENTMASK(GR_EVENT_TYPE_CHLD_UPDATE)
313 #define GR_EVENT_MASK_CLOSE_REQ GR_EVENTMASK(GR_EVENT_TYPE_CLOSE_REQ)
314 #define GR_EVENT_MASK_TIMEOUT GR_EVENTMASK(GR_EVENT_TYPE_TIMEOUT)
315 #define GR_EVENT_MASK_SCREENSAVER GR_EVENTMASK(GR_EVENT_TYPE_SCREENSAVER)
316 #define GR_EVENT_MASK_CLIENT_DATA_REQ GR_EVENTMASK(GR_EVENT_TYPE_CLIENT_DATA_REQ)
317 #define GR_EVENT_MASK_CLIENT_DATA GR_EVENTMASK(GR_EVENT_TYPE_CLIENT_DATA)
318 #define GR_EVENT_MASK_SELECTION_CHANGED GR_EVENTMASK(GR_EVENT_TYPE_SELECTION_CHANGED)
319 #define GR_EVENT_MASK_TIMER GR_EVENTMASK(GR_EVENT_TYPE_TIMER)
320 #define GR_EVENT_MASK_PORTRAIT_CHANGED GR_EVENTMASK(GR_EVENT_TYPE_PORTRAIT_CHANGED)
321 #define GR_EVENT_MASK_ALL ((GR_EVENT_MASK) -1L)
323 /* update event types */
324 #define GR_UPDATE_MAP 1
325 #define GR_UPDATE_UNMAP 2
326 #define GR_UPDATE_MOVE 3
327 #define GR_UPDATE_SIZE 4
328 #define GR_UPDATE_UNMAPTEMP 5 /* unmap during window move/resize*/
329 #define GR_UPDATE_ACTIVATE 6 /* toplevel window [de]activate*/
330 #define GR_UPDATE_DESTROY 7
332 /* Event for errors detected by the server.
333 * These events are not delivered to GrGetNextEvent, but instead call
334 * the user supplied error handling function. Only the first one of
335 * these errors at a time is saved for delivery to the client since
336 * there is not much to be done about errors anyway except complain
340 GR_EVENT_TYPE type; /* event type */
341 GR_FUNC_NAME name; /* function name which failed */
342 GR_ERROR code; /* error code */
343 GR_ID id; /* resource id (maybe useless) */
346 /* Event for a mouse button pressed down or released. */
348 GR_EVENT_TYPE type; /* event type */
349 GR_WINDOW_ID wid; /* window id event delivered to */
350 GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
351 GR_COORD rootx; /* root window x coordinate */
352 GR_COORD rooty; /* root window y coordinate */
353 GR_COORD x; /* window x coordinate of mouse */
354 GR_COORD y; /* window y coordinate of mouse */
355 GR_BUTTON buttons; /* current state of all buttons */
356 GR_BUTTON changebuttons; /* buttons which went down or up */
357 GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
358 GR_TIMEOUT time; /* tickcount time value*/
361 /* Event for a keystroke typed for the window with has focus. */
363 GR_EVENT_TYPE type; /* event type */
364 GR_WINDOW_ID wid; /* window id event delived to */
365 GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
366 GR_COORD rootx; /* root window x coordinate */
367 GR_COORD rooty; /* root window y coordinate */
368 GR_COORD x; /* window x coordinate of mouse */
369 GR_COORD y; /* window y coordinate of mouse */
370 GR_BUTTON buttons; /* current state of buttons */
371 GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
372 GR_KEY ch; /* 16-bit unicode key value, MWKEY_xxx */
373 GR_SCANCODE scancode; /* OEM scancode value if available*/
374 } GR_EVENT_KEYSTROKE;
376 /* Event for exposure for a region of a window. */
378 GR_EVENT_TYPE type; /* event type */
379 GR_WINDOW_ID wid; /* window id */
380 GR_COORD x; /* window x coordinate of exposure */
381 GR_COORD y; /* window y coordinate of exposure */
382 GR_SIZE width; /* width of exposure */
383 GR_SIZE height; /* height of exposure */
386 /* General events for focus in or focus out for a window, or mouse enter
387 * or mouse exit from a window, or window unmapping or mapping, etc.
388 * Server portrait mode changes are also sent using this event to
389 * all windows that request it.
392 GR_EVENT_TYPE type; /* event type */
393 GR_WINDOW_ID wid; /* window id */
394 GR_WINDOW_ID otherid; /* new/old focus id for focus events*/
397 /* Events for mouse motion or mouse position. */
399 GR_EVENT_TYPE type; /* event type */
400 GR_WINDOW_ID wid; /* window id event delivered to */
401 GR_WINDOW_ID subwid; /* sub-window id (pointer was in) */
402 GR_COORD rootx; /* root window x coordinate */
403 GR_COORD rooty; /* root window y coordinate */
404 GR_COORD x; /* window x coordinate of mouse */
405 GR_COORD y; /* window y coordinate of mouse */
406 GR_BUTTON buttons; /* current state of buttons */
407 GR_KEYMOD modifiers; /* modifiers (MWKMOD_SHIFT, etc)*/
410 /* GrRegisterInput event*/
412 GR_EVENT_TYPE type; /* event type */
413 int fd; /* input fd*/
416 /* GR_EVENT_TYPE_UPDATE */
418 GR_EVENT_TYPE type; /* event type */
419 GR_WINDOW_ID wid; /* select window id*/
420 GR_WINDOW_ID subwid; /* update window id (=wid for UPDATE event)*/
421 GR_COORD x; /* new window x coordinate */
422 GR_COORD y; /* new window y coordinate */
423 GR_SIZE width; /* new width */
424 GR_SIZE height; /* new height */
425 GR_UPDATE_TYPE utype; /* update_type */
428 /* GR_EVENT_TYPE_SCREENSAVER */
430 GR_EVENT_TYPE type; /* event type */
431 GR_BOOL activate; /* true = activate, false = deactivate */
432 } GR_EVENT_SCREENSAVER;
434 /* GR_EVENT_TYPE_CLIENT_DATA_REQ */
436 GR_EVENT_TYPE type; /* event type */
437 GR_WINDOW_ID wid; /* ID of requested window */
438 GR_WINDOW_ID rid; /* ID of window to send data to */
439 GR_SERIALNO serial; /* Serial number of transaction */
440 GR_MIMETYPE mimetype; /* Type to supply data as */
441 } GR_EVENT_CLIENT_DATA_REQ;
443 /* GR_EVENT_TYPE_CLIENT_DATA */
445 GR_EVENT_TYPE type; /* event type */
446 GR_WINDOW_ID wid; /* ID of window data is destined for */
447 GR_WINDOW_ID rid; /* ID of window data is from */
448 GR_SERIALNO serial; /* Serial number of transaction */
449 unsigned long len; /* Total length of data */
450 unsigned long datalen; /* Length of following data */
451 void *data; /* Pointer to data (filled in on client side) */
452 } GR_EVENT_CLIENT_DATA;
454 /* GR_EVENT_TYPE_SELECTION_CHANGED */
456 GR_EVENT_TYPE type; /* event type */
457 GR_WINDOW_ID new_owner; /* ID of new selection owner */
458 } GR_EVENT_SELECTION_CHANGED;
460 /* GR_EVENT_TYPE_TIMER */
462 GR_EVENT_TYPE type; /* event type, GR_EVENT_TYPE_TIMER */
463 GR_WINDOW_ID wid; /* ID of window timer is destined for */
464 GR_TIMER_ID tid; /* ID of expired timer */
468 * Union of all possible event structures.
469 * This is the structure returned by the GrGetNextEvent and similar routines.
472 GR_EVENT_TYPE type; /* event type */
473 GR_EVENT_ERROR error; /* error event */
474 GR_EVENT_GENERAL general; /* general window events */
475 GR_EVENT_BUTTON button; /* button events */
476 GR_EVENT_KEYSTROKE keystroke; /* keystroke events */
477 GR_EVENT_EXPOSURE exposure; /* exposure events */
478 GR_EVENT_MOUSE mouse; /* mouse motion events */
479 GR_EVENT_FDINPUT fdinput; /* fd input events*/
480 GR_EVENT_UPDATE update; /* window update events */
481 GR_EVENT_SCREENSAVER screensaver; /* Screen saver events */
482 GR_EVENT_CLIENT_DATA_REQ clientdatareq; /* Request for client data events */
483 GR_EVENT_CLIENT_DATA clientdata; /* Client data events */
484 GR_EVENT_SELECTION_CHANGED selectionchanged; /* Selection owner changed */
485 GR_EVENT_TIMER timer;
488 typedef void (*GR_FNCALLBACKEVENT)(GR_EVENT *);
490 /* Pixel packings within words. */
491 #define GR_BITMAPBITS (sizeof(GR_BITMAP) * 8)
492 #define GR_ZEROBITS ((GR_BITMAP) 0x0000)
493 #define GR_ONEBITS ((GR_BITMAP) 0xffff)
494 #define GR_FIRSTBIT ((GR_BITMAP) 0x8000)
495 #define GR_LASTBIT ((GR_BITMAP) 0x0001)
496 #define GR_BITVALUE(n) ((GR_BITMAP) (((GR_BITMAP) 1) << (n)))
497 #define GR_SHIFTBIT(m) ((GR_BITMAP) ((m) << 1))
498 #define GR_NEXTBIT(m) ((GR_BITMAP) ((m) >> 1))
499 #define GR_TESTBIT(m) (((m) & GR_FIRSTBIT) != 0)
501 /* Size of bitmaps. */
502 #define GR_BITMAP_SIZE(width, height) ((height) * \
503 (((width) + sizeof(GR_BITMAP) * 8 - 1) / (sizeof(GR_BITMAP) * 8)))
505 #define GR_MAX_BITMAP_SIZE \
506 GR_BITMAP_SIZE(MWMAX_CURSOR_SIZE, MWMAX_CURSOR_SIZE)
508 /* GrGetSysColor colors*/
509 /* desktop background*/
510 #define GR_COLOR_DESKTOP 0
513 #define GR_COLOR_ACTIVECAPTION 1
514 #define GR_COLOR_ACTIVECAPTIONTEXT 2
515 #define GR_COLOR_INACTIVECAPTION 3
516 #define GR_COLOR_INACTIVECAPTIONTEXT 4
518 /* 3d border shades*/
519 #define GR_COLOR_WINDOWFRAME 5
520 #define GR_COLOR_BTNSHADOW 6
521 #define GR_COLOR_3DLIGHT 7
522 #define GR_COLOR_BTNHIGHLIGHT 8
524 /* top level application window backgrounds/text*/
525 #define GR_COLOR_APPWINDOW 9
526 #define GR_COLOR_APPTEXT 10
528 /* button control backgrounds/text (usually same as app window colors)*/
529 #define GR_COLOR_BTNFACE 11
530 #define GR_COLOR_BTNTEXT 12
532 /* edit/listbox control backgrounds/text, selected highlights*/
533 #define GR_COLOR_WINDOW 13
534 #define GR_COLOR_WINDOWTEXT 14
535 #define GR_COLOR_HIGHLIGHT 15
536 #define GR_COLOR_HIGHLIGHTTEXT 16
537 #define GR_COLOR_GRAYTEXT 17
539 /* menu backgrounds/text*/
540 #define GR_COLOR_MENUTEXT 18
541 #define GR_COLOR_MENU 19
543 /* Error strings per error number*/
544 #define GR_ERROR_STRINGS \
546 "Bad window id: %d\n", \
547 "Bad graphics context: %d\n", \
548 "Bad cursor size\n", \
549 "Out of server memory\n", \
550 "Bad window size: %d\n", \
551 "Keyboard error\n", \
553 "Input only window: %d\n", \
554 "Illegal on root window: %d\n", \
555 "Clipping overflow\n", \
557 "Unmapped focus window: %d\n", \
558 "Bad drawing mode gc: %d\n"
560 extern char *nxErrorStrings[];
562 /* Public graphics routines. */
566 void GrDelay(GR_TIMEOUT msecs);
567 void GrGetScreenInfo(GR_SCREEN_INFO *sip);
568 GR_COLOR GrGetSysColor(int index);
569 GR_WINDOW_ID GrNewWindow(GR_WINDOW_ID parent, GR_COORD x, GR_COORD y,
570 GR_SIZE width, GR_SIZE height, GR_SIZE bordersize,
571 GR_COLOR background, GR_COLOR bordercolor);
572 GR_WINDOW_ID GrNewPixmap(GR_SIZE width, GR_SIZE height, void * addr);
573 GR_WINDOW_ID GrNewInputWindow(GR_WINDOW_ID parent, GR_COORD x, GR_COORD y,
574 GR_SIZE width, GR_SIZE height);
575 void GrDestroyWindow(GR_WINDOW_ID wid);
576 GR_GC_ID GrNewGC(void);
577 GR_GC_ID GrCopyGC(GR_GC_ID gc);
578 void GrGetGCInfo(GR_GC_ID gc, GR_GC_INFO *gcip);
579 void GrDestroyGC(GR_GC_ID gc);
580 GR_REGION_ID GrNewRegion(void);
581 GR_REGION_ID GrNewPolygonRegion(int mode, GR_COUNT count, GR_POINT *points);
582 void GrDestroyRegion(GR_REGION_ID region);
583 void GrUnionRectWithRegion(GR_REGION_ID region, GR_RECT *rect);
584 void GrUnionRegion(GR_REGION_ID dst_rgn, GR_REGION_ID src_rgn1,
585 GR_REGION_ID src_rgn2);
586 void GrIntersectRegion(GR_REGION_ID dst_rgn, GR_REGION_ID src_rgn1,
587 GR_REGION_ID src_rgn2);
588 void GrSubtractRegion(GR_REGION_ID dst_rgn, GR_REGION_ID src_rgn1,
589 GR_REGION_ID src_rgn2);
590 void GrXorRegion(GR_REGION_ID dst_rgn, GR_REGION_ID src_rgn1,
591 GR_REGION_ID src_rgn2);
592 void GrSetGCRegion(GR_GC_ID gc, GR_REGION_ID region);
593 void GrSetGCClipOrigin(GR_GC_ID gc, int x, int y);
594 GR_BOOL GrPointInRegion(GR_REGION_ID region, GR_COORD x, GR_COORD y);
595 int GrRectInRegion(GR_REGION_ID region, GR_COORD x, GR_COORD y,
596 GR_COORD w, GR_COORD h);
597 GR_BOOL GrEmptyRegion(GR_REGION_ID region);
598 GR_BOOL GrEqualRegion(GR_REGION_ID rgn1, GR_REGION_ID rgn2);
599 void GrOffsetRegion(GR_REGION_ID region, GR_SIZE dx, GR_SIZE dy);
600 int GrGetRegionBox(GR_REGION_ID region, GR_RECT *rect);
601 void GrMapWindow(GR_WINDOW_ID wid);
602 void GrUnmapWindow(GR_WINDOW_ID wid);
603 void GrRaiseWindow(GR_WINDOW_ID wid);
604 void GrLowerWindow(GR_WINDOW_ID wid);
605 void GrMoveWindow(GR_WINDOW_ID wid, GR_COORD x, GR_COORD y);
606 void GrResizeWindow(GR_WINDOW_ID wid, GR_SIZE width, GR_SIZE height);
607 void GrReparentWindow(GR_WINDOW_ID wid, GR_WINDOW_ID pwid,
608 GR_COORD x, GR_COORD y);
609 void GrGetWindowInfo(GR_WINDOW_ID wid, GR_WINDOW_INFO *infoptr);
610 void GrSetWMProperties(GR_WINDOW_ID wid, GR_WM_PROPERTIES *props);
611 void GrGetWMProperties(GR_WINDOW_ID wid, GR_WM_PROPERTIES *props);
612 GR_FONT_ID GrCreateFont(GR_CHAR *name, GR_COORD height,
613 GR_LOGFONT *plogfont);
614 void GrGetFontList(GR_FONTLIST ***fonts, int *numfonts);
615 void GrFreeFontList(GR_FONTLIST ***fonts, int num);
616 void GrSetFontSize(GR_FONT_ID fontid, GR_COORD size);
617 void GrSetFontRotation(GR_FONT_ID fontid, int tenthsdegrees);
618 void GrSetFontAttr(GR_FONT_ID fontid, int setflags, int clrflags);
619 void GrDestroyFont(GR_FONT_ID fontid);
620 void GrGetFontInfo(GR_FONT_ID font, GR_FONT_INFO *fip);
621 GR_WINDOW_ID GrGetFocus(void);
622 void GrSetFocus(GR_WINDOW_ID wid);
623 void GrClearArea(GR_WINDOW_ID wid, GR_COORD x, GR_COORD y, GR_SIZE width,
624 GR_SIZE height, GR_BOOL exposeflag);
625 void GrSelectEvents(GR_WINDOW_ID wid, GR_EVENT_MASK eventmask);
626 void GrGetNextEvent(GR_EVENT *ep);
627 void GrGetNextEventTimeout(GR_EVENT *ep, GR_TIMEOUT timeout);
628 void GrCheckNextEvent(GR_EVENT *ep);
629 int GrPeekEvent(GR_EVENT *ep);
630 void GrPeekWaitEvent(GR_EVENT *ep);
631 void GrLine(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x1, GR_COORD y1,
632 GR_COORD x2, GR_COORD y2);
633 void GrPoint(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y);
634 void GrPoints(GR_DRAW_ID id, GR_GC_ID gc, GR_COUNT count,
635 GR_POINT *pointtable);
636 void GrRect(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
637 GR_SIZE width, GR_SIZE height);
638 void GrFillRect(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
639 GR_SIZE width, GR_SIZE height);
640 void GrPoly(GR_DRAW_ID id, GR_GC_ID gc, GR_COUNT count,
641 GR_POINT *pointtable);
642 void GrFillPoly(GR_DRAW_ID id, GR_GC_ID gc, GR_COUNT count,
643 GR_POINT *pointtable);
644 void GrEllipse(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
645 GR_SIZE rx, GR_SIZE ry);
646 void GrFillEllipse(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x,
647 GR_COORD y, GR_SIZE rx, GR_SIZE ry);
648 void GrArc(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
649 GR_SIZE rx, GR_SIZE ry, GR_COORD ax, GR_COORD ay,
650 GR_COORD bx, GR_COORD by, int type);
651 void GrArcAngle(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
652 GR_SIZE rx, GR_SIZE ry, GR_COORD angle1,
653 GR_COORD angle2, int type); /* floating point required*/
654 void GrSetGCForeground(GR_GC_ID gc, GR_COLOR foreground);
655 void GrSetGCBackground(GR_GC_ID gc, GR_COLOR background);
656 void GrSetGCUseBackground(GR_GC_ID gc, GR_BOOL flag);
657 void GrSetGCMode(GR_GC_ID gc, int mode);
658 void GrSetGCFont(GR_GC_ID gc, GR_FONT_ID font);
659 void GrGetGCTextSize(GR_GC_ID gc, void *str, int count, int flags,
660 GR_SIZE *retwidth, GR_SIZE *retheight,GR_SIZE *retbase);
661 void GrReadArea(GR_DRAW_ID id, GR_COORD x, GR_COORD y, GR_SIZE width,
662 GR_SIZE height, GR_PIXELVAL *pixels);
663 void GrArea(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
664 GR_SIZE width,GR_SIZE height,void *pixels,int pixtype);
665 void GrCopyArea(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
666 GR_SIZE width, GR_SIZE height, GR_DRAW_ID srcid,
667 GR_COORD srcx, GR_COORD srcy, int op);
668 void GrBitmap(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
669 GR_SIZE width, GR_SIZE height, GR_BITMAP *imagebits);
670 void GrDrawImageBits(GR_DRAW_ID id,GR_GC_ID gc,GR_COORD x,GR_COORD y,
671 GR_IMAGE_HDR *pimage);
672 void GrDrawImageFromFile(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x,
673 GR_COORD y, GR_SIZE width, GR_SIZE height,
674 char *path, int flags);
675 GR_IMAGE_ID GrLoadImageFromFile(char *path, int flags);
676 void GrDrawImageFromBuffer(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x,
677 GR_COORD y, GR_SIZE width, GR_SIZE height,
678 void *buffer, int size, int flags);
679 GR_IMAGE_ID GrLoadImageFromBuffer(void *buffer, int size, int flags);
680 void GrDrawImageToFit(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x,
681 GR_COORD y, GR_SIZE width, GR_SIZE height,
682 GR_IMAGE_ID imageid);
683 void GrFreeImage(GR_IMAGE_ID id);
684 void GrGetImageInfo(GR_IMAGE_ID id, GR_IMAGE_INFO *iip);
685 void GrText(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
686 void *str, GR_COUNT count, int flags);
687 GR_CURSOR_ID GrNewCursor(GR_SIZE width, GR_SIZE height, GR_COORD hotx,
688 GR_COORD hoty, GR_COLOR foreground, GR_COLOR background,
689 GR_BITMAP *fgbitmap, GR_BITMAP *bgbitmap);
690 void GrDestroyCursor(GR_CURSOR_ID cid);
691 void GrSetWindowCursor(GR_WINDOW_ID wid, GR_CURSOR_ID cid);
692 void GrMoveCursor(GR_COORD x, GR_COORD y);
693 void GrGetSystemPalette(GR_PALETTE *pal);
694 void GrSetSystemPalette(GR_COUNT first, GR_PALETTE *pal);
695 void GrFindColor(GR_COLOR c, GR_PIXELVAL *retpixel);
696 void GrReqShmCmds(long shmsize);
697 void GrInjectPointerEvent(MWCOORD x, MWCOORD y,
698 int button, int visible);
699 void GrInjectKeyboardEvent(GR_WINDOW_ID wid, GR_KEY keyvalue,
700 GR_KEYMOD modifiers, GR_SCANCODE scancode,
702 void GrCloseWindow(GR_WINDOW_ID wid);
703 void GrKillWindow(GR_WINDOW_ID wid);
704 void GrSetScreenSaverTimeout(GR_TIMEOUT timeout);
705 void GrSetSelectionOwner(GR_WINDOW_ID wid, GR_CHAR *typelist);
706 GR_WINDOW_ID GrGetSelectionOwner(GR_CHAR **typelist);
707 void GrRequestClientData(GR_WINDOW_ID wid, GR_WINDOW_ID rid,
708 GR_SERIALNO serial, GR_MIMETYPE mimetype);
709 void GrSendClientData(GR_WINDOW_ID wid, GR_WINDOW_ID did,
710 GR_SERIALNO serial, GR_LENGTH len, GR_LENGTH thislen,
713 void GrSetBackgroundPixmap(GR_WINDOW_ID wid, GR_WINDOW_ID pixmap,
715 void GrQueryTree(GR_WINDOW_ID wid, GR_WINDOW_ID *parentid, GR_WINDOW_ID **children,
716 GR_COUNT *nchildren);
717 GR_TIMER_ID GrCreateTimer(GR_WINDOW_ID wid, GR_TIMEOUT period);
718 void GrDestroyTimer(GR_TIMER_ID tid);
719 void GrSetPortraitMode(int portraitmode);
721 void GrRegisterInput(int fd);
722 void GrUnregisterInput(int fd);
723 void GrMainLoop(GR_FNCALLBACKEVENT fncb);
724 GR_FNCALLBACKEVENT GrSetErrorHandler(GR_FNCALLBACKEVENT fncb);
725 void GrDefaultErrorHandler(GR_EVENT *ep);
727 /* passive library entry points - available with client/server only*/
728 void GrPrepareSelect(int *maxfd,void *rfdset);
729 void GrServiceSelect(void *rfdset, GR_FNCALLBACKEVENT fncb);
731 /* nxutil.c - utility routines*/
732 GR_WINDOW_ID GrNewWindowEx(GR_WM_PROPS props, GR_CHAR *title,
733 GR_WINDOW_ID parent, GR_COORD x, GR_COORD y,
734 GR_SIZE width, GR_SIZE height, GR_COLOR background);
735 void GrDrawLines(GR_DRAW_ID w, GR_GC_ID gc, GR_POINT *points,
737 GR_BITMAP * GrNewBitmapFromData(GR_SIZE width, GR_SIZE height, GR_SIZE bits_width,
738 GR_SIZE bits_height, void *bits, int flags);
739 GR_WINDOW_ID GrNewPixmapFromData(GR_SIZE width, GR_SIZE height,
740 GR_COLOR foreground, GR_COLOR background, void * bits,
743 /* direct client-side framebuffer mapping routines*/
744 unsigned char * GrOpenClientFramebuffer(void);
745 void GrCloseClientFramebuffer(void);
746 void GrGetWindowFBInfo(GR_WINDOW_ID wid, GR_WINDOW_FB_INFO *fbinfo);
748 /* retrofit - no longer used*/
749 GR_CURSOR_ID GrSetCursor(GR_WINDOW_ID wid, GR_SIZE width, GR_SIZE height,
750 GR_COORD hotx, GR_COORD hoty, GR_COLOR foreground,
751 GR_COLOR background, GR_BITMAP *fbbitmap,
752 GR_BITMAP *bgbitmap);
753 #define GrSetBorderColor GrSetWindowBorderColor /* retrofit*/
754 #define GrClearWindow(wid,exposeflag) GrClearArea(wid,0,0,0,0,exposeflag) /* retrofit*/
756 /* useful function macros*/
757 #define GrSetWindowBackgroundColor(wid,color) \
758 { GR_WM_PROPERTIES props; \
759 props.flags = GR_WM_FLAGS_BACKGROUND; \
760 props.background = color; \
761 GrSetWMProperties(wid, &props); \
763 #define GrSetWindowBorderSize(wid,width) \
764 { GR_WM_PROPERTIES props; \
765 props.flags = GR_WM_FLAGS_BORDERSIZE; \
766 props.bordersize = width; \
767 GrSetWMProperties(wid, &props); \
769 #define GrSetWindowBorderColor(wid,color) \
770 { GR_WM_PROPERTIES props; \
771 props.flags = GR_WM_FLAGS_BORDERCOLOR; \
772 props.bordercolor = color; \
773 GrSetWMProperties(wid, &props); \
775 #define GrSetWindowTitle(wid,name) \
776 { GR_WM_PROPERTIES props; \
777 props.flags = GR_WM_FLAGS_TITLE; \
778 props.title = (GR_CHAR *)name; \
779 GrSetWMProperties(wid, &props); \
786 /* RTEMS requires rtems_main()*/
788 #define main rtems_main
791 /* client side event queue (client.c local)*/
792 typedef struct event_list EVENT_LIST;
798 /* queued request buffer (nxproto.c local)*/
800 unsigned char *bufptr; /* next unused buffer location*/
801 unsigned char *bufmax; /* max buffer location*/
802 unsigned char *buffer; /* request buffer*/
806 #include <sys/select.h>
808 * In a single process, multi-threaded environment, we need to keep
809 * all static data of shared code in a structure, with a pointer to
810 * the structure to be stored in thread-local storage
812 typedef struct { // Init to:
814 int _storedevent; // 0
815 GR_EVENT _storedevent_data; // no init(0)
817 fd_set _regfdset; // FD_ZERO
818 GR_FNCALLBACKEVENT _GrErrorFunc; // GrDefaultErrorHandler
821 } ecos_nanox_client_data;
823 extern int ecos_nanox_client_data_index;
825 #define ACCESS_PER_THREAD_DATA() \
826 ecos_nanox_client_data *data = (ecos_nanox_client_data*) \
827 cyg_thread_get_data((cyg_ucount32)ecos_nanox_client_data_index);
829 #define INIT_PER_THREAD_DATA() \
831 ecos_nanox_client_data *dptr = malloc(sizeof(ecos_nanox_client_data)); \
832 ecos_nanox_client_data_index = data; \
833 dptr->_nxSocket = -1; \
834 dptr->_storedevent = 0; \
835 dptr->_regfdmax = -1; \
836 FD_ZERO(&dptr->_regfdset); \
837 dptr->_GrErrorFunc = GrDefaultErrorHandler; \
838 dptr->_reqbuf.bufptr = NULL; \
839 dptr->_reqbuf.bufmax = NULL; \
840 dptr->_reqbuf.buffer = NULL; \
841 dptr->_evlist = NULL; \
842 cyg_thread_set_data(ecos_nanox_client_data_index,(CYG_ADDRWORD)dptr); \
845 #define nxSocket (data->_nxSocket)
846 #define storedevent (data->_storedevent)
847 #define storedevent_data (data->_storedevent_data)
848 #define regfdmax (data->_regfdmax)
849 #define regfdset (data->_regfdset)
850 #define ErrorFunc (data->_GrErrorFunc)
851 #define reqbuf (data->_reqbuf)
852 #define evlist (data->_evlist)
855 #define ACCESS_PER_THREAD_DATA()
858 #endif /* _NANO_X_H*/