shadow.h revision 4642e01f
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#ifdef RENDER 3005b261ecSmrg#include "picturestr.h" 3105b261ecSmrg#endif 3205b261ecSmrg 3305b261ecSmrg#include "damage.h" 3405b261ecSmrg#include "damagestr.h" 3505b261ecSmrgtypedef struct _shadowBuf *shadowBufPtr; 3605b261ecSmrg 3705b261ecSmrgtypedef void (*ShadowUpdateProc) (ScreenPtr pScreen, 3805b261ecSmrg shadowBufPtr pBuf); 3905b261ecSmrg 4005b261ecSmrg#define SHADOW_WINDOW_RELOCATE 1 4105b261ecSmrg#define SHADOW_WINDOW_READ 2 4205b261ecSmrg#define SHADOW_WINDOW_WRITE 4 4305b261ecSmrg 4405b261ecSmrgtypedef void *(*ShadowWindowProc) (ScreenPtr pScreen, 4505b261ecSmrg CARD32 row, 4605b261ecSmrg CARD32 offset, 4705b261ecSmrg int mode, 4805b261ecSmrg CARD32 *size, 4905b261ecSmrg void *closure); 5005b261ecSmrg 5105b261ecSmrg/* BC hack: do not move the damage member. see shadow.c for explanation. */ 5205b261ecSmrgtypedef struct _shadowBuf { 5305b261ecSmrg DamagePtr pDamage; 5405b261ecSmrg ShadowUpdateProc update; 5505b261ecSmrg ShadowWindowProc window; 5605b261ecSmrg RegionRec damage; 5705b261ecSmrg PixmapPtr pPixmap; 5805b261ecSmrg void *closure; 5905b261ecSmrg int randr; 6005b261ecSmrg 6105b261ecSmrg /* screen wrappers */ 6205b261ecSmrg GetImageProcPtr GetImage; 6305b261ecSmrg CloseScreenProcPtr CloseScreen; 6405b261ecSmrg} shadowBufRec; 6505b261ecSmrg 6605b261ecSmrg/* Match defines from randr extension */ 6705b261ecSmrg#define SHADOW_ROTATE_0 1 6805b261ecSmrg#define SHADOW_ROTATE_90 2 6905b261ecSmrg#define SHADOW_ROTATE_180 4 7005b261ecSmrg#define SHADOW_ROTATE_270 8 7105b261ecSmrg#define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\ 7205b261ecSmrg SHADOW_ROTATE_180|SHADOW_ROTATE_270) 7305b261ecSmrg#define SHADOW_REFLECT_X 16 7405b261ecSmrg#define SHADOW_REFLECT_Y 32 7505b261ecSmrg#define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y) 7605b261ecSmrg 774642e01fSmrgextern DevPrivateKey shadowScrPrivateKey; 7805b261ecSmrg 794642e01fSmrg#define shadowGetBuf(pScr) ((shadowBufPtr) \ 804642e01fSmrg dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey)) 8105b261ecSmrg#define shadowBuf(pScr) shadowBufPtr pBuf = shadowGetBuf(pScr) 8205b261ecSmrg#define shadowDamage(pBuf) DamageRegion(pBuf->pDamage) 8305b261ecSmrg 8405b261ecSmrgBool 8505b261ecSmrgshadowSetup (ScreenPtr pScreen); 8605b261ecSmrg 8705b261ecSmrgBool 8805b261ecSmrgshadowAdd (ScreenPtr pScreen, 8905b261ecSmrg PixmapPtr pPixmap, 9005b261ecSmrg ShadowUpdateProc update, 9105b261ecSmrg ShadowWindowProc window, 9205b261ecSmrg int randr, 9305b261ecSmrg void *closure); 9405b261ecSmrg 9505b261ecSmrgvoid 9605b261ecSmrgshadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap); 9705b261ecSmrg 9805b261ecSmrgshadowBufPtr 9905b261ecSmrgshadowFindBuf (WindowPtr pWindow); 10005b261ecSmrg 10105b261ecSmrgBool 10205b261ecSmrgshadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window); 10305b261ecSmrg 10405b261ecSmrgvoid * 10505b261ecSmrgshadowAlloc (int width, int height, int bpp); 10605b261ecSmrg 10705b261ecSmrgvoid 10805b261ecSmrgshadowUpdatePacked (ScreenPtr pScreen, 10905b261ecSmrg shadowBufPtr pBuf); 11005b261ecSmrg 11105b261ecSmrgvoid 11205b261ecSmrgshadowUpdatePlanar4 (ScreenPtr pScreen, 11305b261ecSmrg shadowBufPtr pBuf); 11405b261ecSmrg 11505b261ecSmrgvoid 11605b261ecSmrgshadowUpdatePlanar4x8 (ScreenPtr pScreen, 11705b261ecSmrg shadowBufPtr pBuf); 11805b261ecSmrg 11905b261ecSmrgvoid 12005b261ecSmrgshadowUpdateRotatePacked (ScreenPtr pScreen, 12105b261ecSmrg shadowBufPtr pBuf); 12205b261ecSmrg 12305b261ecSmrgvoid 12405b261ecSmrgshadowUpdateRotate8_90 (ScreenPtr pScreen, 12505b261ecSmrg shadowBufPtr pBuf); 12605b261ecSmrg 12705b261ecSmrgvoid 12805b261ecSmrgshadowUpdateRotate16_90 (ScreenPtr pScreen, 12905b261ecSmrg shadowBufPtr pBuf); 13005b261ecSmrg 13105b261ecSmrgvoid 13205b261ecSmrgshadowUpdateRotate16_90YX (ScreenPtr pScreen, 13305b261ecSmrg shadowBufPtr pBuf); 13405b261ecSmrg 13505b261ecSmrgvoid 13605b261ecSmrgshadowUpdateRotate32_90 (ScreenPtr pScreen, 13705b261ecSmrg shadowBufPtr pBuf); 13805b261ecSmrg 13905b261ecSmrgvoid 14005b261ecSmrgshadowUpdateRotate8_180 (ScreenPtr pScreen, 14105b261ecSmrg shadowBufPtr pBuf); 14205b261ecSmrg 14305b261ecSmrgvoid 14405b261ecSmrgshadowUpdateRotate16_180 (ScreenPtr pScreen, 14505b261ecSmrg shadowBufPtr pBuf); 14605b261ecSmrg 14705b261ecSmrgvoid 14805b261ecSmrgshadowUpdateRotate32_180 (ScreenPtr pScreen, 14905b261ecSmrg shadowBufPtr pBuf); 15005b261ecSmrg 15105b261ecSmrgvoid 15205b261ecSmrgshadowUpdateRotate8_270 (ScreenPtr pScreen, 15305b261ecSmrg shadowBufPtr pBuf); 15405b261ecSmrg 15505b261ecSmrgvoid 15605b261ecSmrgshadowUpdateRotate16_270 (ScreenPtr pScreen, 15705b261ecSmrg shadowBufPtr pBuf); 15805b261ecSmrg 15905b261ecSmrgvoid 16005b261ecSmrgshadowUpdateRotate16_270YX (ScreenPtr pScreen, 16105b261ecSmrg shadowBufPtr pBuf); 16205b261ecSmrg 16305b261ecSmrgvoid 16405b261ecSmrgshadowUpdateRotate32_270 (ScreenPtr pScreen, 16505b261ecSmrg shadowBufPtr pBuf); 16605b261ecSmrg 16705b261ecSmrgvoid 16805b261ecSmrgshadowUpdateRotate8 (ScreenPtr pScreen, 16905b261ecSmrg shadowBufPtr pBuf); 17005b261ecSmrg 17105b261ecSmrgvoid 17205b261ecSmrgshadowUpdateRotate16 (ScreenPtr pScreen, 17305b261ecSmrg shadowBufPtr pBuf); 17405b261ecSmrg 17505b261ecSmrgvoid 17605b261ecSmrgshadowUpdateRotate32 (ScreenPtr pScreen, 17705b261ecSmrg shadowBufPtr pBuf); 17805b261ecSmrg 17905b261ecSmrgtypedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr); 18005b261ecSmrg 18105b261ecSmrgshadowUpdateProc shadowUpdatePackedWeak(void); 18205b261ecSmrgshadowUpdateProc shadowUpdatePlanar4Weak(void); 18305b261ecSmrgshadowUpdateProc shadowUpdatePlanar4x8Weak(void); 18405b261ecSmrgshadowUpdateProc shadowUpdateRotatePackedWeak(void); 18505b261ecSmrg 18605b261ecSmrg#endif /* _SHADOW_H_ */ 187