Xrandr.h
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:11k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * Copyright © 2000 Compaq Computer Corporation, Inc.
  3.  * Copyright © 2002 Hewlett-Packard Company, Inc.
  4.  * Copyright © 2006 Intel Corporation
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and its
  7.  * documentation for any purpose is hereby granted without fee, provided that
  8.  * the above copyright notice appear in all copies and that both that copyright
  9.  * notice and this permission notice appear in supporting documentation, and
  10.  * that the name of the copyright holders not be used in advertising or
  11.  * publicity pertaining to distribution of the software without specific,
  12.  * written prior permission.  The copyright holders make no representations
  13.  * about the suitability of this software for any purpose.  It is provided "as
  14.  * is" without express or implied warranty.
  15.  *
  16.  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  17.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  18.  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  19.  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  20.  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  21.  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
  22.  * OF THIS SOFTWARE.
  23.  *
  24.  * Author:  Jim Gettys, HP Labs, Hewlett-Packard, Inc.
  25.  *     Keith Packard, Intel Corporation
  26.  */
  27. #ifndef _XRANDR_H_
  28. #define _XRANDR_H_
  29. #include <X11/extensions/randr.h>
  30. #include <X11/Xfuncproto.h>
  31. _XFUNCPROTOBEGIN
  32. typedef XID RROutput;
  33. typedef XID RRCrtc;
  34. typedef XID RRMode;
  35. typedef struct {
  36.     int width, height;
  37.     int mwidth, mheight;
  38. } XRRScreenSize;
  39. /*
  40.  *  Events.
  41.  */
  42. typedef struct {
  43.     int type; /* event base */
  44.     unsigned long serial; /* # of last request processed by server */
  45.     Bool send_event; /* true if this came from a SendEvent request */
  46.     Display *display; /* Display the event was read from */
  47.     Window window; /* window which selected for this event */
  48.     Window root; /* Root window for changed screen */
  49.     Time timestamp; /* when the screen change occurred */
  50.     Time config_timestamp; /* when the last configuration change */
  51.     SizeID size_index;
  52.     SubpixelOrder subpixel_order;
  53.     Rotation rotation;
  54.     int width;
  55.     int height;
  56.     int mwidth;
  57.     int mheight;
  58. } XRRScreenChangeNotifyEvent;
  59. typedef struct {
  60.     int type; /* event base */
  61.     unsigned long serial; /* # of last request processed by server */
  62.     Bool send_event; /* true if this came from a SendEvent request */
  63.     Display *display; /* Display the event was read from */
  64.     Window window; /* window which selected for this event */
  65.     int subtype; /* RRNotify_ subtype */
  66. } XRRNotifyEvent;
  67. typedef struct {
  68.     int type; /* event base */
  69.     unsigned long serial; /* # of last request processed by server */
  70.     Bool send_event; /* true if this came from a SendEvent request */
  71.     Display *display; /* Display the event was read from */
  72.     Window window; /* window which selected for this event */
  73.     int subtype; /* RRNotify_OutputChange */
  74.     RROutput output; /* affected output */
  75.     RRCrtc crtc;      /* current crtc (or None) */
  76.     RRMode mode;      /* current mode (or None) */
  77.     Rotation rotation; /* current rotation of associated crtc */
  78.     Connection connection; /* current connection status */
  79.     SubpixelOrder subpixel_order;
  80. } XRROutputChangeNotifyEvent;
  81. typedef struct {
  82.     int type; /* event base */
  83.     unsigned long serial; /* # of last request processed by server */
  84.     Bool send_event; /* true if this came from a SendEvent request */
  85.     Display *display; /* Display the event was read from */
  86.     Window window; /* window which selected for this event */
  87.     int subtype; /* RRNotify_CrtcChange */
  88.     RRCrtc crtc;     /* current crtc (or None) */
  89.     RRMode mode;      /* current mode (or None) */
  90.     Rotation rotation; /* current rotation of associated crtc */
  91.     int x, y; /* position */
  92.     unsigned int width, height; /* size */
  93. } XRRCrtcChangeNotifyEvent;
  94. typedef struct {
  95.     int type; /* event base */
  96.     unsigned long serial; /* # of last request processed by server */
  97.     Bool send_event; /* true if this came from a SendEvent request */
  98.     Display *display; /* Display the event was read from */
  99.     Window window; /* window which selected for this event */
  100.     int subtype; /* RRNotify_OutputProperty */
  101.     RROutput output; /* related output */
  102.     Atom property; /* changed property */
  103.     Time timestamp; /* time of change */
  104.     int state; /* NewValue, Deleted */
  105. } XRROutputPropertyNotifyEvent;
  106. /* internal representation is private to the library */
  107. typedef struct _XRRScreenConfiguration XRRScreenConfiguration;
  108. Bool XRRQueryExtension (Display *dpy,
  109. int *event_base_return,
  110. int *error_base_return);
  111. Status XRRQueryVersion (Display *dpy,
  112.     int     *major_version_return,
  113.     int     *minor_version_return);
  114. XRRScreenConfiguration *XRRGetScreenInfo (Display *dpy,
  115.   Window window);
  116.     
  117. void XRRFreeScreenConfigInfo (XRRScreenConfiguration *config);
  118. /* 
  119.  * Note that screen configuration changes are only permitted if the client can
  120.  * prove it has up to date configuration information.  We are trying to
  121.  * insist that it become possible for screens to change dynamically, so
  122.  * we want to ensure the client knows what it is talking about when requesting
  123.  * changes.
  124.  */
  125. Status XRRSetScreenConfig (Display *dpy, 
  126.    XRRScreenConfiguration *config,
  127.    Drawable draw,
  128.    int size_index,
  129.    Rotation rotation,
  130.    Time timestamp);
  131. /* added in v1.1, sorry for the lame name */
  132. Status XRRSetScreenConfigAndRate (Display *dpy, 
  133.   XRRScreenConfiguration *config,
  134.   Drawable draw,
  135.   int size_index,
  136.   Rotation rotation,
  137.   short rate,
  138.   Time timestamp);
  139. Rotation XRRConfigRotations(XRRScreenConfiguration *config, Rotation *current_rotation);
  140. Time XRRConfigTimes (XRRScreenConfiguration *config, Time *config_timestamp);
  141. XRRScreenSize *XRRConfigSizes(XRRScreenConfiguration *config, int *nsizes);
  142. short *XRRConfigRates (XRRScreenConfiguration *config, int sizeID, int *nrates);
  143. SizeID XRRConfigCurrentConfiguration (XRRScreenConfiguration *config, 
  144.       Rotation *rotation);
  145.     
  146. short XRRConfigCurrentRate (XRRScreenConfiguration *config);
  147. int XRRRootToScreen(Display *dpy, Window root);
  148. /* 
  149.  * returns the screen configuration for the specified screen; does a lazy
  150.  * evalution to delay getting the information, and caches the result.
  151.  * These routines should be used in preference to XRRGetScreenInfo
  152.  * to avoid unneeded round trips to the X server.  These are new
  153.  * in protocol version 0.1.
  154.  */
  155. void XRRSelectInput(Display *dpy, Window window, int mask);
  156. /* 
  157.  * the following are always safe to call, even if RandR is not implemented 
  158.  * on a screen 
  159.  */
  160. Rotation XRRRotations(Display *dpy, int screen, Rotation *current_rotation);
  161. XRRScreenSize *XRRSizes(Display *dpy, int screen, int *nsizes);
  162. short *XRRRates (Display *dpy, int screen, int sizeID, int *nrates);
  163. Time XRRTimes (Display *dpy, int screen, Time *config_timestamp);
  164. /* Version 1.2 additions */
  165. Status
  166. XRRGetScreenSizeRange (Display *dpy, Window window,
  167.        int *minWidth, int *minHeight,
  168.        int *maxWidth, int *maxHeight);
  169. void
  170. XRRSetScreenSize (Display *dpy, Window window,
  171.   int width, int height,
  172.   int mmWidth, int mmHeight);
  173. typedef unsigned long XRRModeFlags;
  174. typedef struct _XRRModeInfo {
  175.     RRMode id;
  176.     unsigned int width;
  177.     unsigned int height;
  178.     unsigned long dotClock;
  179.     unsigned int hSyncStart;
  180.     unsigned int hSyncEnd;
  181.     unsigned int hTotal;
  182.     unsigned int hSkew;
  183.     unsigned int vSyncStart;
  184.     unsigned int vSyncEnd;
  185.     unsigned int vTotal;
  186.     char *name;
  187.     unsigned int nameLength;
  188.     XRRModeFlags modeFlags;
  189. } XRRModeInfo;
  190. typedef struct _XRRScreenResources {
  191.     Time timestamp;
  192.     Time configTimestamp;
  193.     int ncrtc;
  194.     RRCrtc *crtcs;
  195.     int noutput;
  196.     RROutput *outputs;
  197.     int nmode;
  198.     XRRModeInfo *modes;
  199. } XRRScreenResources;
  200.     
  201. XRRScreenResources *
  202. XRRGetScreenResources (Display *dpy, Window window);
  203. void
  204. XRRFreeScreenResources (XRRScreenResources *resources);
  205. typedef struct _XRROutputInfo {
  206.     Time     timestamp;
  207.     RRCrtc     crtc;
  208.     char     *name;
  209.     int     nameLen;
  210.     unsigned long   mm_width;
  211.     unsigned long   mm_height;
  212.     Connection     connection;
  213.     SubpixelOrder   subpixel_order;
  214.     int     ncrtc;
  215.     RRCrtc     *crtcs;
  216.     int     nclone;
  217.     RROutput     *clones;
  218.     int     nmode;
  219.     int     npreferred;
  220.     RRMode     *modes;
  221. } XRROutputInfo;
  222. XRROutputInfo *
  223. XRRGetOutputInfo (Display *dpy, XRRScreenResources *resources, RROutput output);
  224. void
  225. XRRFreeOutputInfo (XRROutputInfo *outputInfo);
  226. Atom *
  227. XRRListOutputProperties (Display *dpy, RROutput output, int *nprop);
  228. typedef struct {
  229.     Bool    pending;
  230.     Bool    range;
  231.     Bool    immutable;
  232.     int     num_values;
  233.     long    *values;
  234. } XRRPropertyInfo;
  235. XRRPropertyInfo *
  236. XRRQueryOutputProperty (Display *dpy, RROutput output, Atom property);
  237. void
  238. XRRConfigureOutputProperty (Display *dpy, RROutput output, Atom property,
  239.     Bool pending, Bool range, int num_values,
  240.     long *values);
  241. void
  242. XRRChangeOutputProperty (Display *dpy, RROutput output,
  243.  Atom property, Atom type,
  244.  int format, int mode,
  245.  _Xconst unsigned char *data, int nelements);
  246. void
  247. XRRDeleteOutputProperty (Display *dpy, RROutput output, Atom property);
  248. int
  249. XRRGetOutputProperty (Display *dpy, RROutput output,
  250.       Atom property, long offset, long length,
  251.       Bool _delete, Bool pending, Atom req_type,
  252.       Atom *actual_type, int *actual_format,
  253.       unsigned long *nitems, unsigned long *bytes_after,
  254.       unsigned char **prop);
  255. XRRModeInfo *
  256. XRRAllocModeInfo (char *name, int nameLength);
  257. RRMode
  258. XRRCreateMode (Display *dpy, Window window, XRRModeInfo *modeInfo);
  259. void
  260. XRRDestroyMode (Display *dpy, RRMode mode);
  261. void
  262. XRRAddOutputMode (Display *dpy, RROutput output, RRMode mode);
  263. void
  264. XRRDeleteOutputMode (Display *dpy, RROutput output, RRMode mode);
  265. void
  266. XRRFreeModeInfo (XRRModeInfo *modeInfo);
  267.       
  268. typedef struct _XRRCrtcInfo {
  269.     Time     timestamp;
  270.     int     x, y;
  271.     unsigned int    width, height;
  272.     RRMode     mode;
  273.     Rotation     rotation;
  274.     int     noutput;
  275.     RROutput     *outputs;
  276.     Rotation     rotations;
  277.     int     npossible;
  278.     RROutput     *possible;
  279. } XRRCrtcInfo;
  280. XRRCrtcInfo *
  281. XRRGetCrtcInfo (Display *dpy, XRRScreenResources *resources, RRCrtc crtc);
  282. void
  283. XRRFreeCrtcInfo (XRRCrtcInfo *crtcInfo);
  284. Status
  285. XRRSetCrtcConfig (Display *dpy,
  286.   XRRScreenResources *resources,
  287.   RRCrtc crtc,
  288.   Time timestamp,
  289.   int x, int y,
  290.   RRMode mode,
  291.   Rotation rotation,
  292.   RROutput *outputs,
  293.   int noutputs);
  294. int
  295. XRRGetCrtcGammaSize (Display *dpy, RRCrtc crtc);
  296. typedef struct _XRRCrtcGamma {
  297.     int     size;
  298.     unsigned short  *red;
  299.     unsigned short  *green;
  300.     unsigned short  *blue;
  301. } XRRCrtcGamma;
  302. XRRCrtcGamma *
  303. XRRGetCrtcGamma (Display *dpy, RRCrtc crtc);
  304. XRRCrtcGamma *
  305. XRRAllocGamma (int size);
  306. void
  307. XRRSetCrtcGamma (Display *dpy, RRCrtc crtc, XRRCrtcGamma *gamma);
  308. void
  309. XRRFreeGamma (XRRCrtcGamma *gamma);
  310. /* 
  311.  * intended to take RRScreenChangeNotify,  or 
  312.  * ConfigureNotify (on the root window)
  313.  * returns 1 if it is an event type it understands, 0 if not
  314.  */
  315. int XRRUpdateConfiguration(XEvent *event);
  316. _XFUNCPROTOEND
  317. #endif /* _XRANDR_H_ */