b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * $XFree86: xc/programs/Xserver/miext/shadow/shadow.h,v 1.6tsi Exp $
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright © 2000 Keith Packard
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * documentation for any purpose is hereby granted without fee, provided that
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the above copyright notice appear in all copies and that both that
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * copyright notice and this permission notice appear in supporting
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * documentation, and that the name of Keith Packard not be used in
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * advertising or publicity pertaining to distribution of the software without
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * specific, written prior permission. Keith Packard makes no
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * representations about the suitability of this software for any purpose. It
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * is provided "as is" without express or implied warranty.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * PERFORMANCE OF THIS SOFTWARE.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef _SHADOW_H_
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _SHADOW_H_
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "scrnintstr.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef RENDER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include "picturestr.h"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _shadowBuf *shadowBufPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void (*ShadowUpdateProc) (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_WINDOW_RELOCATE 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_WINDOW_READ 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_WINDOW_WRITE 4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void *(*ShadowWindowProc) (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 row,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 offset,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int mode,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 *size,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync void *closure);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _shadowBuf {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pNext;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ShadowUpdateProc update;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ShadowWindowProc window;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync RegionRec damage;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync PixmapPtr pPixmap;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync void *closure;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int randr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} shadowBufRec;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Match defines from randr extension */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_ROTATE_0 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_ROTATE_90 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_ROTATE_180 4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_ROTATE_270 8
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync SHADOW_ROTATE_180|SHADOW_ROTATE_270)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_REFLECT_X 16
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_REFLECT_Y 32
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _shadowScrPriv {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync PaintWindowBackgroundProcPtr PaintWindowBackground;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync PaintWindowBorderProcPtr PaintWindowBorder;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CopyWindowProcPtr CopyWindow;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CloseScreenProcPtr CloseScreen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CreateGCProcPtr CreateGC;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GetImageProcPtr GetImage;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef RENDER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CompositeProcPtr Composite;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GlyphsProcPtr Glyphs;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BSFuncRec BackingStoreFuncs;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} shadowScrPrivRec, *shadowScrPrivPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncextern int shadowScrPrivateIndex;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define shadowGetScrPriv(pScr) ((shadowScrPrivPtr) (pScr)->devPrivates[shadowScrPrivateIndex].ptr)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define shadowScrPriv(pScr) shadowScrPrivPtr pScrPriv = shadowGetScrPriv(pScr)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncBool
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowSetup (ScreenPtr pScreen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncBool
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowAdd (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync PixmapPtr pPixmap,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ShadowUpdateProc update,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ShadowWindowProc window,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int randr,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync void *closure);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowBufPtr
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowFindBuf (WindowPtr pWindow);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncBool
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowAlloc (int width, int height, int bpp);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdatePacked (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdatePlanar4 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdatePlanar4x8 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotatePacked (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate8_90 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate16_90 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate32_90 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate8_180 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate16_180 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate32_180 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate8_270 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate16_270 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateRotate32_270 (ScreenPtr pScreen,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shadowBufPtr pBuf);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateProc shadowUpdatePackedWeak(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateProc shadowUpdatePlanar4Weak(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateProc shadowUpdatePlanar4x8Weak(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUpdateProc shadowUpdateRotatePackedWeak(void);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowWrapGC (GCPtr pGC);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncshadowUnwrapGC (GCPtr pGC);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* _SHADOW_H_ */