2008-12-08 04:36:27 +00:00
|
|
|
#ifndef __win32_x11_h__
|
|
|
|
#define __win32_x11_h__
|
|
|
|
|
|
|
|
/* Copyright (c) Nate Robins, 1997. */
|
|
|
|
|
|
|
|
/* This program is freely distributable without licensing fees
|
|
|
|
and is provided without guarantee or warrantee expressed or
|
|
|
|
implied. This program is -not- in the public domain. */
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <windows.h>
|
|
|
|
|
|
|
|
/* Type definitions (conversions) */
|
|
|
|
typedef int Visual; /* Win32 equivalent of X11 type */
|
|
|
|
typedef HWND Window;
|
|
|
|
typedef HPALETTE Colormap;
|
|
|
|
typedef PIXELFORMATDESCRIPTOR XVisualInfo;
|
|
|
|
typedef BOOL Bool;
|
|
|
|
typedef MSG XEvent;
|
|
|
|
typedef HDC Display;
|
|
|
|
typedef HCURSOR Cursor;
|
|
|
|
|
|
|
|
typedef int Atom; /* dummies */
|
|
|
|
typedef int XDevice;
|
|
|
|
typedef int Status;
|
|
|
|
|
|
|
|
#define True TRUE /* Win32 equivalents of X11 booleans */
|
|
|
|
#define False FALSE
|
|
|
|
|
|
|
|
#define None 0L /* universal null resource or null atom */
|
|
|
|
|
|
|
|
/* Input Event Masks. Used as event-mask window attribute and as arguments
|
|
|
|
to Grab requests. Not to be confused with event names. */
|
|
|
|
|
|
|
|
#define NoEventMask 0L
|
|
|
|
#define KeyPressMask (1L<<0)
|
|
|
|
#define KeyReleaseMask (1L<<1)
|
|
|
|
#define ButtonPressMask (1L<<2)
|
|
|
|
#define ButtonReleaseMask (1L<<3)
|
|
|
|
#define EnterWindowMask (1L<<4)
|
|
|
|
#define LeaveWindowMask (1L<<5)
|
|
|
|
#define PointerMotionMask (1L<<6)
|
|
|
|
#define PointerMotionHintMask (1L<<7)
|
|
|
|
#define Button1MotionMask (1L<<8)
|
|
|
|
#define Button2MotionMask (1L<<9)
|
|
|
|
#define Button3MotionMask (1L<<10)
|
|
|
|
#define Button4MotionMask (1L<<11)
|
|
|
|
#define Button5MotionMask (1L<<12)
|
|
|
|
#define ButtonMotionMask (1L<<13)
|
|
|
|
#define KeymapStateMask (1L<<14)
|
|
|
|
#define ExposureMask (1L<<15)
|
|
|
|
#define VisibilityChangeMask (1L<<16)
|
|
|
|
#define StructureNotifyMask (1L<<17)
|
|
|
|
#define ResizeRedirectMask (1L<<18)
|
|
|
|
#define SubstructureNotifyMask (1L<<19)
|
|
|
|
#define SubstructureRedirectMask (1L<<20)
|
|
|
|
#define FocusChangeMask (1L<<21)
|
|
|
|
#define PropertyChangeMask (1L<<22)
|
|
|
|
#define ColormapChangeMask (1L<<23)
|
|
|
|
#define OwnerGrabButtonMask (1L<<24)
|
|
|
|
|
|
|
|
/* Key masks. Used as modifiers to GrabButton and GrabKey, results of
|
|
|
|
QueryPointer, state in various key-, mouse-, and button-related
|
|
|
|
events. */
|
|
|
|
|
|
|
|
#define ShiftMask (1<<0)
|
|
|
|
#define LockMask (1<<1)
|
|
|
|
#define ControlMask (1<<2)
|
|
|
|
#define Mod1Mask (1<<3)
|
|
|
|
#define Mod2Mask (1<<4)
|
|
|
|
#define Mod3Mask (1<<5)
|
|
|
|
#define Mod4Mask (1<<6)
|
|
|
|
#define Mod5Mask (1<<7)
|
|
|
|
|
|
|
|
/* Window classes used by CreateWindow */
|
|
|
|
/* Note that CopyFromParent is already defined as 0 above */
|
|
|
|
|
|
|
|
#define InputOutput 1
|
|
|
|
#define InputOnly 2
|
|
|
|
|
|
|
|
/* Window attributes for CreateWindow and ChangeWindowAttributes */
|
|
|
|
|
|
|
|
#define CWBackPixmap (1L<<0)
|
|
|
|
#define CWBackPixel (1L<<1)
|
|
|
|
#define CWBorderPixmap (1L<<2)
|
|
|
|
#define CWBorderPixel (1L<<3)
|
|
|
|
#define CWBitGravity (1L<<4)
|
|
|
|
#define CWWinGravity (1L<<5)
|
|
|
|
#define CWBackingStore (1L<<6)
|
|
|
|
#define CWBackingPlanes (1L<<7)
|
|
|
|
#define CWBackingPixel (1L<<8)
|
|
|
|
#define CWOverrideRedirect (1L<<9)
|
|
|
|
#define CWSaveUnder (1L<<10)
|
|
|
|
#define CWEventMask (1L<<11)
|
|
|
|
#define CWDontPropagate (1L<<12)
|
|
|
|
#define CWColormap (1L<<13)
|
|
|
|
#define CWCursor (1L<<14)
|
|
|
|
|
|
|
|
/* ConfigureWindow structure */
|
|
|
|
|
|
|
|
#define CWX (1<<0)
|
|
|
|
#define CWY (1<<1)
|
|
|
|
#define CWWidth (1<<2)
|
|
|
|
#define CWHeight (1<<3)
|
|
|
|
#define CWBorderWidth (1<<4)
|
|
|
|
#define CWSibling (1<<5)
|
|
|
|
#define CWStackMode (1<<6)
|
|
|
|
|
|
|
|
|
|
|
|
/* Used in GetWindowAttributes reply */
|
|
|
|
|
|
|
|
#define IsUnmapped 0
|
|
|
|
#define IsUnviewable 1
|
|
|
|
#define IsViewable 2
|
|
|
|
|
|
|
|
/* Window stacking method (in configureWindow) */
|
|
|
|
|
|
|
|
#define Above 0
|
|
|
|
#define Below 1
|
|
|
|
#define TopIf 2
|
|
|
|
#define BottomIf 3
|
|
|
|
#define Opposite 4
|
|
|
|
|
|
|
|
/* For CreateColormap */
|
|
|
|
|
|
|
|
#define AllocNone 0 /* create map with no entries */
|
|
|
|
#define AllocAll 1 /* allocate entire map writeable */
|
|
|
|
|
|
|
|
|
|
|
|
/* Flags used in StoreNamedColor, StoreColors */
|
|
|
|
|
|
|
|
#define DoRed (1<<0)
|
|
|
|
#define DoGreen (1<<1)
|
|
|
|
#define DoBlue (1<<2)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
|
|
|
|
* value (x, y, width, height) was found in the parsed string.
|
|
|
|
*/
|
|
|
|
#define NoValue 0x0000
|
|
|
|
#define XValue 0x0001
|
|
|
|
#define YValue 0x0002
|
|
|
|
#define WidthValue 0x0004
|
|
|
|
#define HeightValue 0x0008
|
|
|
|
#define AllValues 0x000F
|
|
|
|
#define XNegative 0x0010
|
|
|
|
#define YNegative 0x0020
|
|
|
|
|
|
|
|
/* flags argument in size hints */
|
|
|
|
#define USPosition (1L << 0) /* user specified x, y */
|
|
|
|
#define USSize (1L << 1) /* user specified width, height */
|
|
|
|
|
|
|
|
/* definitions for initial window state */
|
|
|
|
#define WithdrawnState 0 /* for windows that are not mapped */
|
|
|
|
#define NormalState 1 /* most applications want to start this way */
|
|
|
|
#define IconicState 3 /* application wants to start as an icon */
|
|
|
|
#define GameModeState 4 /* Win32 GLUT only (not in Xlib!). */
|
|
|
|
|
|
|
|
/* Type definitions */
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
unsigned int background_pixmap; /* background pixmap */
|
|
|
|
unsigned long background_pixel; /* background pixel */
|
|
|
|
unsigned long border_pixel; /* border pixel value */
|
|
|
|
long event_mask; /* set of events that should be saved */
|
|
|
|
long do_not_propagate_mask; /* set of events that should not propagate */
|
|
|
|
Bool override_redirect; /* boolean value for override-redirect */
|
|
|
|
Colormap colormap; /* color map to be associated with window */
|
|
|
|
} XSetWindowAttributes;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
unsigned long pixel;
|
|
|
|
unsigned short red, green, blue;
|
|
|
|
char flags; /* do_red, do_green, do_blue */
|
|
|
|
} XColor;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
unsigned char *value; /* same as Property routines */
|
|
|
|
Atom encoding; /* prop type */
|
|
|
|
int format; /* prop data format: 8, 16, or 32 */
|
|
|
|
unsigned long nitems; /* number of data items in value */
|
|
|
|
} XTextProperty;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
long flags; /* marks which fields in this structure are defined */
|
|
|
|
int x, y; /* obsolete for new window mgrs, but clients */
|
|
|
|
int width, height; /* should set so old wm's don't mess up */
|
|
|
|
} XSizeHints;
|
|
|
|
|
|
|
|
/* Functions emulated by macros. */
|
|
|
|
|
|
|
|
#define XFreeColormap(display, colormap) \
|
|
|
|
DeleteObject(colormap)
|
|
|
|
|
|
|
|
#define XCreateFontCursor(display, shape) \
|
|
|
|
LoadCursor(NULL, shape)
|
|
|
|
|
|
|
|
#define XDefineCursor(display, window, cursor) \
|
|
|
|
SetCursor(cursor)
|
|
|
|
|
|
|
|
#define XFlush(display) \
|
|
|
|
/* Nothing. */
|
|
|
|
|
|
|
|
#define DisplayWidth(display, screen) \
|
|
|
|
GetSystemMetrics(SM_CXSCREEN)
|
|
|
|
|
|
|
|
#define DisplayHeight(display, screen) \
|
|
|
|
GetSystemMetrics(SM_CYSCREEN)
|
|
|
|
|
|
|
|
#define XMapWindow(display, window) \
|
|
|
|
ShowWindow(window, SW_SHOWNORMAL)
|
|
|
|
|
|
|
|
#define XUnmapWindow(display, window) \
|
|
|
|
ShowWindow(window, SW_HIDE)
|
|
|
|
|
|
|
|
#define XIconifyWindow(display, window, screen) \
|
|
|
|
ShowWindow(window, SW_MINIMIZE)
|
|
|
|
|
|
|
|
#define XWithdrawWindow(display, window, screen) \
|
|
|
|
ShowWindow(window, SW_HIDE)
|
|
|
|
|
|
|
|
#define XLowerWindow(display, window) \
|
|
|
|
SetWindowPos(window, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
|
|
|
|
|
|
|
|
#define XSetWMName(display, window, tp) \
|
|
|
|
SetWindowText(window, (tp)->value)
|
|
|
|
|
|
|
|
/* There really isn't a way to set the icon name separate from the
|
|
|
|
windows name in Win32, so, just set the windows name. */
|
|
|
|
#define XSetWMIconName(display, window, tp) \
|
|
|
|
XSetWMName(display, window, tp)
|
|
|
|
|
|
|
|
#define XDestroyWindow(display, window) \
|
|
|
|
DestroyWindow(window)
|
|
|
|
|
|
|
|
/* Anything that needs to be freed was allocated with malloc in our
|
|
|
|
fake X windows library for Win32, so free it with plain old
|
|
|
|
free(). */
|
|
|
|
#define XFree(data) \
|
|
|
|
free(data)
|
|
|
|
|
|
|
|
/* Nothing to be done for this...the pointer is always 'ungrabbed'
|
|
|
|
in Win32. */
|
|
|
|
#define XUngrabPointer(display, time) \
|
|
|
|
/* Nothing. */
|
|
|
|
|
|
|
|
/* Function prototypes. */
|
|
|
|
|
|
|
|
extern XVisualInfo* XGetVisualInfo(
|
|
|
|
Display* display,
|
|
|
|
long mask,
|
|
|
|
XVisualInfo* ttemplate, /* Avoid class with C++ keyword. */
|
|
|
|
int*nitems);
|
|
|
|
|
|
|
|
extern Colormap XCreateColormap(
|
|
|
|
Display* display,
|
|
|
|
Window root,
|
|
|
|
Visual* visual,
|
|
|
|
int alloc);
|
|
|
|
|
|
|
|
extern void XAllocColorCells(
|
|
|
|
Display* display,
|
|
|
|
Colormap colormap,
|
|
|
|
Bool contig,
|
|
|
|
unsigned long plane_masks_return[],
|
|
|
|
unsigned int nplanes,
|
|
|
|
unsigned long pixels_return[],
|
|
|
|
unsigned int npixels);
|
|
|
|
|
|
|
|
extern void XStoreColor(
|
|
|
|
Display* display,
|
|
|
|
Colormap colormap,
|
|
|
|
XColor* color);
|
|
|
|
|
|
|
|
extern void XSetWindowColormap(
|
|
|
|
Display* display,
|
|
|
|
Window window,
|
|
|
|
Colormap colormap);
|
|
|
|
|
|
|
|
extern Bool XTranslateCoordinates(
|
|
|
|
Display *display,
|
|
|
|
Window src, Window dst,
|
|
|
|
int src_x, int src_y,
|
|
|
|
int* dest_x_return, int* dest_y_return,
|
|
|
|
Window* child_return);
|
|
|
|
|
|
|
|
extern Status XGetGeometry(
|
|
|
|
Display* display,
|
|
|
|
Window window,
|
|
|
|
Window* root_return,
|
|
|
|
int* x_return, int* y_return,
|
|
|
|
unsigned int* width_return, unsigned int* height_return,
|
|
|
|
unsigned int *border_width_return,
|
|
|
|
unsigned int* depth_return);
|
|
|
|
|
|
|
|
extern int DisplayWidthMM(
|
|
|
|
Display* display,
|
|
|
|
int screen);
|
|
|
|
|
|
|
|
extern int DisplayHeightMM(
|
|
|
|
Display* display,
|
|
|
|
int screen);
|
|
|
|
|
|
|
|
extern void XWarpPointer(
|
|
|
|
Display* display,
|
|
|
|
Window src, Window dst,
|
|
|
|
int src_x, int src_y,
|
|
|
|
int src_width, int src_height,
|
|
|
|
int dst_x, int dst_y);
|
|
|
|
|
|
|
|
extern int XParseGeometry(
|
|
|
|
char* string,
|
|
|
|
int* x, int* y,
|
|
|
|
unsigned int* width, unsigned int* height);
|
|
|
|
|
|
|
|
extern int XPending(
|
|
|
|
Display* display);
|
|
|
|
|
|
|
|
#endif /* __win32_x11_h__ */
|