package version up
[platform/upstream/libXrandr.git] / src / Xrandrint.h
1 /*
2  * Copyright © 2000, Compaq Computer Corporation,
3  * Copyright © 2002, Hewlett Packard, Inc.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and its
6  * documentation for any purpose is hereby granted without fee, provided that
7  * the above copyright notice appear in all copies and that both that
8  * copyright notice and this permission notice appear in supporting
9  * documentation, and that the name of Compaq or HP not be used in advertising
10  * or publicity pertaining to distribution of the software without specific,
11  * written prior permission.  HP makes no representations about the
12  * suitability of this software for any purpose.  It is provided "as is"
13  * without express or implied warranty.
14  *
15  * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP
17  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
19  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21  *
22  * Author:  Jim Gettys, HP Labs, Hewlett-Packard, Inc.
23  */
24
25 #ifndef _XRANDRINT_H_
26 #define _XRANDRINT_H_
27
28 #include <X11/Xlibint.h>
29 #include <X11/Xutil.h>
30 #include <X11/extensions/Xext.h>
31 #include <X11/extensions/extutil.h>
32 #include "Xrandr.h"
33 #include <X11/extensions/randr.h>
34 #include <X11/extensions/randrproto.h>
35
36 extern char XRRExtensionName[];
37
38 #define RRCheckExtension(dpy,i,val) \
39   XextCheckExtension (dpy, i, XRRExtensionName, val)
40 #define RRSimpleCheckExtension(dpy,i) \
41   XextSimpleCheckExtension (dpy, i, XRRExtensionName)
42
43 XExtDisplayInfo *XRRFindDisplay (Display *dpy);
44
45 #ifndef HAVE__XEATDATAWORDS
46 #include <X11/Xmd.h>  /* for LONG64 on 64-bit platforms */
47 #include <limits.h>
48
49 static inline void _XEatDataWords(Display *dpy, unsigned long n)
50 {
51 # ifndef LONG64
52     if (n >= (ULONG_MAX >> 2))
53         _XIOError(dpy);
54 # endif
55     _XEatData (dpy, n << 2);
56 }
57 #endif
58
59 /* deliberately opaque internal data structure; can be extended,
60    but not reordered */
61 struct _XRRScreenConfiguration {
62   Screen *screen;       /* the root window in GetScreenInfo */
63   XRRScreenSize *sizes;
64   Rotation rotations;
65   Rotation current_rotation;
66   int nsizes;
67   int current_size;
68   short current_rate;
69   Time timestamp;
70   Time config_timestamp;
71   int subpixel_order;   /* introduced in randr v0.1 */
72   short *rates;         /* introduced in randr v1.1 */
73   int nrates;
74 };
75
76 /*
77  * if a configure notify on the root is recieved, or
78  * an XRRScreenChangeNotify is recieved,
79  * XRRUpdateConfiguration should be called to update the X library's
80  * view of the screen configuration; it will also invalidate the cache
81  * provided by XRRScreenConfig and XRRConfig, and force a round trip
82  * when next used.  Returns invalid status if not an event type
83  * the library routine understand.
84  */
85
86 /* we cache one screen configuration/screen */
87
88 typedef struct _XRandRInfo {
89   XRRScreenConfiguration **config;
90   int major_version, minor_version;     /* major_version = -1 means we don't know */
91   Bool has_rates;                       /* Server supports refresh rates */
92 } XRandRInfo;
93
94 typedef struct _randrVersionState {
95     unsigned long   version_seq;
96     Bool            error;
97     int             major_version;
98     int             minor_version;
99 } _XRRVersionState;
100
101 Bool
102 _XRRVersionHandler (Display     *dpy,
103                     xReply      *rep,
104                     char        *buf,
105                     int         len,
106                     XPointer    data);
107
108 _X_HIDDEN Bool
109 _XRRHasRates (int major, int minor);
110
111 #endif /* _XRANDRINT_H_ */