1 /*
   2  * reserved comment block
   3  * DO NOT REMOVE OR ALTER!
   4  */
   5 /*
   6  * $XFree86: xc/lib/Xrandr/Xrandr.h,v 1.9 2002/09/29 23:39:44 keithp Exp $
   7  *
   8  * Copyright © 2000 Compaq Computer Corporation, Inc.
   9  * Copyright © 2002 Hewlett-Packard Company, Inc.
  10  *
  11  * Permission to use, copy, modify, distribute, and sell this software and its
  12  * documentation for any purpose is hereby granted without fee, provided that
  13  * the above copyright notice appear in all copies and that both that
  14  * copyright notice and this permission notice appear in supporting
  15  * documentation, and that the name of Compaq not be used in advertising or
  16  * publicity pertaining to distribution of the software without specific,
  17  * written prior permission.  HP makes no representations about the
  18  * suitability of this software for any purpose.  It is provided "as is"
  19  * without express or implied warranty.
  20  *
  21  * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL COMPAQ
  23  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  24  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  25  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  26  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  27  *
  28  * Author:  Jim Gettys, HP Labs, HP.
  29  */
  30 
  31 #ifndef _XRANDR_H_
  32 #define _XRANDR_H_
  33 
  34 /*#include <X11/extensions/randr.h>*/
  35 #include "randr.h"
  36 
  37 #include <X11/Xfuncproto.h>
  38 
  39 _XFUNCPROTOBEGIN
  40 
  41 
  42 typedef struct {
  43     int width, height;
  44     int mwidth, mheight;
  45 } XRRScreenSize;
  46 
  47 /*
  48  *  Events.
  49  */
  50 
  51 typedef struct {
  52     int type;                   /* event base */
  53     unsigned long serial;       /* # of last request processed by server */
  54     Bool send_event;            /* true if this came from a SendEvent request */
  55     Display *display;           /* Display the event was read from */
  56     Window window;              /* window which selected for this event */
  57     Window root;                /* Root window for changed screen */
  58     Time timestamp;             /* when the screen change occurred */
  59     Time config_timestamp;      /* when the last configuration change */
  60     SizeID size_index;
  61     SubpixelOrder subpixel_order;
  62     Rotation rotation;
  63     int width;
  64     int height;
  65     int mwidth;
  66     int mheight;
  67 } XRRScreenChangeNotifyEvent;
  68 
  69 
  70 /* internal representation is private to the library */
  71 typedef struct _XRRScreenConfiguration XRRScreenConfiguration;
  72 
  73 Bool XRRQueryExtension (Display *dpy, int *event_basep, int *error_basep);
  74 Status XRRQueryVersion (Display *dpy,
  75                             int     *major_versionp,
  76                             int     *minor_versionp);
  77 
  78 XRRScreenConfiguration *XRRGetScreenInfo (Display *dpy,
  79                                           Drawable draw);
  80 
  81 void XRRFreeScreenConfigInfo (XRRScreenConfiguration *config);
  82 
  83 /*
  84  * Note that screen configuration changes are only permitted if the client can
  85  * prove it has up to date configuration information.  We are trying to
  86  * insist that it become possible for screens to change dynamically, so
  87  * we want to ensure the client knows what it is talking about when requesting
  88  * changes.
  89  */
  90 Status XRRSetScreenConfig (Display *dpy,
  91                            XRRScreenConfiguration *config,
  92                            Drawable draw,
  93                            int size_index,
  94                            Rotation rotation,
  95                            Time timestamp);
  96 
  97 /* added in v1.1, sorry for the lame name */
  98 Status XRRSetScreenConfigAndRate (Display *dpy,
  99                                   XRRScreenConfiguration *config,
 100                                   Drawable draw,
 101                                   int size_index,
 102                                   Rotation rotation,
 103                                   short rate,
 104                                   Time timestamp);
 105 
 106 
 107 Rotation XRRConfigRotations(XRRScreenConfiguration *config, Rotation *current_rotation);
 108 
 109 Time XRRConfigTimes (XRRScreenConfiguration *config, Time *config_timestamp);
 110 
 111 XRRScreenSize *XRRConfigSizes(XRRScreenConfiguration *config, int *nsizes);
 112 
 113 short *XRRConfigRates (XRRScreenConfiguration *config, int sizeID, int *nrates);
 114 
 115 SizeID XRRConfigCurrentConfiguration (XRRScreenConfiguration *config,
 116                               Rotation *rotation);
 117 
 118 short XRRConfigCurrentRate (XRRScreenConfiguration *config);
 119 
 120 int XRRRootToScreen(Display *dpy, Window root);
 121 
 122 /*
 123  * returns the screen configuration for the specified screen; does a lazy
 124  * evalution to delay getting the information, and caches the result.
 125  * These routines should be used in preference to XRRGetScreenInfo
 126  * to avoid unneeded round trips to the X server.  These are new
 127  * in protocol version 0.1.
 128  */
 129 
 130 
 131 XRRScreenConfiguration *XRRScreenConfig(Display *dpy, int screen);
 132 XRRScreenConfiguration *XRRConfig(Screen *screen);
 133 void XRRSelectInput(Display *dpy, Window window, int mask);
 134 
 135 /*
 136  * the following are always safe to call, even if RandR is not implemented
 137  * on a screen
 138  */
 139 
 140 
 141 Rotation XRRRotations(Display *dpy, int screen, Rotation *current_rotation);
 142 XRRScreenSize *XRRSizes(Display *dpy, int screen, int *nsizes);
 143 short *XRRRates (Display *dpy, int screen, int sizeID, int *nrates);
 144 Time XRRTimes (Display *dpy, int screen, Time *config_timestamp);
 145 
 146 
 147 /*
 148  * intended to take RRScreenChangeNotify,  or
 149  * ConfigureNotify (on the root window)
 150  * returns 1 if it is an event type it understands, 0 if not
 151  */
 152 int XRRUpdateConfiguration(XEvent *event);
 153 
 154 _XFUNCPROTOEND
 155 
 156 #endif /* _XRANDR_H_ */