shadow.h revision 35c4bbdf
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"
3335c4bbdfSmrgtypedef struct _shadowBuf *shadowBufPtr;
3405b261ecSmrg
3535c4bbdfSmrgtypedef void (*ShadowUpdateProc) (ScreenPtr pScreen, shadowBufPtr pBuf);
3605b261ecSmrg
3705b261ecSmrg#define SHADOW_WINDOW_RELOCATE 1
3805b261ecSmrg#define SHADOW_WINDOW_READ 2
3905b261ecSmrg#define SHADOW_WINDOW_WRITE 4
4005b261ecSmrg
4135c4bbdfSmrgtypedef void *(*ShadowWindowProc) (ScreenPtr pScreen,
4235c4bbdfSmrg                                   CARD32 row,
4335c4bbdfSmrg                                   CARD32 offset,
4435c4bbdfSmrg                                   int mode, CARD32 *size, void *closure);
4505b261ecSmrg
4605b261ecSmrgtypedef struct _shadowBuf {
4735c4bbdfSmrg    DamagePtr pDamage;
4835c4bbdfSmrg    ShadowUpdateProc update;
4935c4bbdfSmrg    ShadowWindowProc window;
5035c4bbdfSmrg    PixmapPtr pPixmap;
5135c4bbdfSmrg    void *closure;
5235c4bbdfSmrg    int randr;
5305b261ecSmrg
5405b261ecSmrg    /* screen wrappers */
5535c4bbdfSmrg    GetImageProcPtr GetImage;
5635c4bbdfSmrg    CloseScreenProcPtr CloseScreen;
5705b261ecSmrg} shadowBufRec;
5805b261ecSmrg
5905b261ecSmrg/* Match defines from randr extension */
6005b261ecSmrg#define SHADOW_ROTATE_0	    1
6105b261ecSmrg#define SHADOW_ROTATE_90    2
6205b261ecSmrg#define SHADOW_ROTATE_180   4
6305b261ecSmrg#define SHADOW_ROTATE_270   8
6405b261ecSmrg#define SHADOW_ROTATE_ALL   (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\
6505b261ecSmrg			     SHADOW_ROTATE_180|SHADOW_ROTATE_270)
6605b261ecSmrg#define SHADOW_REFLECT_X    16
6705b261ecSmrg#define SHADOW_REFLECT_Y    32
6805b261ecSmrg#define SHADOW_REFLECT_ALL  (SHADOW_REFLECT_X|SHADOW_REFLECT_Y)
6905b261ecSmrg
706747b715Smrgextern _X_EXPORT DevPrivateKey shadowScrPrivateKey;
7105b261ecSmrg
724642e01fSmrg#define shadowGetBuf(pScr) ((shadowBufPtr) \
734642e01fSmrg    dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey))
7405b261ecSmrg#define shadowBuf(pScr)            shadowBufPtr pBuf = shadowGetBuf(pScr)
7535c4bbdfSmrg#define shadowDamage(pBuf)  DamageRegion(pBuf->pDamage)
7605b261ecSmrg
776747b715Smrgextern _X_EXPORT Bool
7835c4bbdfSmrg shadowSetup(ScreenPtr pScreen);
7905b261ecSmrg
806747b715Smrgextern _X_EXPORT Bool
8135c4bbdfSmrg
8235c4bbdfSmrgshadowAdd(ScreenPtr pScreen,
8335c4bbdfSmrg          PixmapPtr pPixmap,
8435c4bbdfSmrg          ShadowUpdateProc update,
8535c4bbdfSmrg          ShadowWindowProc window, int randr, void *closure);
8605b261ecSmrg
876747b715Smrgextern _X_EXPORT void
8835c4bbdfSmrg shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap);
8905b261ecSmrg
9035c4bbdfSmrgextern _X_EXPORT void *shadowAlloc(int width, int height, int bpp);
9105b261ecSmrg
9235c4bbdfSmrgextern _X_EXPORT void
9335c4bbdfSmrg shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf);
9435c4bbdfSmrg
9535c4bbdfSmrgextern _X_EXPORT void
9635c4bbdfSmrg shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf);
9735c4bbdfSmrg
9835c4bbdfSmrgextern _X_EXPORT void
9935c4bbdfSmrg shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
10035c4bbdfSmrg
10135c4bbdfSmrgextern _X_EXPORT void
10235c4bbdfSmrg shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf);
10305b261ecSmrg
1046747b715Smrgextern _X_EXPORT void
10535c4bbdfSmrg shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
10605b261ecSmrg
1076747b715Smrgextern _X_EXPORT void
10835c4bbdfSmrg shadowUpdatePlanar4(ScreenPtr pScreen, shadowBufPtr pBuf);
10905b261ecSmrg
1106747b715Smrgextern _X_EXPORT void
11135c4bbdfSmrg shadowUpdatePlanar4x8(ScreenPtr pScreen, shadowBufPtr pBuf);
11205b261ecSmrg
1136747b715Smrgextern _X_EXPORT void
11435c4bbdfSmrg shadowUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
11505b261ecSmrg
1166747b715Smrgextern _X_EXPORT void
11735c4bbdfSmrg shadowUpdateRotate8_90(ScreenPtr pScreen, shadowBufPtr pBuf);
11805b261ecSmrg
1196747b715Smrgextern _X_EXPORT void
12035c4bbdfSmrg shadowUpdateRotate16_90(ScreenPtr pScreen, shadowBufPtr pBuf);
12105b261ecSmrg
1226747b715Smrgextern _X_EXPORT void
12335c4bbdfSmrg shadowUpdateRotate16_90YX(ScreenPtr pScreen, shadowBufPtr pBuf);
12405b261ecSmrg
1256747b715Smrgextern _X_EXPORT void
12635c4bbdfSmrg shadowUpdateRotate32_90(ScreenPtr pScreen, shadowBufPtr pBuf);
12705b261ecSmrg
1286747b715Smrgextern _X_EXPORT void
12935c4bbdfSmrg shadowUpdateRotate8_180(ScreenPtr pScreen, shadowBufPtr pBuf);
13005b261ecSmrg
1316747b715Smrgextern _X_EXPORT void
13235c4bbdfSmrg shadowUpdateRotate16_180(ScreenPtr pScreen, shadowBufPtr pBuf);
13305b261ecSmrg
1346747b715Smrgextern _X_EXPORT void
13535c4bbdfSmrg shadowUpdateRotate32_180(ScreenPtr pScreen, shadowBufPtr pBuf);
13605b261ecSmrg
1376747b715Smrgextern _X_EXPORT void
13835c4bbdfSmrg shadowUpdateRotate8_270(ScreenPtr pScreen, shadowBufPtr pBuf);
13905b261ecSmrg
1406747b715Smrgextern _X_EXPORT void
14135c4bbdfSmrg shadowUpdateRotate16_270(ScreenPtr pScreen, shadowBufPtr pBuf);
14205b261ecSmrg
1436747b715Smrgextern _X_EXPORT void
14435c4bbdfSmrg shadowUpdateRotate16_270YX(ScreenPtr pScreen, shadowBufPtr pBuf);
14505b261ecSmrg
1466747b715Smrgextern _X_EXPORT void
14735c4bbdfSmrg shadowUpdateRotate32_270(ScreenPtr pScreen, shadowBufPtr pBuf);
14805b261ecSmrg
1496747b715Smrgextern _X_EXPORT void
15035c4bbdfSmrg shadowUpdateRotate8(ScreenPtr pScreen, shadowBufPtr pBuf);
15105b261ecSmrg
1526747b715Smrgextern _X_EXPORT void
15335c4bbdfSmrg shadowUpdateRotate16(ScreenPtr pScreen, shadowBufPtr pBuf);
15405b261ecSmrg
1556747b715Smrgextern _X_EXPORT void
15635c4bbdfSmrg shadowUpdateRotate32(ScreenPtr pScreen, shadowBufPtr pBuf);
15705b261ecSmrg
15835c4bbdfSmrgtypedef void (*shadowUpdateProc) (ScreenPtr, shadowBufPtr);
15905b261ecSmrg
1606747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePackedWeak(void);
1616747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4Weak(void);
1626747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4x8Weak(void);
1636747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdateRotatePackedWeak(void);
16405b261ecSmrg
16535c4bbdfSmrg#endif                          /* _SHADOW_H_ */
166