610 lines
18 KiB
C
610 lines
18 KiB
C
|
/*
|
||
|
* $Xorg: multibufst.h,v 1.4 2001/02/09 02:03:24 xorgcvs Exp $
|
||
|
*
|
||
|
Copyright 1989, 1998 The Open Group
|
||
|
|
||
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||
|
documentation for any purpose is hereby granted without fee, provided that
|
||
|
the above copyright notice appear in all copies and that both that
|
||
|
copyright notice and this permission notice appear in supporting
|
||
|
documentation.
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in
|
||
|
all copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
|
||
|
Except as contained in this notice, the name of The Open Group shall not be
|
||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||
|
in this Software without prior written authorization from The Open Group.
|
||
|
*/
|
||
|
|
||
|
/* $XFree86: xc/include/extensions/multibufst.h,v 3.8 2001/12/19 21:37:29 dawes Exp $ */
|
||
|
|
||
|
#ifndef _MULTIBUFST_H_
|
||
|
#define _MULTIBUFST_H_
|
||
|
|
||
|
/*
|
||
|
* Protocol requests constants and alignment values
|
||
|
*/
|
||
|
|
||
|
#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; /* associated visual */
|
||
|
CARD16 maxBuffers B16; /* maximum supported buffers */
|
||
|
CARD8 depth; /* depth of visual (redundant) */
|
||
|
CARD8 unused;
|
||
|
} xMbufBufferInfo;
|
||
|
#define sz_xMbufBufferInfo 8
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type;
|
||
|
BYTE unused;
|
||
|
CARD16 sequenceNumber B16;
|
||
|
CARD32 buffer B32; /* affected buffer */
|
||
|
BYTE state; /* current status */
|
||
|
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; /* affected buffer */
|
||
|
CARD32 timeStamp B32; /* update time */
|
||
|
CARD32 unused1 B32;
|
||
|
CARD32 unused2 B32;
|
||
|
CARD32 unused3 B32;
|
||
|
CARD32 unused4 B32;
|
||
|
CARD32 unused5 B32;
|
||
|
CARD32 unused6 B32;
|
||
|
} xMbufUpdateNotifyEvent;
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufGetBufferVersion */
|
||
|
CARD16 length B16;
|
||
|
} xMbufGetBufferVersionReq;
|
||
|
#define sz_xMbufGetBufferVersionReq 4
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type; /* X_Reply */
|
||
|
CARD8 unused; /* not used */
|
||
|
CARD16 sequenceNumber B16;
|
||
|
CARD32 length B32;
|
||
|
CARD8 majorVersion; /* major version of Multi-Buffering protocol */
|
||
|
CARD8 minorVersion; /* minor version of Multi-Buffering protocol */
|
||
|
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; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufCreateImageBuffers */
|
||
|
CARD16 length B16;
|
||
|
CARD32 window B32; /* associated window */
|
||
|
CARD8 updateAction; /* action at update */
|
||
|
CARD8 updateHint; /* hint as to frequency of updates */
|
||
|
CARD16 unused;
|
||
|
} xMbufCreateImageBuffersReq; /* followed by buffer ids */
|
||
|
#define sz_xMbufCreateImageBuffersReq 12
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type; /* X_Reply */
|
||
|
CARD8 unused; /* not used */
|
||
|
CARD16 sequenceNumber B16;
|
||
|
CARD32 length B32;
|
||
|
CARD16 numberBuffer B16; /* number successfully allocated */
|
||
|
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; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufDestroyImageBuffers */
|
||
|
CARD16 length B16;
|
||
|
CARD32 window B32; /* associated window */
|
||
|
} xMbufDestroyImageBuffersReq;
|
||
|
#define sz_xMbufDestroyImageBuffersReq 8
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufDisplayImageBuffers */
|
||
|
CARD16 length B16;
|
||
|
CARD16 minDelay B16; /* minimum time between last update and now */
|
||
|
CARD16 maxDelay B16; /* maximum time between last update and now */
|
||
|
} xMbufDisplayImageBuffersReq; /* followed by list of buffers */
|
||
|
#define sz_xMbufDisplayImageBuffersReq 8
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufSetMBufferAttributes */
|
||
|
CARD16 length B16;
|
||
|
CARD32 window B32; /* associated window */
|
||
|
CARD32 valueMask B32; /* modified entries */
|
||
|
} xMbufSetMBufferAttributesReq; /* followed by values */
|
||
|
#define sz_xMbufSetMBufferAttributesReq 12
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufGetMBufferAttributes */
|
||
|
CARD16 length B16;
|
||
|
CARD32 window B32; /* associated window */
|
||
|
} xMbufGetMBufferAttributesReq;
|
||
|
#define sz_xMbufGetMBufferAttributesReq 8
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type; /* X_Reply */
|
||
|
CARD8 unused; /* not used */
|
||
|
CARD16 sequenceNumber B16;
|
||
|
CARD32 length B32;
|
||
|
CARD16 displayedBuffer B16; /* currently visible buffer */
|
||
|
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; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufSetBufferAttributes */
|
||
|
CARD16 length B16;
|
||
|
CARD32 buffer B32;
|
||
|
CARD32 valueMask B32;
|
||
|
} xMbufSetBufferAttributesReq; /* followed by values */
|
||
|
#define sz_xMbufSetBufferAttributesReq 12
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufGetBufferAttributes */
|
||
|
CARD16 length B16;
|
||
|
CARD32 buffer B32;
|
||
|
} xMbufGetBufferAttributesReq;
|
||
|
#define sz_xMbufGetBufferAttributesReq 8
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type; /* X_Reply */
|
||
|
CARD8 unused; /* not used */
|
||
|
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; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufGetBufferInfo */
|
||
|
CARD16 length B16;
|
||
|
Drawable drawable B32;
|
||
|
} xMbufGetBufferInfoReq;
|
||
|
#define sz_xMbufGetBufferInfoReq 8
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE type; /* X_Reply */
|
||
|
CARD8 unused; /* not used */
|
||
|
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; /* followed by buffer infos */
|
||
|
#define sz_xMbufGetBufferInfoReply 32
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufCreateStereoWindow */
|
||
|
CARD16 length B16;
|
||
|
CARD8 unused0;
|
||
|
CARD8 unused1;
|
||
|
CARD8 unused2;
|
||
|
CARD8 depth;
|
||
|
Window wid B32;
|
||
|
Window parent B32;
|
||
|
Multibuffer left B32; /* associated buffers */
|
||
|
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; /* followed by value list */
|
||
|
#define sz_xMbufCreateStereoWindowReq 44
|
||
|
|
||
|
typedef struct {
|
||
|
CARD8 reqType; /* always codes->major_opcode */
|
||
|
CARD8 mbufReqType; /* always X_MbufClearImageBufferArea */
|
||
|
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_
|
||
|
/* Macros for wrapping and unwrapping functions */
|
||
|
|
||
|
#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_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; \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/* The _Multibuffer and _Multibuffers structures below refer to each other,
|
||
|
* so we need this forward declaration
|
||
|
*/
|
||
|
typedef struct _Multibuffers *MultibuffersPtr;
|
||
|
|
||
|
/*
|
||
|
* per-Multibuffer data
|
||
|
*/
|
||
|
|
||
|
typedef struct _Multibuffer {
|
||
|
MultibuffersPtr pMultibuffers; /* associated window data */
|
||
|
Mask eventMask; /* MultibufferClobberNotifyMask|ExposureMask|MultibufferUpdateNotifyMask */
|
||
|
Mask otherEventMask; /* mask of all other clients event masks */
|
||
|
OtherClients *otherClients; /* other clients that want events */
|
||
|
int number; /* index of this buffer into array */
|
||
|
int side; /* always Mono */
|
||
|
int clobber; /* Unclobbered, PartiallyClobbered, FullClobbered */
|
||
|
PixmapPtr pPixmap; /* associated pixmap */
|
||
|
} MultibufferRec, *MultibufferPtr;
|
||
|
|
||
|
/*
|
||
|
* per-window data
|
||
|
*/
|
||
|
|
||
|
typedef struct _Multibuffers {
|
||
|
WindowPtr pWindow; /* associated window */
|
||
|
int numMultibuffer; /* count of buffers */
|
||
|
int refcnt; /* ref count for delete */
|
||
|
int displayedMultibuffer; /* currently active buffer */
|
||
|
int updateAction; /* Undefined, Background, Untouched, Copied */
|
||
|
int updateHint; /* Frequent, Intermittent, Static */
|
||
|
int windowMode; /* always Mono */
|
||
|
|
||
|
TimeStamp lastUpdate; /* time of last update */
|
||
|
|
||
|
unsigned short width, height; /* last known window size */
|
||
|
short x, y; /* for static gravity */
|
||
|
|
||
|
MultibufferPtr buffers; /* array of numMultibuffer buffers */
|
||
|
} MultibuffersRec;
|
||
|
|
||
|
/*
|
||
|
* per-screen data
|
||
|
*/
|
||
|
typedef struct _MultibufferScreen {
|
||
|
PositionWindowProcPtr PositionWindow; /* pWin, x,y */
|
||
|
} MultibufferScreenRec, *MultibufferScreenPtr;
|
||
|
|
||
|
/*
|
||
|
* per display-image-buffers request data.
|
||
|
*/
|
||
|
|
||
|
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( /* pMbuffer, time */
|
||
|
MultibufferPtr /* pMultibuffer */,
|
||
|
CARD32 /* time */
|
||
|
);
|
||
|
extern void MultibufferExpose( /* pMbuffer, pRegion */
|
||
|
MultibufferPtr /* pMultibuffer */,
|
||
|
RegionPtr /* pRegion */
|
||
|
);
|
||
|
extern void MultibufferClobber( /* pMbuffer */
|
||
|
MultibufferPtr /* pMultibuffer */
|
||
|
);
|
||
|
|
||
|
typedef struct _mbufWindow *mbufWindowPtr;
|
||
|
|
||
|
/*
|
||
|
* per-buffer data
|
||
|
*/
|
||
|
|
||
|
#define MB_DISPLAYED_BUFFER(pMBWindow) \
|
||
|
((pMBWindow)->buffers + (pMBWindow)->displayedMultibuffer)
|
||
|
|
||
|
typedef struct _mbufBuffer {
|
||
|
mbufWindowPtr pMBWindow; /* associated window data */
|
||
|
Mask eventMask; /* client event mask */
|
||
|
Mask otherEventMask; /* union of other clients' event masks */
|
||
|
OtherClientsPtr otherClients; /* other clients that want events */
|
||
|
int number; /* index of this buffer into array */
|
||
|
int side; /* stero side: always Mono */
|
||
|
int clobber; /* clober state */
|
||
|
DrawablePtr pDrawable; /* associated drawable */
|
||
|
} mbufBufferRec, *mbufBufferPtr;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* per-window data
|
||
|
*/
|
||
|
|
||
|
#define MB_WINDOW_PRIV(pWin) \
|
||
|
((mbufWindowPtr)((pWin)->devPrivates[MultibufferWindowIndex].ptr))
|
||
|
|
||
|
typedef struct _mbufWindow {
|
||
|
WindowPtr pWindow; /* associated window */
|
||
|
int numMultibuffer; /* count of buffers */
|
||
|
mbufBufferPtr buffers; /* array of (numMultibuffer) buffers */
|
||
|
int displayedMultibuffer; /* currently active buffer */
|
||
|
int updateAction; /* Undefined, Background,
|
||
|
Untouched, Copied */
|
||
|
int updateHint; /* Frequent, Intermittent, Static */
|
||
|
int windowMode; /* always Mono */
|
||
|
TimeStamp lastUpdate; /* time of last update */
|
||
|
short x, y; /* for static gravity */
|
||
|
unsigned short width, height; /* last known window size */
|
||
|
DevUnion devPrivate;
|
||
|
} mbufWindowRec;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* per-screen data
|
||
|
*/
|
||
|
|
||
|
#define MB_SCREEN_PRIV(pScreen) \
|
||
|
((mbufScreenPtr)((pScreen)->devPrivates[MultibufferScreenIndex].ptr))
|
||
|
|
||
|
typedef struct _mbufScreen {
|
||
|
long mbufWindowCount; /* count of multibuffered windows */
|
||
|
|
||
|
/* Wrap pScreen->DestroyWindow */
|
||
|
DestroyWindowProcPtr DestroyWindow;
|
||
|
long funcsWrapped; /* flags which functions are wrapped */
|
||
|
|
||
|
/* Initialized by device-dependent section */
|
||
|
int nInfo; /* number of buffer info rec's */
|
||
|
xMbufBufferInfo *pInfo; /* buffer info (for Normal buffers) */
|
||
|
|
||
|
int (* CreateImageBuffers)(
|
||
|
WindowPtr /* pWin */,
|
||
|
int /* nbuf */,
|
||
|
XID * /* ids */,
|
||
|
int /* action */,
|
||
|
int /* hint */
|
||
|
);
|
||
|
void (* DestroyImageBuffers)(
|
||
|
WindowPtr /* pWin */
|
||
|
);
|
||
|
void (* DisplayImageBuffers)(
|
||
|
ScreenPtr /* pScreen */,
|
||
|
mbufBufferPtr * /* ppMBBuffer */,
|
||
|
mbufWindowPtr * /* ppMBWindow */,
|
||
|
int /* nbuf */
|
||
|
);
|
||
|
void (* ClearImageBufferArea)(
|
||
|
mbufBufferPtr /* pMBBuffer */,
|
||
|
short /* x */,
|
||
|
short /* y */,
|
||
|
unsigned short /* width */,
|
||
|
unsigned short /* height */,
|
||
|
Bool /* exposures */
|
||
|
);
|
||
|
Bool (* ChangeMBufferAttributes)( /* pMBWindow, vmask */
|
||
|
/* FIXME */
|
||
|
);
|
||
|
Bool (* ChangeBufferAttributes)( /* pMBBuffer, vmask */
|
||
|
/* FIXME */
|
||
|
);
|
||
|
void (* DeleteBufferDrawable)(
|
||
|
DrawablePtr /* pDrawable */
|
||
|
);
|
||
|
void (* WrapScreenFuncs)(
|
||
|
ScreenPtr /* pScreen */
|
||
|
);
|
||
|
void (* ResetProc)(
|
||
|
ScreenPtr /* pScreen */
|
||
|
);
|
||
|
DevUnion devPrivate;
|
||
|
} mbufScreenRec, *mbufScreenPtr;
|
||
|
|
||
|
|
||
|
/* Privates to mbufScreenRec */
|
||
|
|
||
|
#ifdef _MULTIBUF_PIXMAP_
|
||
|
#define MB_SCREEN_PRIV_PIXMAP(pScreen) \
|
||
|
((mbufPixmapPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
|
||
|
|
||
|
typedef struct _mbufPixmapPriv
|
||
|
{
|
||
|
/* Pointers to wrapped functions */
|
||
|
PositionWindowProcPtr PositionWindow; /* pWin, x,y */
|
||
|
long funcsWrapped; /* flags which functions are wrapped */
|
||
|
} mbufPixmapPrivRec, *mbufPixmapPrivPtr;
|
||
|
#endif /* _MULTIBUF_PIXMAP_ */
|
||
|
|
||
|
|
||
|
#ifdef _MULTIBUF_BUFFER_
|
||
|
|
||
|
extern int frameWindowPrivateIndex;
|
||
|
|
||
|
#define MB_SCREEN_PRIV_BUFFER(pScreen) \
|
||
|
((mbufBufferPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
|
||
|
|
||
|
typedef struct _mbufBufferPriv
|
||
|
{
|
||
|
DevUnion *frameBuffer; /* Array of screen framebuffers */
|
||
|
DevUnion selectPlane; /* Plane(s) that select displayed buffer */
|
||
|
|
||
|
/*
|
||
|
* Note: subtractRgn and unionRgn may overlap. subtractRgn is a union
|
||
|
* of all the old clipLists of the windows that are displaying
|
||
|
* the backbuffer. unionRgn is the union of all the new clipLists
|
||
|
* of the same windows.
|
||
|
*/
|
||
|
|
||
|
RegionRec backBuffer; /* Area of screen displaying back buffer */
|
||
|
RegionRec subtractRgn; /* Regions lost to backBuffer */
|
||
|
RegionRec unionRgn; /* Regions gained by backBuffer */
|
||
|
Bool rgnChanged; /* TRUE if "backBuffer" needs to be updated */
|
||
|
|
||
|
void (* CopyBufferBits)(); /* pMBWindow, srcBufferNum, dstBufferNum */
|
||
|
void (* DrawSelectPlane)(); /* pScreen, selectPlane, pRegion, bufferNum */
|
||
|
|
||
|
/* Pointers to wrapped functions */
|
||
|
PostValidateTreeProcPtr PostValidateTree; /* pParent, pChild, kind */
|
||
|
ClipNotifyProcPtr ClipNotify; /* pWin, dx, dy */
|
||
|
WindowExposuresProcPtr WindowExposures; /* pWin, pRegion */
|
||
|
CopyWindowProcPtr CopyWindow; /* pWin, oldPt, pOldRegion */
|
||
|
ClearToBackgroundProcPtr ClearToBackground; /* pWin, x,y,w,h, sendExpose */
|
||
|
ChangeWindowAttributesProcPtr ChangeWindowAttributes; /* pWin, vmask */
|
||
|
long funcsWrapped; /* flags which functions are wrapped */
|
||
|
unsigned inClearToBackground:1; /* used by WindowExposure */
|
||
|
} mbufBufferPrivRec, *mbufBufferPrivPtr;
|
||
|
#endif /* _MULTIBUF_BUFFER_ */
|
||
|
|
||
|
#endif /* _MULTIBUF_SERVER_ */
|
||
|
#endif /* _MULTIBUFST_H_ */
|