📄 multibufst.h
字号:
} \}#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 */#if NeedFunctionPrototypes MultibufferPtr /* pMultibuffer */, CARD32 /* time */#endif );extern void MultibufferExpose( /* pMbuffer, pRegion */#if NeedFunctionPrototypes MultibufferPtr /* pMultibuffer */, RegionPtr /* pRegion */#endif );extern void MultibufferClobber( /* pMbuffer */#if NeedFunctionPrototypes MultibufferPtr /* pMultibuffer */#endif );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)(#if NeedNestedPrototypes WindowPtr /* pWin */, int /* nbuf */, XID * /* ids */, int /* action */, int /* hint */#endif ); void (* DestroyImageBuffers)(#if NeedNestedPrototypes WindowPtr /* pWin */#endif ); void (* DisplayImageBuffers)(#if NeedNestedPrototypes ScreenPtr /* pScreen */, mbufBufferPtr * /* ppMBBuffer */, mbufWindowPtr * /* ppMBWindow */, int /* nbuf */#endif ); void (* ClearImageBufferArea)(#if NeedNestedPrototypes mbufBufferPtr /* pMBBuffer */, short /* x */, short /* y */, unsigned short /* width */, unsigned short /* height */, Bool /* exposures */#endif ); Bool (* ChangeMBufferAttributes)( /* pMBWindow, vmask */ #if NeedNestedPrototypes /* FIXME */#endif ); Bool (* ChangeBufferAttributes)( /* pMBBuffer, vmask */#if NeedNestedPrototypes /* FIXME */#endif ); void (* DeleteBufferDrawable)(#if NeedNestedPrototypes DrawablePtr /* pDrawable */#endif ); void (* WrapScreenFuncs)(#if NeedNestedPrototypes ScreenPtr /* pScreen */#endif ); void (* ResetProc)(#if NeedNestedPrototypes ScreenPtr /* pScreen */#endif ); 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_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -