master
ブランチ master
ShaderPlayground / deps / xlibre / include / X11 / extensions / Xrandr.h
16.7 KB、586行 生 Blame 履歴
1/*
2 * Copyright © 2000 Compaq Computer Corporation, Inc.
3 * Copyright © 2002 Hewlett-Packard Company, Inc.
4 * Copyright © 2006 Intel Corporation
5 * Copyright © 2008 Red Hat, Inc.
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and its
8 * documentation for any purpose is hereby granted without fee, provided that
9 * the above copyright notice appear in all copies and that both that copyright
10 * notice and this permission notice appear in supporting documentation, and
11 * that the name of the copyright holders not be used in advertising or
12 * publicity pertaining to distribution of the software without specific,
13 * written prior permission. The copyright holders make no representations
14 * about the suitability of this software for any purpose. It is provided "as
15 * is" without express or implied warranty.
16 *
17 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
23 * OF THIS SOFTWARE.
24 *
25 * Author: Jim Gettys, HP Labs, Hewlett-Packard, Inc.
26 * Keith Packard, Intel Corporation
27 */
28
29#ifndef _XRANDR_H_
30#define _XRANDR_H_
31
32#include <X11/extensions/randr.h>
33#include <X11/extensions/Xrender.h>
34
35#include <X11/Xfuncproto.h>
36
37_XFUNCPROTOBEGIN
38
39typedef XID RROutput;
40typedef XID RRCrtc;
41typedef XID RRMode;
42typedef XID RRProvider;
43
44typedef struct {
45 int width, height;
46 int mwidth, mheight;
47} XRRScreenSize;
48
49/*
50 * Events.
51 */
52
53typedef struct {
54 int type; /* event base */
55 unsigned long serial; /* # of last request processed by server */
56 Bool send_event; /* true if this came from a SendEvent request */
57 Display *display; /* Display the event was read from */
58 Window window; /* window which selected for this event */
59 Window root; /* Root window for changed screen */
60 Time timestamp; /* when the screen change occurred */
61 Time config_timestamp; /* when the last configuration change */
62 SizeID size_index;
63 SubpixelOrder subpixel_order;
64 Rotation rotation;
65 int width;
66 int height;
67 int mwidth;
68 int mheight;
69} XRRScreenChangeNotifyEvent;
70
71typedef struct {
72 int type; /* event base */
73 unsigned long serial; /* # of last request processed by server */
74 Bool send_event; /* true if this came from a SendEvent request */
75 Display *display; /* Display the event was read from */
76 Window window; /* window which selected for this event */
77 int subtype; /* RRNotify_ subtype */
78} XRRNotifyEvent;
79
80typedef struct {
81 int type; /* event base */
82 unsigned long serial; /* # of last request processed by server */
83 Bool send_event; /* true if this came from a SendEvent request */
84 Display *display; /* Display the event was read from */
85 Window window; /* window which selected for this event */
86 int subtype; /* RRNotify_OutputChange */
87 RROutput output; /* affected output */
88 RRCrtc crtc; /* current crtc (or None) */
89 RRMode mode; /* current mode (or None) */
90 Rotation rotation; /* current rotation of associated crtc */
91 Connection connection; /* current connection status */
92 SubpixelOrder subpixel_order;
93} XRROutputChangeNotifyEvent;
94
95typedef struct {
96 int type; /* event base */
97 unsigned long serial; /* # of last request processed by server */
98 Bool send_event; /* true if this came from a SendEvent request */
99 Display *display; /* Display the event was read from */
100 Window window; /* window which selected for this event */
101 int subtype; /* RRNotify_CrtcChange */
102 RRCrtc crtc; /* current crtc (or None) */
103 RRMode mode; /* current mode (or None) */
104 Rotation rotation; /* current rotation of associated crtc */
105 int x, y; /* position */
106 unsigned int width, height; /* size */
107} XRRCrtcChangeNotifyEvent;
108
109typedef struct {
110 int type; /* event base */
111 unsigned long serial; /* # of last request processed by server */
112 Bool send_event; /* true if this came from a SendEvent request */
113 Display *display; /* Display the event was read from */
114 Window window; /* window which selected for this event */
115 int subtype; /* RRNotify_OutputProperty */
116 RROutput output; /* related output */
117 Atom property; /* changed property */
118 Time timestamp; /* time of change */
119 int state; /* NewValue, Deleted */
120} XRROutputPropertyNotifyEvent;
121
122typedef struct {
123 int type; /* event base */
124 unsigned long serial; /* # of last request processed by server */
125 Bool send_event; /* true if this came from a SendEvent request */
126 Display *display; /* Display the event was read from */
127 Window window; /* window which selected for this event */
128 int subtype; /* RRNotify_ProviderChange */
129 RRProvider provider; /* current provider (or None) */
130 Time timestamp; /* time of change */
131 unsigned int current_role;
132} XRRProviderChangeNotifyEvent;
133
134typedef struct {
135 int type; /* event base */
136 unsigned long serial; /* # of last request processed by server */
137 Bool send_event; /* true if this came from a SendEvent request */
138 Display *display; /* Display the event was read from */
139 Window window; /* window which selected for this event */
140 int subtype; /* RRNotify_ProviderProperty */
141 RRProvider provider; /* related provider */
142 Atom property; /* changed property */
143 Time timestamp; /* time of change */
144 int state; /* NewValue, Deleted */
145} XRRProviderPropertyNotifyEvent;
146
147typedef struct {
148 int type; /* event base */
149 unsigned long serial; /* # of last request processed by server */
150 Bool send_event; /* true if this came from a SendEvent request */
151 Display *display; /* Display the event was read from */
152 Window window; /* window which selected for this event */
153 int subtype; /* RRNotify_ResourceChange */
154 Time timestamp; /* time of change */
155} XRRResourceChangeNotifyEvent;
156
157/* internal representation is private to the library */
158typedef struct _XRRScreenConfiguration XRRScreenConfiguration;
159
160Bool XRRQueryExtension (Display *dpy,
161 int *event_base_return,
162 int *error_base_return);
163Status XRRQueryVersion (Display *dpy,
164 int *major_version_return,
165 int *minor_version_return);
166
167XRRScreenConfiguration *XRRGetScreenInfo (Display *dpy,
168 Window window);
169
170void XRRFreeScreenConfigInfo (XRRScreenConfiguration *config);
171
172/*
173 * Note that screen configuration changes are only permitted if the client can
174 * prove it has up to date configuration information. We are trying to
175 * insist that it become possible for screens to change dynamically, so
176 * we want to ensure the client knows what it is talking about when requesting
177 * changes.
178 */
179Status XRRSetScreenConfig (Display *dpy,
180 XRRScreenConfiguration *config,
181 Drawable draw,
182 int size_index,
183 Rotation rotation,
184 Time timestamp);
185
186/* added in v1.1, sorry for the lame name */
187Status XRRSetScreenConfigAndRate (Display *dpy,
188 XRRScreenConfiguration *config,
189 Drawable draw,
190 int size_index,
191 Rotation rotation,
192 short rate,
193 Time timestamp);
194
195
196Rotation XRRConfigRotations(XRRScreenConfiguration *config, Rotation *current_rotation);
197
198Time XRRConfigTimes (XRRScreenConfiguration *config, Time *config_timestamp);
199
200XRRScreenSize *XRRConfigSizes(XRRScreenConfiguration *config, int *nsizes);
201
202short *XRRConfigRates (XRRScreenConfiguration *config, int sizeID, int *nrates);
203
204SizeID XRRConfigCurrentConfiguration (XRRScreenConfiguration *config,
205 Rotation *rotation);
206
207short XRRConfigCurrentRate (XRRScreenConfiguration *config);
208
209int XRRRootToScreen(Display *dpy, Window root);
210
211/*
212 * returns the screen configuration for the specified screen; does a lazy
213 * evaluation to delay getting the information, and caches the result.
214 * These routines should be used in preference to XRRGetScreenInfo
215 * to avoid unneeded round trips to the X server. These are new
216 * in protocol version 0.1.
217 */
218
219
220void XRRSelectInput(Display *dpy, Window window, int mask);
221
222/*
223 * the following are always safe to call, even if RandR is not implemented
224 * on a screen
225 */
226
227
228Rotation XRRRotations(Display *dpy, int screen, Rotation *current_rotation);
229XRRScreenSize *XRRSizes(Display *dpy, int screen, int *nsizes);
230short *XRRRates (Display *dpy, int screen, int sizeID, int *nrates);
231Time XRRTimes (Display *dpy, int screen, Time *config_timestamp);
232
233
234/* Version 1.2 additions */
235
236Status
237XRRGetScreenSizeRange (Display *dpy, Window window,
238 int *minWidth, int *minHeight,
239 int *maxWidth, int *maxHeight);
240
241void
242XRRSetScreenSize (Display *dpy, Window window,
243 int width, int height,
244 int mmWidth, int mmHeight);
245
246typedef unsigned long XRRModeFlags;
247
248typedef struct _XRRModeInfo {
249 RRMode id;
250 unsigned int width;
251 unsigned int height;
252 unsigned long dotClock;
253 unsigned int hSyncStart;
254 unsigned int hSyncEnd;
255 unsigned int hTotal;
256 unsigned int hSkew;
257 unsigned int vSyncStart;
258 unsigned int vSyncEnd;
259 unsigned int vTotal;
260 char *name;
261 unsigned int nameLength;
262 XRRModeFlags modeFlags;
263} XRRModeInfo;
264
265typedef struct _XRRScreenResources {
266 Time timestamp;
267 Time configTimestamp;
268 int ncrtc;
269 RRCrtc *crtcs;
270 int noutput;
271 RROutput *outputs;
272 int nmode;
273 XRRModeInfo *modes;
274} XRRScreenResources;
275
276XRRScreenResources *
277XRRGetScreenResources (Display *dpy, Window window);
278
279void
280XRRFreeScreenResources (XRRScreenResources *resources);
281
282typedef struct _XRROutputInfo {
283 Time timestamp;
284 RRCrtc crtc;
285 char *name;
286 int nameLen;
287 unsigned long mm_width;
288 unsigned long mm_height;
289 Connection connection;
290 SubpixelOrder subpixel_order;
291 int ncrtc;
292 RRCrtc *crtcs;
293 int nclone;
294 RROutput *clones;
295 int nmode;
296 int npreferred;
297 RRMode *modes;
298} XRROutputInfo;
299
300XRROutputInfo *
301XRRGetOutputInfo (Display *dpy, XRRScreenResources *resources, RROutput output);
302
303void
304XRRFreeOutputInfo (XRROutputInfo *outputInfo);
305
306Atom *
307XRRListOutputProperties (Display *dpy, RROutput output, int *nprop);
308
309typedef struct {
310 Bool pending;
311 Bool range;
312 Bool immutable;
313 int num_values;
314 long *values;
315} XRRPropertyInfo;
316
317XRRPropertyInfo *
318XRRQueryOutputProperty (Display *dpy, RROutput output, Atom property);
319
320void
321XRRConfigureOutputProperty (Display *dpy, RROutput output, Atom property,
322 Bool pending, Bool range, int num_values,
323 long *values);
324
325void
326XRRChangeOutputProperty (Display *dpy, RROutput output,
327 Atom property, Atom type,
328 int format, int mode,
329 _Xconst unsigned char *data, int nelements);
330
331void
332XRRDeleteOutputProperty (Display *dpy, RROutput output, Atom property);
333
334int
335XRRGetOutputProperty (Display *dpy, RROutput output,
336 Atom property, long offset, long length,
337 Bool _delete, Bool pending, Atom req_type,
338 Atom *actual_type, int *actual_format,
339 unsigned long *nitems, unsigned long *bytes_after,
340 unsigned char **prop);
341
342XRRModeInfo *
343XRRAllocModeInfo (_Xconst char *name, int nameLength);
344
345RRMode
346XRRCreateMode (Display *dpy, Window window, XRRModeInfo *modeInfo);
347
348void
349XRRDestroyMode (Display *dpy, RRMode mode);
350
351void
352XRRAddOutputMode (Display *dpy, RROutput output, RRMode mode);
353
354void
355XRRDeleteOutputMode (Display *dpy, RROutput output, RRMode mode);
356
357void
358XRRFreeModeInfo (XRRModeInfo *modeInfo);
359
360typedef struct _XRRCrtcInfo {
361 Time timestamp;
362 int x, y;
363 unsigned int width, height;
364 RRMode mode;
365 Rotation rotation;
366 int noutput;
367 RROutput *outputs;
368 Rotation rotations;
369 int npossible;
370 RROutput *possible;
371} XRRCrtcInfo;
372
373XRRCrtcInfo *
374XRRGetCrtcInfo (Display *dpy, XRRScreenResources *resources, RRCrtc crtc);
375
376void
377XRRFreeCrtcInfo (XRRCrtcInfo *crtcInfo);
378
379Status
380XRRSetCrtcConfig (Display *dpy,
381 XRRScreenResources *resources,
382 RRCrtc crtc,
383 Time timestamp,
384 int x, int y,
385 RRMode mode,
386 Rotation rotation,
387 RROutput *outputs,
388 int noutputs);
389
390int
391XRRGetCrtcGammaSize (Display *dpy, RRCrtc crtc);
392
393typedef struct _XRRCrtcGamma {
394 int size;
395 unsigned short *red;
396 unsigned short *green;
397 unsigned short *blue;
398} XRRCrtcGamma;
399
400XRRCrtcGamma *
401XRRGetCrtcGamma (Display *dpy, RRCrtc crtc);
402
403XRRCrtcGamma *
404XRRAllocGamma (int size);
405
406void
407XRRSetCrtcGamma (Display *dpy, RRCrtc crtc, XRRCrtcGamma *gamma);
408
409void
410XRRFreeGamma (XRRCrtcGamma *gamma);
411
412/* Version 1.3 additions */
413
414XRRScreenResources *
415XRRGetScreenResourcesCurrent (Display *dpy, Window window);
416
417void
418XRRSetCrtcTransform (Display *dpy,
419 RRCrtc crtc,
420 XTransform *transform,
421 _Xconst char *filter,
422 XFixed *params,
423 int nparams);
424
425typedef struct _XRRCrtcTransformAttributes {
426 XTransform pendingTransform;
427 char *pendingFilter;
428 int pendingNparams;
429 XFixed *pendingParams;
430 XTransform currentTransform;
431 char *currentFilter;
432 int currentNparams;
433 XFixed *currentParams;
434} XRRCrtcTransformAttributes;
435
436/*
437 * Get current crtc transforms and filters.
438 * Pass *attributes to XFree to free
439 */
440Status
441XRRGetCrtcTransform (Display *dpy,
442 RRCrtc crtc,
443 XRRCrtcTransformAttributes **attributes);
444
445/*
446 * intended to take RRScreenChangeNotify, or
447 * ConfigureNotify (on the root window)
448 * returns 1 if it is an event type it understands, 0 if not
449 */
450int XRRUpdateConfiguration(XEvent *event);
451
452typedef struct _XRRPanning {
453 Time timestamp;
454 unsigned int left;
455 unsigned int top;
456 unsigned int width;
457 unsigned int height;
458 unsigned int track_left;
459 unsigned int track_top;
460 unsigned int track_width;
461 unsigned int track_height;
462 int border_left;
463 int border_top;
464 int border_right;
465 int border_bottom;
466} XRRPanning;
467
468XRRPanning *
469XRRGetPanning (Display *dpy, XRRScreenResources *resources, RRCrtc crtc);
470
471void
472XRRFreePanning (XRRPanning *panning);
473
474Status
475XRRSetPanning (Display *dpy,
476 XRRScreenResources *resources,
477 RRCrtc crtc,
478 XRRPanning *panning);
479
480void
481XRRSetOutputPrimary(Display *dpy,
482 Window window,
483 RROutput output);
484
485RROutput
486XRRGetOutputPrimary(Display *dpy,
487 Window window);
488
489typedef struct _XRRProviderResources {
490 Time timestamp;
491 int nproviders;
492 RRProvider *providers;
493} XRRProviderResources;
494
495XRRProviderResources *
496XRRGetProviderResources(Display *dpy, Window window);
497
498void
499XRRFreeProviderResources(XRRProviderResources *resources);
500
501typedef struct _XRRProviderInfo {
502 unsigned int capabilities;
503 int ncrtcs;
504 RRCrtc *crtcs;
505 int noutputs;
506 RROutput *outputs;
507 char *name;
508 int nassociatedproviders;
509 RRProvider *associated_providers;
510 unsigned int *associated_capability;
511 int nameLen;
512} XRRProviderInfo;
513
514XRRProviderInfo *
515XRRGetProviderInfo(Display *dpy, XRRScreenResources *resources, RRProvider provider);
516
517void
518XRRFreeProviderInfo(XRRProviderInfo *provider);
519
520int
521XRRSetProviderOutputSource(Display *dpy, XID provider, XID source_provider);
522
523int
524XRRSetProviderOffloadSink(Display *dpy, XID provider, XID sink_provider);
525
526Atom *
527XRRListProviderProperties (Display *dpy, RRProvider provider, int *nprop);
528
529XRRPropertyInfo *
530XRRQueryProviderProperty (Display *dpy, RRProvider provider, Atom property);
531
532void
533XRRConfigureProviderProperty (Display *dpy, RRProvider provider, Atom property,
534 Bool pending, Bool range, int num_values,
535 long *values);
536
537void
538XRRChangeProviderProperty (Display *dpy, RRProvider provider,
539 Atom property, Atom type,
540 int format, int mode,
541 _Xconst unsigned char *data, int nelements);
542
543void
544XRRDeleteProviderProperty (Display *dpy, RRProvider provider, Atom property);
545
546int
547XRRGetProviderProperty (Display *dpy, RRProvider provider,
548 Atom property, long offset, long length,
549 Bool _delete, Bool pending, Atom req_type,
550 Atom *actual_type, int *actual_format,
551 unsigned long *nitems, unsigned long *bytes_after,
552 unsigned char **prop);
553
554
555typedef struct _XRRMonitorInfo {
556 Atom name;
557 Bool primary;
558 Bool automatic;
559 int noutput;
560 int x;
561 int y;
562 int width;
563 int height;
564 int mwidth;
565 int mheight;
566 RROutput *outputs;
567} XRRMonitorInfo;
568
569XRRMonitorInfo *
570XRRAllocateMonitor(Display *dpy, int noutput);
571
572XRRMonitorInfo *
573XRRGetMonitors(Display *dpy, Window window, Bool get_active, int *nmonitors);
574
575void
576XRRSetMonitor(Display *dpy, Window window, XRRMonitorInfo *monitor);
577
578void
579XRRDeleteMonitor(Display *dpy, Window window, Atom name);
580
581void
582XRRFreeMonitors(XRRMonitorInfo *monitors);
583
584_XFUNCPROTOEND
585
586#endif /* _XRANDR_H_ */