cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * All Rights Reserved.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Permission is hereby granted, free of charge, to any person obtaining
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * a copy of this software and associated documentation files (the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * "Software"), to deal in the Software without restriction, including
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * without limitation on the rights to use, copy, modify, merge,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * publish, distribute, sublicense, and/or sell copies of the Software,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * and to permit persons to whom the Software is furnished to do so,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * subject to the following conditions:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * The above copyright notice and this permission notice (including the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * next paragraph) shall be included in all copies or substantial
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * portions of the Software.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * SOFTWARE.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Authors:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Kevin E. Martin <kem@redhat.com>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * David H. Dawes <dawes@xfree86.org>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Rickard E. (Rik) Faith <faith@redhat.com>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** \file
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Main header file included by all other DMX-related files.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** \mainpage
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * - <a href="http://dmx.sourceforge.net">DMX Home Page</a>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * - <a href="http://sourceforge.net/projects/dmx">DMX Project Page (on
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Source Forge)</a>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * - <a href="http://dmx.sourceforge.net/dmx.html">Distributed Multihead
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * X design</a>, the design document for DMX
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * - <a href="http://dmx.sourceforge.net/DMXSpec.txt">Client-to-Server
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * DMX Extension to the X Protocol</a>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef DMX_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#if HAVE_DMX_CONFIG_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <dmx-config.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "gcstruct.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* Handle client-side include files in one place. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "dmxclient.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "globals.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "scrnintstr.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "picturestr.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef GLXEXT
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <GL/glx.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <GL/glxint.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef enum {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosNone = -1,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosAbsolute = 0,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosRightOf,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosLeftOf,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosAbove,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosBelow,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PosRelative
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} PositionType;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Provide the typedef globally, but keep the contents opaque outside
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * of the input routines. \see dmxinput.h */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _DMXInputInfo DMXInputInfo;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Provide the typedef globally, but keep the contents opaque outside
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * of the XSync statistic routines. \see dmxstat.c */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _DMXStatInfo DMXStatInfo;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Global structure containing information about each backend screen. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _DMXScreenInfo {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync const char *name; /**< Name from command line or config file */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int index; /**< Index into dmxScreens global */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /*---------- Back-end X server information ----------*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Display *beDisplay; /**< Back-end X server's display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beWidth; /**< Width of BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beHeight; /**< Height of BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beDepth; /**< Depth of BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beBPP; /**< Bits per pixel of BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beXDPI; /**< Horizontal dots per inch of BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beYDPI; /**< Vertical dots per inch of BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beNumDepths; /**< Number of depths on BE server */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int *beDepths; /**< Depths from BE server */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beNumPixmapFormats; /**< Number of pixmap formats on BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XPixmapFormatValues *bePixmapFormats; /**< Pixmap formats on BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beNumVisuals; /**< Number of visuals on BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XVisualInfo *beVisuals; /**< Visuals from BE server */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beDefVisualIndex; /**< Default visual index of BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int beNumDefColormaps; /**< Number of default colormaps */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Colormap *beDefColormaps; /**< Default colormaps for DMX server */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Pixel beBlackPixel; /**< Default black pixel for BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Pixel beWhitePixel; /**< Default white pixel for BE */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /*---------- Screen window information ----------*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Window scrnWin; /**< "Screen" window on backend display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnX; /**< X offset of "screen" WRT BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnY; /**< Y offset of "screen" WRT BE display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnWidth; /**< Width of "screen" */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnHeight; /**< Height of "screen" */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnXSign; /**< X offset sign of "screen" */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int scrnYSign; /**< Y offset sign of "screen" */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /** Default drawables for "screen" */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Drawable scrnDefDrawables[MAXFORMATS];
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync struct _DMXScreenInfo *next; /**< List of "screens" on same display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync struct _DMXScreenInfo *over; /**< List of "screens" that overlap */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /*---------- Root window information ----------*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Window rootWin; /**< "Root" window on backend display */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootX; /**< X offset of "root" window WRT "screen"*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootY; /**< Y offset of "root" window WRT "screen"*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootWidth; /**< Width of "root" window */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootHeight; /**< Height of "root" window */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootXOrigin; /**< Global X origin of "root" window */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int rootYOrigin; /**< Global Y origin of "root" window */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /*---------- Shadow framebuffer information ----------*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void *shadow; /**< Shadow framebuffer data (if enabled) */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XlibGC shadowGC; /**< Default GC used by shadow FB code */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XImage *shadowFBImage; /**< Screen image used by shadow FB code */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /*---------- Other related information ----------*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int shared; /**< Non-zero if another Xdmx is running */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool WMRunningOnBE;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Cursor noCursor;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Cursor curCursor;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /* Support for cursors on overlapped
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * backend displays. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CursorPtr cursor;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int cursorVisible;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int cursorNotShared; /* for overlapping screens on a backend */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PositionType where; /**< Relative layout information */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int whereX; /**< Relative layout information */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int whereY; /**< Relative layout information */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int whereRefScreen; /**< Relative layout information */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int savedTimeout; /**< Original screen saver timeout */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int dpmsCapable; /**< Non-zero if backend is DPMS capable */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int dpmsEnabled; /**< Non-zero if DPMS enabled */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int dpmsStandby; /**< Original DPMS standby value */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int dpmsSuspend; /**< Original DPMS suspend value */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int dpmsOff; /**< Original DPMS off value */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DMXStatInfo *stat; /**< Statistics about XSync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool needsSync; /**< True if an XSync is pending */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef GLXEXT
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /** Visual information for glxProxy */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int numGlxVisuals;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __GLXvisualConfig *glxVisuals;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int glxMajorOpcode;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int glxErrorBase;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /** FB config information for glxProxy */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __GLXFBConfig *fbconfigs;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int numFBConfigs;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync /** Function pointers to wrapped screen
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * functions */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CloseScreenProcPtr CloseScreen;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync SaveScreenProcPtr SaveScreen;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CreateGCProcPtr CreateGC;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CreateWindowProcPtr CreateWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DestroyWindowProcPtr DestroyWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PositionWindowProcPtr PositionWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ChangeWindowAttributesProcPtr ChangeWindowAttributes;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync RealizeWindowProcPtr RealizeWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync UnrealizeWindowProcPtr UnrealizeWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync RestackWindowProcPtr RestackWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync WindowExposuresProcPtr WindowExposures;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CopyWindowProcPtr CopyWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ResizeWindowProcPtr ResizeWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ReparentWindowProcPtr ReparentWindow;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ChangeBorderWidthProcPtr ChangeBorderWidth;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync GetImageProcPtr GetImage;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync GetSpansProcPtr GetSpans;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CreatePixmapProcPtr CreatePixmap;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DestroyPixmapProcPtr DestroyPixmap;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync BitmapToRegionProcPtr BitmapToRegion;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync RealizeFontProcPtr RealizeFont;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync UnrealizeFontProcPtr UnrealizeFont;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CreateColormapProcPtr CreateColormap;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DestroyColormapProcPtr DestroyColormap;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync InstallColormapProcPtr InstallColormap;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync StoreColorsProcPtr StoreColors;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync SetShapeProcPtr SetShape;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CreatePictureProcPtr CreatePicture;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DestroyPictureProcPtr DestroyPicture;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ChangePictureClipProcPtr ChangePictureClip;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DestroyPictureClipProcPtr DestroyPictureClip;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ChangePictureProcPtr ChangePicture;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ValidatePictureProcPtr ValidatePicture;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CompositeProcPtr Composite;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync GlyphsProcPtr Glyphs;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CompositeRectsProcPtr CompositeRects;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync InitIndexedProcPtr InitIndexed;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CloseIndexedProcPtr CloseIndexed;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync UpdateIndexedProcPtr UpdateIndexed;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TrapezoidsProcPtr Trapezoids;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TrianglesProcPtr Triangles;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TriStripProcPtr TriStrip;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TriFanProcPtr TriFan;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} DMXScreenInfo;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* Global variables available to all Xserver/hw/dmx routines. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern int dmxNumScreens; /**< Number of dmxScreens */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DMXScreenInfo *dmxScreens; /**< List of outputs */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern int dmxShadowFB; /**< Non-zero if using
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * shadow frame-buffer
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * (deprecated) */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern XErrorEvent dmxLastErrorEvent; /**< Last error that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * occurred */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxErrorOccurred; /**< True if an error
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * occurred */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxOffScreenOpt; /**< True if using off
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * screen
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * optimizations */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxSubdividePrimitives; /**< True if using the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * primitive subdivision
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * optimization */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxLazyWindowCreation; /**< True if using the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * lazy window creation
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * optimization */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxUseXKB; /**< True if the XKB
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * extension should be
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * used with the backend
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * servers */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern int dmxDepth; /**< Requested depth if
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * non-zero */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef GLXEXT
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxGLXProxy; /**< True if glxProxy
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * support is enabled */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxGLXSwapGroupSupport; /**< True if glxProxy
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * support for swap
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * groups and barriers
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * is enabled */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxGLXSyncSwap; /**< True if glxProxy
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * should force an XSync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * request after each
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * swap buffers call */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxGLXFinishSwap; /**< True if glxProxy
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * should force a
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * glFinish request
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * after each swap
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * buffers call */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern char *dmxFontPath; /**< NULL if no font
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * path is set on the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * command line;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * otherwise, a string
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * of comma separated
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * paths built from the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * command line
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * specified font
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * paths */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxIgnoreBadFontPaths; /**< True if bad font
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * paths should be
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * ignored during server
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * init */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxAddRemoveScreens; /**< True if add and
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * remove screens support
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * is enabled */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Wrap screen or GC function pointer */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_WRAP(_entry, _newfunc, _saved, _actual) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdo { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (_saved)->_entry = (_actual)->_entry; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (_actual)->_entry = (_newfunc); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Unwrap screen or GC function pointer */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_UNWRAP(_entry, _saved, _actual) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdo { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (_actual)->_entry = (_saved)->_entry; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* Define the MAXSCREENSALLOC/FREE macros, when MAXSCREENS patch has not
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * been applied to sources. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef MAXSCREENS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREEN_MAKECONSTSTR1(x) #x
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREEN_MAKECONSTSTR2(x) MAXSCREEN_MAKECONSTSTR1(x)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREEN_FAILED_TXT "Failed at [" \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync MAXSCREEN_MAKECONSTSTR2(__LINE__) ":" __FILE__ "] to allocate object: "
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define _MAXSCREENSALLOCF(o,size,fatal) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync do { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (!o) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync o = calloc((size), sizeof(*(o))); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (!o && fatal) FatalError(MAXSCREEN_FAILED_TXT #o); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define _MAXSCREENSALLOCR(o,size,retval) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync do { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (!o) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync o = calloc((size), sizeof(*(o))); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (!o) return retval; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSFREE(o) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync do { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync free(o); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync o = NULL; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSALLOC(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSALLOC_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 1)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSALLOC_RETURN(o,r) _MAXSCREENSALLOCR(o,MAXSCREENS, (r))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSALLOCPLUSONE(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSALLOCPLUSONE_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,1)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSCALLOC(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define MAXSCREENSCALLOC_FATAL(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),1)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxGCPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxGCPrivateKey (&dmxGCPrivateKeyRec) /**< Private index for GCs */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxWinPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxWinPrivateKey (&dmxWinPrivateKeyRec) /**< Private index for Windows */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxPixPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxPixPrivateKey (&dmxPixPrivateKeyRec) /**< Private index for Pixmaps */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern int dmxFontPrivateIndex; /**< Private index for Fonts */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxScreenPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxScreenPrivateKey (&dmxScreenPrivateKeyRec) /**< Private index for Screens */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxColormapPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxColormapPrivateKey (&dmxColormapPrivateKeyRec) /**< Private index for Colormaps */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxPictPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxPictPrivateKey (&dmxPictPrivateKeyRec) /**< Private index for Picts */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern DevPrivateKeyRec dmxGlyphSetPrivateKeyRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define dmxGlyphSetPrivateKey (&dmxGlyphSetPrivateKeyRec) /**< Private index for GlyphSets */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* DMX_H */