337 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
						|
 * copy of this software and associated documentation files (the "Software"),
 | 
						|
 * to deal in the Software without restriction, including without limitation
 | 
						|
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
						|
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
						|
 * Software is furnished to do so, subject to the following conditions:
 | 
						|
 *
 | 
						|
 * The above copyright notice and this permission notice (including the next
 | 
						|
 * paragraph) shall be included in all copies or substantial portions of the
 | 
						|
 * Software.
 | 
						|
 *
 | 
						|
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
						|
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
						|
 * DEALINGS IN THE SOFTWARE.
 | 
						|
 *
 | 
						|
 * Copyright © 2003 Keith Packard
 | 
						|
 *
 | 
						|
 * Permission to use, copy, modify, distribute, and sell this software and its
 | 
						|
 * documentation for any purpose is hereby granted without fee, provided that
 | 
						|
 * the above copyright notice appear in all copies and that both that
 | 
						|
 * copyright notice and this permission notice appear in supporting
 | 
						|
 * documentation, and that the name of Keith Packard not be used in
 | 
						|
 * advertising or publicity pertaining to distribution of the software without
 | 
						|
 * specific, written prior permission.  Keith Packard makes no
 | 
						|
 * representations about the suitability of this software for any purpose.  It
 | 
						|
 * is provided "as is" without express or implied warranty.
 | 
						|
 *
 | 
						|
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | 
						|
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 | 
						|
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 | 
						|
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 | 
						|
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 | 
						|
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
						|
 * PERFORMANCE OF THIS SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef HAVE_DIX_CONFIG_H
 | 
						|
#include <dix-config.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef _COMPINT_H_
 | 
						|
#define _COMPINT_H_
 | 
						|
 | 
						|
#include "misc.h"
 | 
						|
#include "scrnintstr.h"
 | 
						|
#include "os.h"
 | 
						|
#include "regionstr.h"
 | 
						|
#include "validate.h"
 | 
						|
#include "windowstr.h"
 | 
						|
#include "input.h"
 | 
						|
#include "resource.h"
 | 
						|
#include "colormapst.h"
 | 
						|
#include "cursorstr.h"
 | 
						|
#include "dixstruct.h"
 | 
						|
#include "gcstruct.h"
 | 
						|
#include "servermd.h"
 | 
						|
#include "dixevents.h"
 | 
						|
#include "globals.h"
 | 
						|
#include "picturestr.h"
 | 
						|
#include "extnsionst.h"
 | 
						|
#include "privates.h"
 | 
						|
#include "mi.h"
 | 
						|
#include "damage.h"
 | 
						|
#include "damageextint.h"
 | 
						|
#include "xfixes.h"
 | 
						|
#include <X11/extensions/compositeproto.h>
 | 
						|
#include <assert.h>
 | 
						|
 | 
						|
/*
 | 
						|
 *  enable this for debugging
 | 
						|
 
 | 
						|
    #define COMPOSITE_DEBUG
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _CompClientWindow {
 | 
						|
    struct _CompClientWindow	*next;
 | 
						|
    XID				id;
 | 
						|
    int				update;
 | 
						|
}  CompClientWindowRec, *CompClientWindowPtr;
 | 
						|
 | 
						|
typedef struct _CompWindow {
 | 
						|
    RegionRec		    borderClip;
 | 
						|
    DamagePtr		    damage;	/* for automatic update mode */
 | 
						|
    Bool		    damageRegistered;
 | 
						|
    Bool		    damaged;
 | 
						|
    int			    update;
 | 
						|
    CompClientWindowPtr	    clients;
 | 
						|
    int			    oldx;
 | 
						|
    int			    oldy;
 | 
						|
    PixmapPtr		    pOldPixmap;
 | 
						|
    int			    borderClipX, borderClipY;
 | 
						|
} CompWindowRec, *CompWindowPtr;
 | 
						|
 | 
						|
#define COMP_ORIGIN_INVALID	    0x80000000
 | 
						|
 | 
						|
typedef struct _CompSubwindows {
 | 
						|
    int			    update;
 | 
						|
    CompClientWindowPtr	    clients;
 | 
						|
} CompSubwindowsRec, *CompSubwindowsPtr;
 | 
						|
 | 
						|
#ifndef COMP_INCLUDE_RGB24_VISUAL
 | 
						|
#define COMP_INCLUDE_RGB24_VISUAL 0
 | 
						|
#endif
 | 
						|
 | 
						|
typedef struct _CompOverlayClientRec *CompOverlayClientPtr;
 | 
						|
 | 
						|
typedef struct _CompOverlayClientRec {
 | 
						|
    CompOverlayClientPtr pNext;  
 | 
						|
    ClientPtr            pClient;
 | 
						|
    ScreenPtr            pScreen;
 | 
						|
    XID			 resource;
 | 
						|
} CompOverlayClientRec;
 | 
						|
 | 
						|
typedef struct _CompScreen {
 | 
						|
    PositionWindowProcPtr	PositionWindow;
 | 
						|
    CopyWindowProcPtr		CopyWindow;
 | 
						|
    CreateWindowProcPtr		CreateWindow;
 | 
						|
    DestroyWindowProcPtr	DestroyWindow;
 | 
						|
    RealizeWindowProcPtr	RealizeWindow;
 | 
						|
    UnrealizeWindowProcPtr	UnrealizeWindow;
 | 
						|
    ClipNotifyProcPtr		ClipNotify;
 | 
						|
    /*
 | 
						|
     * Called from ConfigureWindow, these
 | 
						|
     * three track changes to the offscreen storage
 | 
						|
     * geometry
 | 
						|
     */
 | 
						|
    ConfigNotifyProcPtr         ConfigNotify;
 | 
						|
    MoveWindowProcPtr		MoveWindow;
 | 
						|
    ResizeWindowProcPtr		ResizeWindow;
 | 
						|
    ChangeBorderWidthProcPtr	ChangeBorderWidth;
 | 
						|
    /*
 | 
						|
     * Reparenting has an effect on Subwindows redirect
 | 
						|
     */
 | 
						|
    ReparentWindowProcPtr	ReparentWindow;
 | 
						|
    
 | 
						|
    /*
 | 
						|
     * Colormaps for new visuals better not get installed
 | 
						|
     */
 | 
						|
    InstallColormapProcPtr	InstallColormap;
 | 
						|
 | 
						|
    /*
 | 
						|
     * Fake backing store via automatic redirection
 | 
						|
     */
 | 
						|
    ChangeWindowAttributesProcPtr ChangeWindowAttributes;
 | 
						|
 | 
						|
    ScreenBlockHandlerProcPtr	BlockHandler;
 | 
						|
    CloseScreenProcPtr		CloseScreen;
 | 
						|
    int				numAlternateVisuals;
 | 
						|
    VisualID			*alternateVisuals;
 | 
						|
 | 
						|
    WindowPtr                   pOverlayWin;
 | 
						|
    Window			overlayWid;
 | 
						|
    CompOverlayClientPtr        pOverlayClients;
 | 
						|
    
 | 
						|
    GetImageProcPtr		GetImage;
 | 
						|
    SourceValidateProcPtr	SourceValidate;
 | 
						|
} CompScreenRec, *CompScreenPtr;
 | 
						|
 | 
						|
extern DevPrivateKeyRec CompScreenPrivateKeyRec;
 | 
						|
#define CompScreenPrivateKey (&CompScreenPrivateKeyRec)
 | 
						|
 | 
						|
extern DevPrivateKeyRec CompWindowPrivateKeyRec;
 | 
						|
#define CompWindowPrivateKey (&CompWindowPrivateKeyRec)
 | 
						|
 | 
						|
extern DevPrivateKeyRec CompSubwindowsPrivateKeyRec;
 | 
						|
#define CompSubwindowsPrivateKey (&CompSubwindowsPrivateKeyRec)
 | 
						|
 | 
						|
#define GetCompScreen(s) ((CompScreenPtr) \
 | 
						|
    dixLookupPrivate(&(s)->devPrivates, CompScreenPrivateKey))
 | 
						|
#define GetCompWindow(w) ((CompWindowPtr) \
 | 
						|
    dixLookupPrivate(&(w)->devPrivates, CompWindowPrivateKey))
 | 
						|
#define GetCompSubwindows(w) ((CompSubwindowsPtr) \
 | 
						|
    dixLookupPrivate(&(w)->devPrivates, CompSubwindowsPrivateKey))
 | 
						|
 | 
						|
extern RESTYPE		CompositeClientWindowType;
 | 
						|
extern RESTYPE		CompositeClientSubwindowsType;
 | 
						|
extern RESTYPE		CompositeClientOverlayType;
 | 
						|
 | 
						|
/*
 | 
						|
 * compalloc.c
 | 
						|
 */
 | 
						|
 | 
						|
Bool
 | 
						|
compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update);
 | 
						|
 | 
						|
void
 | 
						|
compFreeClientWindow (WindowPtr pWin, XID id);
 | 
						|
 | 
						|
int
 | 
						|
compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update);
 | 
						|
 | 
						|
int
 | 
						|
compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update);
 | 
						|
 | 
						|
void
 | 
						|
compFreeClientSubwindows (WindowPtr pWin, XID id);
 | 
						|
 | 
						|
int
 | 
						|
compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update);
 | 
						|
 | 
						|
int
 | 
						|
compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin);
 | 
						|
 | 
						|
int
 | 
						|
compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin);
 | 
						|
 | 
						|
Bool
 | 
						|
compAllocPixmap (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compSetParentPixmap (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compRestoreWindow (WindowPtr pWin, PixmapPtr pPixmap);
 | 
						|
 | 
						|
Bool
 | 
						|
compReallocPixmap (WindowPtr pWin, int x, int y,
 | 
						|
		   unsigned int w, unsigned int h, int bw);
 | 
						|
 | 
						|
/*
 | 
						|
 * compext.c
 | 
						|
 */
 | 
						|
 | 
						|
void
 | 
						|
CompositeExtensionInit (void);
 | 
						|
 | 
						|
/*
 | 
						|
 * compinit.c
 | 
						|
 */
 | 
						|
 | 
						|
Bool
 | 
						|
compScreenInit (ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * compoverlay.c
 | 
						|
 */
 | 
						|
 | 
						|
void
 | 
						|
compFreeOverlayClient (CompOverlayClientPtr pOcToDel);
 | 
						|
 | 
						|
CompOverlayClientPtr
 | 
						|
compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
 | 
						|
    
 | 
						|
CompOverlayClientPtr
 | 
						|
compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
 | 
						|
 | 
						|
Bool
 | 
						|
compCreateOverlayWindow (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
compDestroyOverlayWindow (ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * compwindow.c
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef COMPOSITE_DEBUG
 | 
						|
void
 | 
						|
compCheckTree (ScreenPtr pScreen);
 | 
						|
#else
 | 
						|
#define compCheckTree(s)
 | 
						|
#endif
 | 
						|
 | 
						|
PictFormatPtr
 | 
						|
compWindowFormat (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap);
 | 
						|
 | 
						|
Bool
 | 
						|
compCheckRedirect (WindowPtr pWin);
 | 
						|
 | 
						|
Bool
 | 
						|
compPositionWindow (WindowPtr pWin, int x, int y);
 | 
						|
 | 
						|
Bool
 | 
						|
compRealizeWindow (WindowPtr pWin);
 | 
						|
 | 
						|
Bool
 | 
						|
compUnrealizeWindow (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compClipNotify (WindowPtr pWin, int dx, int dy);
 | 
						|
 | 
						|
void
 | 
						|
compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind);
 | 
						|
 | 
						|
void
 | 
						|
compResizeWindow (WindowPtr pWin, int x, int y,
 | 
						|
		  unsigned int w, unsigned int h, WindowPtr pSib);
 | 
						|
 | 
						|
void
 | 
						|
compChangeBorderWidth (WindowPtr pWin, unsigned int border_width);
 | 
						|
 | 
						|
void
 | 
						|
compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent);
 | 
						|
 | 
						|
Bool
 | 
						|
compCreateWindow (WindowPtr pWin);
 | 
						|
 | 
						|
Bool
 | 
						|
compDestroyWindow (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion);
 | 
						|
 | 
						|
RegionPtr
 | 
						|
compGetRedirectBorderClip (WindowPtr pWin);
 | 
						|
 | 
						|
void
 | 
						|
compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
 | 
						|
 | 
						|
void
 | 
						|
compPaintChildrenToWindow (WindowPtr pWin);
 | 
						|
 | 
						|
WindowPtr
 | 
						|
CompositeRealChildHead (WindowPtr pWin);
 | 
						|
 | 
						|
int
 | 
						|
DeleteWindowNoInputDevices(pointer value, XID wid);
 | 
						|
 | 
						|
int
 | 
						|
compConfigNotify(WindowPtr pWin, int x, int y, int w, int h,
 | 
						|
		 int bw, WindowPtr pSib);
 | 
						|
 | 
						|
void PanoramiXCompositeInit (void);
 | 
						|
void PanoramiXCompositeReset (void);
 | 
						|
 | 
						|
#endif /* _COMPINT_H_ */
 |