1 // x11-rs: Rust bindings for X11 libraries
2 // The X11 libraries are available under the MIT license.
3 // These bindings are public domain.
4 
5 use std::os::raw::{c_char, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort};
6 
7 use super::xlib::{Atom, Bool, Display, Drawable, Status, Time, Window, XEvent, XID};
8 use super::xrender::{XFixed, XTransform};
9 
10 //
11 // functions
12 //
13 
14 x11_link! { Xrandr, xrandr, ["libXrandr.so.2", "libXrandr.so"], 70,
15     pub fn XRRAddOutputMode (dpy: *mut Display, output: RROutput, mode: RRMode) -> (),
16     pub fn XRRAllocGamma (size: c_int) -> *mut XRRCrtcGamma,
17     pub fn XRRAllocModeInfo (name: *const c_char, nameLength: c_int) -> *mut XRRModeInfo,
18     pub fn XRRAllocateMonitor (dpy: *mut Display, noutput: c_int) -> *mut XRRMonitorInfo,
19     pub fn XRRChangeOutputProperty (dpy: *mut Display, output: RROutput, property: Atom, type_: Atom, format: c_int, mode: c_int, data: *const c_uchar, nelements: c_int) -> (),
20     pub fn XRRChangeProviderProperty (dpy: *mut Display, provider: RRProvider, property: Atom, type_: Atom, format: c_int, mode: c_int, data: *const c_uchar, nelements: c_int) -> (),
21     pub fn XRRConfigCurrentConfiguration (config: *mut XRRScreenConfiguration, rotation: *mut Rotation) -> SizeID,
22     pub fn XRRConfigCurrentRate (config: *mut XRRScreenConfiguration) -> c_short,
23     pub fn XRRConfigRates (config: *mut XRRScreenConfiguration, sizeID: c_int, nrates: *mut c_int) -> *mut c_short,
24     pub fn XRRConfigRotations (config: *mut XRRScreenConfiguration, current_rotation: *mut Rotation) -> Rotation,
25     pub fn XRRConfigSizes (config: *mut XRRScreenConfiguration, nsizes: *mut c_int) -> *mut XRRScreenSize,
26     pub fn XRRConfigTimes (config: *mut XRRScreenConfiguration, config_timestamp: *mut Time) -> Time,
27     pub fn XRRConfigureOutputProperty (dpy: *mut Display, output: RROutput, property: Atom, pending: Bool, range: Bool, num_values: c_int, values: *mut c_long) -> (),
28     pub fn XRRConfigureProviderProperty (dpy: *mut Display, provider: RRProvider, property: Atom, pending: Bool, range: Bool, num_values: c_int, values: *mut c_long) -> (),
29     pub fn XRRCreateMode (dpy: *mut Display, window: Window, modeInfo: *mut XRRModeInfo) -> RRMode,
30     pub fn XRRDeleteMonitor (dpy: *mut Display, window: Window, name: Atom) -> (),
31     pub fn XRRDeleteOutputMode (dpy: *mut Display, output: RROutput, mode: RRMode) -> (),
32     pub fn XRRDeleteOutputProperty (dpy: *mut Display, output: RROutput, property: Atom) -> (),
33     pub fn XRRDeleteProviderProperty (dpy: *mut Display, provider: RRProvider, property: Atom) -> (),
34     pub fn XRRDestroyMode (dpy: *mut Display, mode: RRMode) -> (),
35     pub fn XRRFreeCrtcInfo (crtcInfo: *mut XRRCrtcInfo) -> (),
36     pub fn XRRFreeGamma (gamma: *mut XRRCrtcGamma) -> (),
37     pub fn XRRFreeModeInfo (modeInfo: *mut XRRModeInfo) -> (),
38     pub fn XRRFreeMonitors (monitors: *mut XRRMonitorInfo) -> (),
39     pub fn XRRFreeOutputInfo (outputInfo: *mut XRROutputInfo) -> (),
40     pub fn XRRFreePanning (panning: *mut XRRPanning) -> (),
41     pub fn XRRFreeProviderInfo (provider: *mut XRRProviderInfo) -> (),
42     pub fn XRRFreeProviderResources (resources: *mut XRRProviderResources) -> (),
43     pub fn XRRFreeScreenConfigInfo (config: *mut XRRScreenConfiguration) -> (),
44     pub fn XRRFreeScreenResources (resources: *mut XRRScreenResources) -> (),
45     pub fn XRRGetCrtcGamma (dpy: *mut Display, crtc: RRCrtc) -> *mut XRRCrtcGamma,
46     pub fn XRRGetCrtcGammaSize (dpy: *mut Display, crtc: RRCrtc) -> c_int,
47     pub fn XRRGetCrtcInfo (dpy: *mut Display, resources: *mut XRRScreenResources, crtc: RRCrtc) -> *mut XRRCrtcInfo,
48     pub fn XRRGetCrtcTransform (dpy: *mut Display, crtc: RRCrtc, attributes: *mut *mut XRRCrtcTransformAttributes) -> Status,
49     pub fn XRRGetMonitors (dpy: *mut Display, window: Window, get_active: Bool, nmonitors: *mut c_int) -> *mut XRRMonitorInfo,
50     pub fn XRRGetOutputInfo (dpy: *mut Display, resources: *mut XRRScreenResources, output: RROutput) -> *mut XRROutputInfo,
51     pub fn XRRGetOutputPrimary (dpy: *mut Display, window: Window) -> RROutput,
52     pub fn XRRGetOutputProperty (dpy: *mut Display, output: RROutput, property: Atom, offset: c_long, length: c_long, _delete: Bool, pending: Bool, req_type: Atom, actual_type: *mut Atom, actual_format: *mut c_int, nitems: *mut c_ulong, bytes_after: *mut c_ulong, prop: *mut *mut c_uchar) -> c_int,
53     pub fn XRRGetPanning (dpy: *mut Display, resources: *mut XRRScreenResources, crtc: RRCrtc) -> *mut XRRPanning,
54     pub fn XRRGetProviderInfo (dpy: *mut Display, resources: *mut XRRScreenResources, provider: RRProvider) -> *mut XRRProviderInfo,
55     pub fn XRRGetProviderProperty (dpy: *mut Display, provider: RRProvider, property: Atom, offset: c_long, length: c_long, _delete: Bool, pending: Bool, req_type: Atom, actual_type: *mut Atom, actual_format: *mut c_int, nitems: *mut c_ulong, bytes_after: *mut c_ulong, prop: *mut *mut c_uchar) -> c_int,
56     pub fn XRRGetProviderResources (dpy: *mut Display, window: Window) -> *mut XRRProviderResources,
57     pub fn XRRGetScreenInfo (dpy: *mut Display, window: Window) -> *mut XRRScreenConfiguration,
58     pub fn XRRGetScreenResources (dpy: *mut Display, window: Window) -> *mut XRRScreenResources,
59     pub fn XRRGetScreenResourcesCurrent (dpy: *mut Display, window: Window) -> *mut XRRScreenResources,
60     pub fn XRRGetScreenSizeRange (dpy: *mut Display, window: Window, minWidth: *mut c_int, minHeight: *mut c_int, maxWidth: *mut c_int, maxHeight: *mut c_int) -> Status,
61     pub fn XRRListOutputProperties (dpy: *mut Display, output: RROutput, nprop: *mut c_int) -> *mut Atom,
62     pub fn XRRListProviderProperties (dpy: *mut Display, provider: RRProvider, nprop: *mut c_int) -> *mut Atom,
63     pub fn XRRQueryExtension (dpy: *mut Display, event_base_return: *mut c_int, error_base_return: *mut c_int) -> Bool,
64     pub fn XRRQueryOutputProperty (dpy: *mut Display, output: RROutput, property: Atom) -> *mut XRRPropertyInfo,
65     pub fn XRRQueryProviderProperty (dpy: *mut Display, provider: RRProvider, property: Atom) -> *mut XRRPropertyInfo,
66     pub fn XRRQueryVersion (dpy: *mut Display, major_version_return: *mut c_int, minor_version_return: *mut c_int) -> Status,
67     pub fn XRRRates (dpy: *mut Display, screen: c_int, sizeID: c_int, nrates: *mut c_int) -> *mut c_short,
68     pub fn XRRRootToScreen (dpy: *mut Display, root: Window) -> c_int,
69     pub fn XRRRotations (dpy: *mut Display, screen: c_int, current_rotation: *mut Rotation) -> Rotation,
70     pub fn XRRSelectInput (dpy: *mut Display, window: Window, mask: c_int) -> (),
71     pub fn XRRSetCrtcConfig (dpy: *mut Display, resources: *mut XRRScreenResources, crtc: RRCrtc, timestamp: Time, x: c_int, y: c_int, mode: RRMode, rotation: Rotation, outputs: *mut RROutput, noutputs: c_int) -> Status,
72     pub fn XRRSetCrtcGamma (dpy: *mut Display, crtc: RRCrtc, gamma: *mut XRRCrtcGamma) -> (),
73     pub fn XRRSetCrtcTransform (dpy: *mut Display, crtc: RRCrtc, transform: *mut XTransform, filter: *const c_char, params: *mut XFixed, nparams: c_int) -> (),
74     pub fn XRRSetMonitor (dpy: *mut Display, window: Window, monitor: *mut XRRMonitorInfo) -> (),
75     pub fn XRRSetOutputPrimary (dpy: *mut Display, window: Window, output: RROutput) -> (),
76     pub fn XRRSetPanning (dpy: *mut Display, resources: *mut XRRScreenResources, crtc: RRCrtc, panning: *mut XRRPanning) -> Status,
77     pub fn XRRSetProviderOffloadSink (dpy: *mut Display, provider: XID, sink_provider: XID) -> c_int,
78     pub fn XRRSetProviderOutputSource (dpy: *mut Display, provider: XID, source_provider: XID) -> c_int,
79     pub fn XRRSetScreenConfig (dpy: *mut Display, config: *mut XRRScreenConfiguration, draw: Drawable, size_index: c_int, rotation: Rotation, timestamp: Time) -> Status,
80     pub fn XRRSetScreenConfigAndRate (dpy: *mut Display, config: *mut XRRScreenConfiguration, draw: Drawable, size_index: c_int, rotation: Rotation, rate: c_short, timestamp: Time) -> Status,
81     pub fn XRRSetScreenSize (dpy: *mut Display, window: Window, width: c_int, height: c_int, mmWidth: c_int, mmHeight: c_int) -> (),
82     pub fn XRRSizes (dpy: *mut Display, screen: c_int, nsizes: *mut c_int) -> *mut XRRScreenSize,
83     pub fn XRRTimes (dpy: *mut Display, screen: c_int, config_timestamp: *mut Time) -> Time,
84     pub fn XRRUpdateConfiguration (event: *mut XEvent) -> c_int,
85 variadic:
86 globals:
87 }
88 
89 //
90 // types
91 //
92 
93 pub type Connection = c_ushort;
94 pub type Rotation = c_ushort;
95 pub type SizeID = c_ushort;
96 pub type SubpixelOrder = c_ushort;
97 
98 pub type RROutput = XID;
99 pub type RRCrtc = XID;
100 pub type RRMode = XID;
101 pub type RRProvider = XID;
102 
103 #[derive(Debug, Clone, Copy, PartialEq)]
104 #[repr(C)]
105 pub struct XRRScreenSize {
106     pub width: c_int,
107     pub height: c_int,
108     pub mwidth: c_int,
109     pub mheight: c_int,
110 }
111 
112 #[repr(C)]
113 pub struct XRRScreenConfiguration;
114 
115 pub type XRRModeFlags = c_ulong;
116 
117 #[derive(Debug, Clone, Copy, PartialEq)]
118 #[repr(C)]
119 pub struct XRRModeInfo {
120     pub id: RRMode,
121     pub width: c_uint,
122     pub height: c_uint,
123     pub dotClock: c_ulong,
124     pub hSyncStart: c_uint,
125     pub hSyncEnd: c_uint,
126     pub hTotal: c_uint,
127     pub hSkew: c_uint,
128     pub vSyncStart: c_uint,
129     pub vSyncEnd: c_uint,
130     pub vTotal: c_uint,
131     pub name: *mut c_char,
132     pub nameLength: c_uint,
133     pub modeFlags: XRRModeFlags,
134 }
135 
136 #[derive(Debug, Clone, Copy, PartialEq)]
137 #[repr(C)]
138 pub struct XRRScreenResources {
139     pub timestamp: Time,
140     pub configTimestamp: Time,
141     pub ncrtc: c_int,
142     pub crtcs: *mut RRCrtc,
143     pub noutput: c_int,
144     pub outputs: *mut RROutput,
145     pub nmode: c_int,
146     pub modes: *mut XRRModeInfo,
147 }
148 
149 #[derive(Debug, Clone, Copy, PartialEq)]
150 #[repr(C)]
151 pub struct XRROutputInfo {
152     pub timestamp: Time,
153     pub crtc: RRCrtc,
154     pub name: *mut c_char,
155     pub nameLen: c_int,
156     pub mm_width: c_ulong,
157     pub mm_height: c_ulong,
158     pub connection: Connection,
159     pub subpixel_order: SubpixelOrder,
160     pub ncrtc: c_int,
161     pub crtcs: *mut RRCrtc,
162     pub nclone: c_int,
163     pub clones: *mut RROutput,
164     pub nmode: c_int,
165     pub npreferred: c_int,
166     pub modes: *mut RRMode,
167 }
168 
169 #[derive(Debug, Clone, Copy, PartialEq)]
170 #[repr(C)]
171 pub struct XRRPropertyInfo {
172     pub pending: Bool,
173     pub range: Bool,
174     pub immutable: Bool,
175     pub num_values: c_int,
176     pub values: *mut c_long,
177 }
178 
179 #[derive(Debug, Clone, Copy, PartialEq)]
180 #[repr(C)]
181 pub struct XRRCrtcInfo {
182     pub timestamp: Time,
183     pub x: c_int,
184     pub y: c_int,
185     pub width: c_uint,
186     pub height: c_uint,
187     pub mode: RRMode,
188     pub rotation: Rotation,
189     pub noutput: c_int,
190     pub outputs: *mut RROutput,
191     pub rotations: Rotation,
192     pub npossible: c_int,
193     pub possible: *mut RROutput,
194 }
195 
196 #[derive(Debug, Clone, Copy, PartialEq)]
197 #[repr(C)]
198 pub struct XRRCrtcGamma {
199     pub size: c_int,
200     pub red: *mut c_ushort,
201     pub green: *mut c_ushort,
202     pub blue: *mut c_ushort,
203 }
204 
205 #[derive(Debug, Clone, Copy, PartialEq)]
206 #[repr(C)]
207 pub struct XRRCrtcTransformAttributes {
208     pub pendingTransform: XTransform,
209     pub pendingFilter: *mut c_char,
210     pub pendingNparams: c_int,
211     pub pendingParams: *mut XFixed,
212     pub currentTransform: XTransform,
213     pub currentFilter: *mut c_char,
214     pub currentNparams: c_int,
215     pub currentParams: *mut XFixed,
216 }
217 
218 #[derive(Debug, Clone, Copy, PartialEq)]
219 #[repr(C)]
220 pub struct XRRPanning {
221     pub timestamp: Time,
222     pub left: c_uint,
223     pub top: c_uint,
224     pub width: c_uint,
225     pub height: c_uint,
226     pub track_left: c_uint,
227     pub track_top: c_uint,
228     pub track_width: c_uint,
229     pub track_height: c_uint,
230     pub border_left: c_int,
231     pub border_top: c_int,
232     pub border_right: c_int,
233     pub border_bottom: c_int,
234 }
235 
236 #[derive(Debug, Clone, Copy, PartialEq)]
237 #[repr(C)]
238 pub struct XRRProviderResources {
239     pub timestamp: Time,
240     pub nproviders: c_int,
241     pub providers: *mut RRProvider,
242 }
243 
244 #[derive(Debug, Clone, Copy, PartialEq)]
245 #[repr(C)]
246 pub struct XRRProviderInfo {
247     pub capabilities: c_uint,
248     pub ncrtcs: c_int,
249     pub crtcs: *mut RRCrtc,
250     pub noutputs: c_int,
251     pub outputs: *mut RROutput,
252     pub name: *mut c_char,
253     pub nassociatedproviders: c_int,
254     pub associated_providers: *mut RRProvider,
255     pub associated_capability: *mut c_uint,
256     pub nameLen: c_int,
257 }
258 
259 #[derive(Debug, Clone, Copy, PartialEq)]
260 #[repr(C)]
261 pub struct XRRMonitorInfo {
262     pub name: Atom,
263     pub primary: Bool,
264     pub automatic: Bool,
265     pub noutput: c_int,
266     pub x: c_int,
267     pub y: c_int,
268     pub width: c_int,
269     pub height: c_int,
270     pub mwidth: c_int,
271     pub mheight: c_int,
272     pub outputs: *mut RROutput,
273 }
274 
275 //
276 // event structures
277 //
278 
279 #[derive(Debug, Clone, Copy, PartialEq)]
280 #[repr(C)]
281 pub struct XRRScreenChangeNotifyEvent {
282     pub type_: c_int,
283     pub serial: c_ulong,
284     pub send_event: Bool,
285     pub display: *mut Display,
286     pub window: Window,
287     pub root: Window,
288     pub timestamp: Time,
289     pub config_timestamp: Time,
290     pub size_index: SizeID,
291     pub subpixel_order: SubpixelOrder,
292     pub rotation: Rotation,
293     pub width: c_int,
294     pub height: c_int,
295     pub mwidth: c_int,
296     pub mheight: c_int,
297 }
298 
299 #[derive(Debug, Clone, Copy, PartialEq)]
300 #[repr(C)]
301 pub struct XRRNotifyEvent {
302     pub type_: c_int,
303     pub serial: c_ulong,
304     pub send_event: Bool,
305     pub display: *mut Display,
306     pub window: Window,
307     pub subtype: c_int,
308 }
309 
310 #[derive(Debug, Clone, Copy, PartialEq)]
311 #[repr(C)]
312 pub struct XRROutputChangeNotifyEvent {
313     pub type_: c_int,
314     pub serial: c_ulong,
315     pub send_event: Bool,
316     pub display: *mut Display,
317     pub window: Window,
318     pub subtype: c_int,
319     pub output: RROutput,
320     pub crtc: RRCrtc,
321     pub mode: RRMode,
322     pub rotation: Rotation,
323     pub connection: Connection,
324     pub subpixel_order: SubpixelOrder,
325 }
326 
327 #[derive(Debug, Clone, Copy, PartialEq)]
328 #[repr(C)]
329 pub struct XRRCrtcChangeNotifyEvent {
330     pub type_: c_int,
331     pub serial: c_ulong,
332     pub send_event: Bool,
333     pub display: *mut Display,
334     pub window: Window,
335     pub subtype: c_int,
336     pub crtc: RRCrtc,
337     pub mode: RRMode,
338     pub rotation: Rotation,
339     pub x: c_int,
340     pub y: c_int,
341     pub width: c_uint,
342     pub height: c_uint,
343 }
344 
345 #[derive(Debug, Clone, Copy, PartialEq)]
346 #[repr(C)]
347 pub struct XRROutputPropertyNotifyEvent {
348     pub type_: c_int,
349     pub serial: c_ulong,
350     pub send_event: Bool,
351     pub display: *mut Display,
352     pub window: Window,
353     pub subtype: c_int,
354     pub output: RROutput,
355     pub property: Atom,
356     pub timestamp: Time,
357     pub state: c_int,
358 }
359 
360 #[derive(Debug, Clone, Copy, PartialEq)]
361 #[repr(C)]
362 pub struct XRRProviderChangeNotifyEvent {
363     pub type_: c_int,
364     pub serial: c_ulong,
365     pub send_event: Bool,
366     pub display: *mut Display,
367     pub window: Window,
368     pub subtype: c_int,
369     pub provider: RRProvider,
370     pub timestamp: Time,
371     pub current_role: c_uint,
372 }
373 
374 #[derive(Debug, Clone, Copy, PartialEq)]
375 #[repr(C)]
376 pub struct XRRProviderPropertyNotifyEvent {
377     pub type_: c_int,
378     pub serial: c_ulong,
379     pub send_event: Bool,
380     pub display: *mut Display,
381     pub window: Window,
382     pub subtype: c_int,
383     pub provider: RRProvider,
384     pub property: Atom,
385     pub timestamp: Time,
386     pub state: c_int,
387 }
388 
389 #[derive(Debug, Clone, Copy, PartialEq)]
390 #[repr(C)]
391 pub struct XRRResourceChangeNotifyEvent {
392     pub type_: c_int,
393     pub serial: c_ulong,
394     pub send_event: Bool,
395     pub display: *mut Display,
396     pub window: Window,
397     pub subtype: c_int,
398     pub timestamp: Time,
399 }
400 
401 event_conversions_and_tests! {
402   xrr_screen_change_notify: XRRScreenChangeNotifyEvent,
403   xrr_notify: XRRNotifyEvent,
404   xrr_output_change_notify: XRROutputChangeNotifyEvent,
405   xrr_crtc_change_notify: XRRCrtcChangeNotifyEvent,
406   xrr_output_property_notify: XRROutputPropertyNotifyEvent,
407   xrr_provider_change_notify: XRRProviderChangeNotifyEvent,
408   xrr_provider_property_notify: XRRProviderPropertyNotifyEvent,
409   xrr_resource_change_notify: XRRResourceChangeNotifyEvent,
410 }
411 
412 //
413 // constants
414 //
415 
416 pub const RANDR_NAME: &str = "RANDR";
417 pub const RANDR_MAJOR: c_int = 1;
418 pub const RANDR_MINOR: c_int = 5;
419 
420 pub const RRNumberErrors: c_int = 4;
421 pub const RRNumberEvents: c_int = 2;
422 pub const RRNumberRequests: c_int = 45;
423 
424 pub const X_RRQueryVersion: c_int = 0;
425 pub const X_RROldGetScreenInfo: c_int = 1;
426 pub const X_RRSetScreenConfig: c_int = 2;
427 pub const X_RROldScreenChangeSelectInput: c_int = 3;
428 pub const X_RRSelectInput: c_int = 4;
429 pub const X_RRGetScreenInfo: c_int = 5;
430 
431 pub const X_RRGetScreenSizeRange: c_int = 6;
432 pub const X_RRSetScreenSize: c_int = 7;
433 pub const X_RRGetScreenResources: c_int = 8;
434 pub const X_RRGetOutputInfo: c_int = 9;
435 pub const X_RRListOutputProperties: c_int = 10;
436 pub const X_RRQueryOutputProperty: c_int = 11;
437 pub const X_RRConfigureOutputProperty: c_int = 12;
438 pub const X_RRChangeOutputProperty: c_int = 13;
439 pub const X_RRDeleteOutputProperty: c_int = 14;
440 pub const X_RRGetOutputProperty: c_int = 15;
441 pub const X_RRCreateMode: c_int = 16;
442 pub const X_RRDestroyMode: c_int = 17;
443 pub const X_RRAddOutputMode: c_int = 18;
444 pub const X_RRDeleteOutputMode: c_int = 19;
445 pub const X_RRGetCrtcInfo: c_int = 20;
446 pub const X_RRSetCrtcConfig: c_int = 21;
447 pub const X_RRGetCrtcGammaSize: c_int = 22;
448 pub const X_RRGetCrtcGamma: c_int = 23;
449 pub const X_RRSetCrtcGamma: c_int = 24;
450 
451 pub const X_RRGetScreenResourcesCurrent: c_int = 25;
452 pub const X_RRSetCrtcTransform: c_int = 26;
453 pub const X_RRGetCrtcTransform: c_int = 27;
454 pub const X_RRGetPanning: c_int = 28;
455 pub const X_RRSetPanning: c_int = 29;
456 pub const X_RRSetOutputPrimary: c_int = 30;
457 pub const X_RRGetOutputPrimary: c_int = 31;
458 
459 pub const X_RRGetProviders: c_int = 32;
460 pub const X_RRGetProviderInfo: c_int = 33;
461 pub const X_RRSetProviderOffloadSink: c_int = 34;
462 pub const X_RRSetProviderOutputSource: c_int = 35;
463 pub const X_RRListProviderProperties: c_int = 36;
464 pub const X_RRQueryProviderProperty: c_int = 37;
465 pub const X_RRConfigureProviderProperty: c_int = 38;
466 pub const X_RRChangeProviderProperty: c_int = 39;
467 pub const X_RRDeleteProviderProperty: c_int = 40;
468 pub const X_RRGetProviderProperty: c_int = 41;
469 
470 pub const X_RRGetMonitors: c_int = 42;
471 pub const X_RRSetMonitor: c_int = 43;
472 pub const X_RRDeleteMonitor: c_int = 44;
473 
474 pub const RRTransformUnit: c_int = 1 << 0;
475 pub const RRTransformScaleUp: c_int = 1 << 1;
476 pub const RRTransformScaleDown: c_int = 1 << 2;
477 pub const RRTransformProjective: c_int = 1 << 3;
478 
479 pub const RRScreenChangeNotifyMask: c_int = 1 << 0;
480 pub const RRCrtcChangeNotifyMask: c_int = 1 << 1;
481 pub const RROutputChangeNotifyMask: c_int = 1 << 2;
482 pub const RROutputPropertyNotifyMask: c_int = 1 << 3;
483 pub const RRProviderChangeNotifyMask: c_int = 1 << 4;
484 pub const RRProviderPropertyNotifyMask: c_int = 1 << 5;
485 pub const RRResourceChangeNotifyMask: c_int = 1 << 6;
486 
487 pub const RRScreenChangeNotify: c_int = 0;
488 pub const RRNotify: c_int = 1;
489 pub const RRNotify_CrtcChange: c_int = 0;
490 pub const RRNotify_OutputChange: c_int = 1;
491 pub const RRNotify_OutputProperty: c_int = 2;
492 pub const RRNotify_ProviderChange: c_int = 3;
493 pub const RRNotify_ProviderProperty: c_int = 4;
494 pub const RRNotify_ResourceChange: c_int = 5;
495 
496 pub const RR_Rotate_0: c_int = 1;
497 pub const RR_Rotate_90: c_int = 2;
498 pub const RR_Rotate_180: c_int = 4;
499 pub const RR_Rotate_270: c_int = 8;
500 
501 pub const RR_Reflect_X: c_int = 16;
502 pub const RR_Reflect_Y: c_int = 32;
503 
504 pub const RRSetConfigSuccess: c_int = 0;
505 pub const RRSetConfigInvalidConfigTime: c_int = 1;
506 pub const RRSetConfigInvalidTime: c_int = 2;
507 pub const RRSetConfigFailed: c_int = 3;
508 
509 pub const RR_HSyncPositive: c_int = 0x00000001;
510 pub const RR_HSyncNegative: c_int = 0x00000002;
511 pub const RR_VSyncPositive: c_int = 0x00000004;
512 pub const RR_VSyncNegative: c_int = 0x00000008;
513 pub const RR_Interlace: c_int = 0x00000010;
514 pub const RR_DoubleScan: c_int = 0x00000020;
515 pub const RR_CSync: c_int = 0x00000040;
516 pub const RR_CSyncPositive: c_int = 0x00000080;
517 pub const RR_CSyncNegative: c_int = 0x00000100;
518 pub const RR_HSkewPresent: c_int = 0x00000200;
519 pub const RR_BCast: c_int = 0x00000400;
520 pub const RR_PixelMultiplex: c_int = 0x00000800;
521 pub const RR_DoubleClock: c_int = 0x00001000;
522 pub const RR_ClockDivideBy2: c_int = 0x00002000;
523 
524 pub const RR_Connected: c_int = 0;
525 pub const RR_Disconnected: c_int = 1;
526 pub const RR_UnknownConnection: c_int = 2;
527 
528 pub const BadRROutput: c_int = 0;
529 pub const BadRRCrtc: c_int = 1;
530 pub const BadRRMode: c_int = 2;
531 pub const BadRRProvider: c_int = 3;
532 
533 pub const RR_PROPERTY_BACKLIGHT: &str = "Backlight";
534 pub const RR_PROPERTY_RANDR_EDID: &str = "EDID";
535 pub const RR_PROPERTY_SIGNAL_FORMAT: &str = "SignalFormat";
536 pub const RR_PROPERTY_SIGNAL_PROPERTIES: &str = "SignalProperties";
537 pub const RR_PROPERTY_CONNECTOR_TYPE: &str = "ConnectorType";
538 pub const RR_PROPERTY_CONNECTOR_NUMBER: &str = "ConnectorNumber";
539 pub const RR_PROPERTY_COMPATIBILITY_LIST: &str = "CompatibilityList";
540 pub const RR_PROPERTY_CLONE_LIST: &str = "CloneList";
541 pub const RR_PROPERTY_BORDER: &str = "Border";
542 pub const RR_PROPERTY_BORDER_DIMENSIONS: &str = "BorderDimensions";
543 pub const RR_PROPERTY_GUID: &str = "GUID";
544 pub const RR_PROPERTY_RANDR_TILE: &str = "TILE";
545 
546 pub const RR_Capability_None: c_int = 0;
547 pub const RR_Capability_SourceOutput: c_int = 1;
548 pub const RR_Capability_SinkOutput: c_int = 2;
549 pub const RR_Capability_SourceOffload: c_int = 4;
550 pub const RR_Capability_SinkOffload: c_int = 8;
551