shadow.h revision 6747b715
105b261ecSmrg/* 205b261ecSmrg * 305b261ecSmrg * Copyright © 2000 Keith Packard 405b261ecSmrg * 505b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its 605b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that 705b261ecSmrg * the above copyright notice appear in all copies and that both that 805b261ecSmrg * copyright notice and this permission notice appear in supporting 905b261ecSmrg * documentation, and that the name of Keith Packard not be used in 1005b261ecSmrg * advertising or publicity pertaining to distribution of the software without 1105b261ecSmrg * specific, written prior permission. Keith Packard makes no 1205b261ecSmrg * representations about the suitability of this software for any purpose. It 1305b261ecSmrg * is provided "as is" without express or implied warranty. 1405b261ecSmrg * 1505b261ecSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1605b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1705b261ecSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1805b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1905b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 2005b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2105b261ecSmrg * PERFORMANCE OF THIS SOFTWARE. 2205b261ecSmrg */ 2305b261ecSmrg 2405b261ecSmrg#ifndef _SHADOW_H_ 2505b261ecSmrg#define _SHADOW_H_ 2605b261ecSmrg 2705b261ecSmrg#include "scrnintstr.h" 2805b261ecSmrg 2905b261ecSmrg#include "picturestr.h" 3005b261ecSmrg 3105b261ecSmrg#include "damage.h" 3205b261ecSmrg#include "damagestr.h" 3305b261ecSmrgtypedef struct _shadowBuf *shadowBufPtr; 3405b261ecSmrg 3505b261ecSmrgtypedef void (*ShadowUpdateProc) (ScreenPtr pScreen, 3605b261ecSmrg shadowBufPtr pBuf); 3705b261ecSmrg 3805b261ecSmrg#define SHADOW_WINDOW_RELOCATE 1 3905b261ecSmrg#define SHADOW_WINDOW_READ 2 4005b261ecSmrg#define SHADOW_WINDOW_WRITE 4 4105b261ecSmrg 4205b261ecSmrgtypedef void *(*ShadowWindowProc) (ScreenPtr pScreen, 4305b261ecSmrg CARD32 row, 4405b261ecSmrg CARD32 offset, 4505b261ecSmrg int mode, 4605b261ecSmrg CARD32 *size, 4705b261ecSmrg void *closure); 4805b261ecSmrg 4905b261ecSmrg/* BC hack: do not move the damage member. see shadow.c for explanation. */ 5005b261ecSmrgtypedef struct _shadowBuf { 5105b261ecSmrg DamagePtr pDamage; 5205b261ecSmrg ShadowUpdateProc update; 5305b261ecSmrg ShadowWindowProc window; 5405b261ecSmrg RegionRec damage; 5505b261ecSmrg PixmapPtr pPixmap; 5605b261ecSmrg void *closure; 5705b261ecSmrg int randr; 5805b261ecSmrg 5905b261ecSmrg /* screen wrappers */ 6005b261ecSmrg GetImageProcPtr GetImage; 6105b261ecSmrg CloseScreenProcPtr CloseScreen; 6205b261ecSmrg} shadowBufRec; 6305b261ecSmrg 6405b261ecSmrg/* Match defines from randr extension */ 6505b261ecSmrg#define SHADOW_ROTATE_0 1 6605b261ecSmrg#define SHADOW_ROTATE_90 2 6705b261ecSmrg#define SHADOW_ROTATE_180 4 6805b261ecSmrg#define SHADOW_ROTATE_270 8 6905b261ecSmrg#define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\ 7005b261ecSmrg SHADOW_ROTATE_180|SHADOW_ROTATE_270) 7105b261ecSmrg#define SHADOW_REFLECT_X 16 7205b261ecSmrg#define SHADOW_REFLECT_Y 32 7305b261ecSmrg#define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y) 7405b261ecSmrg 756747b715Smrgextern _X_EXPORT DevPrivateKey shadowScrPrivateKey; 7605b261ecSmrg 774642e01fSmrg#define shadowGetBuf(pScr) ((shadowBufPtr) \ 784642e01fSmrg dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey)) 7905b261ecSmrg#define shadowBuf(pScr) shadowBufPtr pBuf = shadowGetBuf(pScr) 8005b261ecSmrg#define shadowDamage(pBuf) DamageRegion(pBuf->pDamage) 8105b261ecSmrg 826747b715Smrgextern _X_EXPORT Bool 8305b261ecSmrgshadowSetup (ScreenPtr pScreen); 8405b261ecSmrg 856747b715Smrgextern _X_EXPORT Bool 8605b261ecSmrgshadowAdd (ScreenPtr pScreen, 8705b261ecSmrg PixmapPtr pPixmap, 8805b261ecSmrg ShadowUpdateProc update, 8905b261ecSmrg ShadowWindowProc window, 9005b261ecSmrg int randr, 9105b261ecSmrg void *closure); 9205b261ecSmrg 936747b715Smrgextern _X_EXPORT void 9405b261ecSmrgshadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap); 9505b261ecSmrg 966747b715Smrgextern _X_EXPORT Bool 9705b261ecSmrgshadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window); 9805b261ecSmrg 996747b715Smrgextern _X_EXPORT void * 10005b261ecSmrgshadowAlloc (int width, int height, int bpp); 10105b261ecSmrg 1026747b715Smrgextern _X_EXPORT void 10305b261ecSmrgshadowUpdatePacked (ScreenPtr pScreen, 10405b261ecSmrg shadowBufPtr pBuf); 10505b261ecSmrg 1066747b715Smrgextern _X_EXPORT void 10705b261ecSmrgshadowUpdatePlanar4 (ScreenPtr pScreen, 10805b261ecSmrg shadowBufPtr pBuf); 10905b261ecSmrg 1106747b715Smrgextern _X_EXPORT void 11105b261ecSmrgshadowUpdatePlanar4x8 (ScreenPtr pScreen, 11205b261ecSmrg shadowBufPtr pBuf); 11305b261ecSmrg 1146747b715Smrgextern _X_EXPORT void 11505b261ecSmrgshadowUpdateRotatePacked (ScreenPtr pScreen, 11605b261ecSmrg shadowBufPtr pBuf); 11705b261ecSmrg 1186747b715Smrgextern _X_EXPORT void 11905b261ecSmrgshadowUpdateRotate8_90 (ScreenPtr pScreen, 12005b261ecSmrg shadowBufPtr pBuf); 12105b261ecSmrg 1226747b715Smrgextern _X_EXPORT void 12305b261ecSmrgshadowUpdateRotate16_90 (ScreenPtr pScreen, 12405b261ecSmrg shadowBufPtr pBuf); 12505b261ecSmrg 1266747b715Smrgextern _X_EXPORT void 12705b261ecSmrgshadowUpdateRotate16_90YX (ScreenPtr pScreen, 12805b261ecSmrg shadowBufPtr pBuf); 12905b261ecSmrg 1306747b715Smrgextern _X_EXPORT void 13105b261ecSmrgshadowUpdateRotate32_90 (ScreenPtr pScreen, 13205b261ecSmrg shadowBufPtr pBuf); 13305b261ecSmrg 1346747b715Smrgextern _X_EXPORT void 13505b261ecSmrgshadowUpdateRotate8_180 (ScreenPtr pScreen, 13605b261ecSmrg shadowBufPtr pBuf); 13705b261ecSmrg 1386747b715Smrgextern _X_EXPORT void 13905b261ecSmrgshadowUpdateRotate16_180 (ScreenPtr pScreen, 14005b261ecSmrg shadowBufPtr pBuf); 14105b261ecSmrg 1426747b715Smrgextern _X_EXPORT void 14305b261ecSmrgshadowUpdateRotate32_180 (ScreenPtr pScreen, 14405b261ecSmrg shadowBufPtr pBuf); 14505b261ecSmrg 1466747b715Smrgextern _X_EXPORT void 14705b261ecSmrgshadowUpdateRotate8_270 (ScreenPtr pScreen, 14805b261ecSmrg shadowBufPtr pBuf); 14905b261ecSmrg 1506747b715Smrgextern _X_EXPORT void 15105b261ecSmrgshadowUpdateRotate16_270 (ScreenPtr pScreen, 15205b261ecSmrg shadowBufPtr pBuf); 15305b261ecSmrg 1546747b715Smrgextern _X_EXPORT void 15505b261ecSmrgshadowUpdateRotate16_270YX (ScreenPtr pScreen, 15605b261ecSmrg shadowBufPtr pBuf); 15705b261ecSmrg 1586747b715Smrgextern _X_EXPORT void 15905b261ecSmrgshadowUpdateRotate32_270 (ScreenPtr pScreen, 16005b261ecSmrg shadowBufPtr pBuf); 16105b261ecSmrg 1626747b715Smrgextern _X_EXPORT void 16305b261ecSmrgshadowUpdateRotate8 (ScreenPtr pScreen, 16405b261ecSmrg shadowBufPtr pBuf); 16505b261ecSmrg 1666747b715Smrgextern _X_EXPORT void 16705b261ecSmrgshadowUpdateRotate16 (ScreenPtr pScreen, 16805b261ecSmrg shadowBufPtr pBuf); 16905b261ecSmrg 1706747b715Smrgextern _X_EXPORT void 17105b261ecSmrgshadowUpdateRotate32 (ScreenPtr pScreen, 17205b261ecSmrg shadowBufPtr pBuf); 17305b261ecSmrg 17405b261ecSmrgtypedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr); 17505b261ecSmrg 1766747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePackedWeak(void); 1776747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4Weak(void); 1786747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4x8Weak(void); 1796747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdateRotatePackedWeak(void); 18005b261ecSmrg 18105b261ecSmrg#endif /* _SHADOW_H_ */ 182