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