#ifndef _MULTIBUFST_H_
#define _MULTIBUFST_H_
#include "multibuf.h"
#ifdef _MULTIBUF_SERVER_
#include "inputstr.h"
#endif
#if !defined(UNIXCPP) || defined(ANSICPP)
#define MbufGetReq(name,req,info) GetReq (name, req); \
req->reqType = info->codes->major_opcode; \
req->mbufReqType = X_##name;
#else
#define MbufGetReq(name,req,info) GetReq (name, req); \
req->reqType = info->codes->major_opcode; \
req->mbufReqType = X_name;
#endif
#define Window CARD32
#define Drawable CARD32
#define VisualID CARD32
#define Multibuffer CARD32
typedef struct xMbufBufferInfo {
CARD32 visualID B32;
CARD16 maxBuffers B16;
CARD8 depth;
CARD8 unused;
} xMbufBufferInfo;
#define sz_xMbufBufferInfo 8
typedef struct {
BYTE type;
BYTE unused;
CARD16 sequenceNumber B16;
CARD32 buffer B32;
BYTE state;
CARD8 unused1;
CARD16 unused2 B16;
CARD32 unused3 B32;
CARD32 unused4 B32;
CARD32 unused5 B32;
CARD32 unused6 B32;
CARD32 unused7 B32;
} xMbufClobberNotifyEvent;
typedef struct {
BYTE type;
BYTE unused;
CARD16 sequenceNumber B16;
CARD32 buffer B32;
CARD32 timeStamp B32;
CARD32 unused1 B32;
CARD32 unused2 B32;
CARD32 unused3 B32;
CARD32 unused4 B32;
CARD32 unused5 B32;
CARD32 unused6 B32;
} xMbufUpdateNotifyEvent;
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
} xMbufGetBufferVersionReq;
#define sz_xMbufGetBufferVersionReq 4
typedef struct {
BYTE type;
CARD8 unused;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD8 majorVersion;
CARD8 minorVersion;
CARD16 pad1 B16;
CARD32 pad2 B32;
CARD32 pad3 B32;
CARD32 pad4 B32;
CARD32 pad5 B32;
CARD32 pad6 B32;
} xMbufGetBufferVersionReply;
#define sz_xMbufGetBufferVersionReply 32
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 window B32;
CARD8 updateAction;
CARD8 updateHint;
CARD16 unused;
} xMbufCreateImageBuffersReq;
#define sz_xMbufCreateImageBuffersReq 12
typedef struct {
BYTE type;
CARD8 unused;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD16 numberBuffer B16;
CARD16 unused1 B16;
CARD32 unused2 B32;
CARD32 unused3 B32;
CARD32 unused4 B32;
CARD32 unused5 B32;
CARD32 unused6 B32;
} xMbufCreateImageBuffersReply;
#define sz_xMbufCreateImageBuffersReply 32
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 window B32;
} xMbufDestroyImageBuffersReq;
#define sz_xMbufDestroyImageBuffersReq 8
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD16 minDelay B16;
CARD16 maxDelay B16;
} xMbufDisplayImageBuffersReq;
#define sz_xMbufDisplayImageBuffersReq 8
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 window B32;
CARD32 valueMask B32;
} xMbufSetMBufferAttributesReq;
#define sz_xMbufSetMBufferAttributesReq 12
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 window B32;
} xMbufGetMBufferAttributesReq;
#define sz_xMbufGetMBufferAttributesReq 8
typedef struct {
BYTE type;
CARD8 unused;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD16 displayedBuffer B16;
CARD8 updateAction;
CARD8 updateHint;
CARD8 windowMode;
CARD8 unused0;
CARD16 unused1 B16;
CARD32 unused2 B32;
CARD32 unused3 B32;
CARD32 unused4 B32;
CARD32 unused5 B32;
} xMbufGetMBufferAttributesReply;
#define sz_xMbufGetMBufferAttributesReply 32
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 buffer B32;
CARD32 valueMask B32;
} xMbufSetBufferAttributesReq;
#define sz_xMbufSetBufferAttributesReq 12
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD32 buffer B32;
} xMbufGetBufferAttributesReq;
#define sz_xMbufGetBufferAttributesReq 8
typedef struct {
BYTE type;
CARD8 unused;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD32 window B32;
CARD32 eventMask B32;
CARD16 bufferIndex B16;
CARD8 side;
CARD8 unused0;
CARD32 unused1 B32;
CARD32 unused2 B32;
CARD32 unused3 B32;
} xMbufGetBufferAttributesReply;
#define sz_xMbufGetBufferAttributesReply 32
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
Drawable drawable B32;
} xMbufGetBufferInfoReq;
#define sz_xMbufGetBufferInfoReq 8
typedef struct {
BYTE type;
CARD8 unused;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD16 normalInfo B16;
CARD16 stereoInfo B16;
CARD32 unused1 B32;
CARD32 unused2 B32;
CARD32 unused3 B32;
CARD32 unused4 B32;
CARD32 unused5 B32;
} xMbufGetBufferInfoReply;
#define sz_xMbufGetBufferInfoReply 32
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
CARD8 unused0;
CARD8 unused1;
CARD8 unused2;
CARD8 depth;
Window wid B32;
Window parent B32;
Multibuffer left B32;
Multibuffer right B32;
INT16 x B16;
INT16 y B16;
CARD16 width B16;
CARD16 height B16;
CARD16 borderWidth B16;
#if defined(__cplusplus) || defined(c_plusplus)
CARD16 c_class B16;
#else
CARD16 class B16;
#endif
VisualID visual B32;
CARD32 mask B32;
} xMbufCreateStereoWindowReq;
#define sz_xMbufCreateStereoWindowReq 44
typedef struct {
CARD8 reqType;
CARD8 mbufReqType;
CARD16 length B16;
Multibuffer buffer B32;
INT16 x B16;
INT16 y B16;
CARD16 width B16;
CARD16 height B16;
CARD8 unused0;
CARD8 unused1;
CARD8 unused2;
BOOL exposures;
} xMbufClearImageBufferAreaReq;
#define sz_xMbufClearImageBufferAreaReq 20
#undef Window
#undef Drawable
#undef VisualID
#undef Multibuffer
#ifdef _MULTIBUF_SERVER_
#define SWAP_FUNC_VECTOR(pSTRUCT1,pSTRUCT2,DATA_TYPE,FUNC_NAME) \
{ \
DATA_TYPE (* tmpFn)(); \
\
tmpFn = pSTRUCT1->FUNC_NAME; \
pSTRUCT1->FUNC_NAME = pSTRUCT2->FUNC_NAME; \
pSTRUCT2->FUNC_NAME = tmpFn; \
}
#if !defined(UNIXCPP) || defined(ANSICPP)
#define WRAP_SCREEN_FUNC(pSCREEN,pPRIV,FUNC_NAME, PRIV_FUNC_NAME) \
{ \
if ((pPRIV->funcsWrapped & FUNC_NAME##Mask) == 0) \
{ \
pPRIV->FUNC_NAME = pSCREEN->FUNC_NAME; \
pSCREEN->FUNC_NAME = PRIV_FUNC_NAME; \
pPRIV->funcsWrapped |= FUNC_NAME##Mask; \
} \
}
#define UNWRAP_SCREEN_FUNC(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME) \
{ \
SWAP_FUNC_VECTOR(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME); \
pPRIV->funcsWrapped &= ~(FUNC_NAME##Mask); \
}
#define REWRAP_SCREEN_FUNC(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME) \
{ \
if (MB_SCREEN_PRIV(pSCREEN)->mbufWindowCount) \
{ \
SWAP_FUNC_VECTOR(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME); \
pPRIV->funcsWrapped |= FUNC_NAME##Mask; \
} \
}
#else
#define WRAP_SCREEN_FUNC(pSCREEN,pPRIV,FUNC_NAME, PRIV_FUNC_NAME) \
{ \
if ((pPRIV->funcsWrapped & FUNC_NAMEMask) == 0) \
{ \
pPRIV->FUNC_NAME = pSCREEN->FUNC_NAME; \
pSCREEN->FUNC_NAME = PRIV_FUNC_NAME; \
pPRIV->funcsWrapped |= FUNC_NAMEMask; \
} \
}
#define UNWRAP_SCREEN_FUNC(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME) \
{ \
SWAP_FUNC_VECTOR(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME); \
pPRIV->funcsWrapped &= ~(FUNC_NAMEMask); \
}
#define REWRAP_SCREEN_FUNC(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME) \
{ \
if (MB_SCREEN_PRIV(pSCREEN)->mbufWindowCount) \
{ \
SWAP_FUNC_VECTOR(pSCREEN,pPRIV,DATA_TYPE,FUNC_NAME); \
pPRIV->funcsWrapped |= FUNC_NAMEMask; \
} \
}
#endif
typedef struct _Multibuffers *MultibuffersPtr;
typedef struct _Multibuffer {
MultibuffersPtr pMultibuffers;
Mask eventMask;
Mask otherEventMask;
OtherClients *otherClients;
int number;
int side;
int clobber;
PixmapPtr pPixmap;
} MultibufferRec, *MultibufferPtr;
typedef struct _Multibuffers {
WindowPtr pWindow;
int numMultibuffer;
int refcnt;
int displayedMultibuffer;
int updateAction;
int updateHint;
int windowMode;
TimeStamp lastUpdate;
unsigned short width, height;
short x, y;
MultibufferPtr buffers;
} MultibuffersRec;
typedef struct _MultibufferScreen {
PositionWindowProcPtr PositionWindow;
} MultibufferScreenRec, *MultibufferScreenPtr;
typedef struct _DisplayRequest {
struct _DisplayRequest *next;
TimeStamp activateTime;
ClientPtr pClient;
XID id;
} DisplayRequestRec, *DisplayRequestPtr;
#define DestroyWindowMask (1L<<0)
#define PositionWindowMask (1L<<1)
#define PostValidateTreeMask (1L<<2)
#define ClipNotifyMask (1L<<3)
#define WindowExposuresMask (1L<<4)
#define CopyWindowMask (1L<<5)
#define ClearToBackgroundMask (1L<<6)
#define ChangeWindowAttributesMask (1L<<7)
extern int MultibufferScreenIndex;
extern int MultibufferWindowIndex;
extern RESTYPE MultibufferDrawableResType;
extern void MultibufferUpdate(
MultibufferPtr ,
CARD32
);
extern void MultibufferExpose(
MultibufferPtr ,
RegionPtr
);
extern void MultibufferClobber(
MultibufferPtr
);
typedef struct _mbufWindow *mbufWindowPtr;
#define MB_DISPLAYED_BUFFER(pMBWindow) \
((pMBWindow)->buffers + (pMBWindow)->displayedMultibuffer)
typedef struct _mbufBuffer {
mbufWindowPtr pMBWindow;
Mask eventMask;
Mask otherEventMask;
OtherClientsPtr otherClients;
int number;
int side;
int clobber;
DrawablePtr pDrawable;
} mbufBufferRec, *mbufBufferPtr;
#define MB_WINDOW_PRIV(pWin) \
((mbufWindowPtr)((pWin)->devPrivates[MultibufferWindowIndex].ptr))
typedef struct _mbufWindow {
WindowPtr pWindow;
int numMultibuffer;
mbufBufferPtr buffers;
int displayedMultibuffer;
int updateAction;
int updateHint;
int windowMode;
TimeStamp lastUpdate;
short x, y;
unsigned short width, height;
DevUnion devPrivate;
} mbufWindowRec;
#define MB_SCREEN_PRIV(pScreen) \
((mbufScreenPtr)((pScreen)->devPrivates[MultibufferScreenIndex].ptr))
typedef struct _mbufScreen {
long mbufWindowCount;
DestroyWindowProcPtr DestroyWindow;
long funcsWrapped;
int nInfo;
xMbufBufferInfo *pInfo;
int (* CreateImageBuffers)(
WindowPtr ,
int ,
XID * ,
int ,
int
);
void (* DestroyImageBuffers)(
WindowPtr
);
void (* DisplayImageBuffers)(
ScreenPtr ,
mbufBufferPtr * ,
mbufWindowPtr * ,
int
);
void (* ClearImageBufferArea)(
mbufBufferPtr ,
short ,
short ,
unsigned short ,
unsigned short ,
Bool
);
Bool (* ChangeMBufferAttributes)(
);
Bool (* ChangeBufferAttributes)(
);
void (* DeleteBufferDrawable)(
DrawablePtr
);
void (* WrapScreenFuncs)(
ScreenPtr
);
void (* ResetProc)(
ScreenPtr
);
DevUnion devPrivate;
} mbufScreenRec, *mbufScreenPtr;
#ifdef _MULTIBUF_PIXMAP_
#define MB_SCREEN_PRIV_PIXMAP(pScreen) \
((mbufPixmapPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
typedef struct _mbufPixmapPriv
{
PositionWindowProcPtr PositionWindow;
long funcsWrapped;
} mbufPixmapPrivRec, *mbufPixmapPrivPtr;
#endif
#ifdef _MULTIBUF_BUFFER_
extern int frameWindowPrivateIndex;
#define MB_SCREEN_PRIV_BUFFER(pScreen) \
((mbufBufferPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
typedef struct _mbufBufferPriv
{
DevUnion *frameBuffer;
DevUnion selectPlane;
RegionRec backBuffer;
RegionRec subtractRgn;
RegionRec unionRgn;
Bool rgnChanged;
void (* CopyBufferBits)();
void (* DrawSelectPlane)();
PostValidateTreeProcPtr PostValidateTree;
ClipNotifyProcPtr ClipNotify;
WindowExposuresProcPtr WindowExposures;
CopyWindowProcPtr CopyWindow;
ClearToBackgroundProcPtr ClearToBackground;
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
long funcsWrapped;
unsigned inClearToBackground:1;
} mbufBufferPrivRec, *mbufBufferPrivPtr;
#endif
#endif
#endif