x11_dl/
xrandr.rs

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
5use std::os::raw::{c_char, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort};
6
7use super::xlib::{Atom, Bool, Display, Drawable, Status, Time, Window, XEvent, XID};
8use super::xrender::{XFixed, XTransform};
9
10//
11// functions
12//
13
14x11_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,
85variadic:
86globals:
87}
88
89//
90// types
91//
92
93pub type Connection = c_ushort;
94pub type Rotation = c_ushort;
95pub type SizeID = c_ushort;
96pub type SubpixelOrder = c_ushort;
97
98pub type RROutput = XID;
99pub type RRCrtc = XID;
100pub type RRMode = XID;
101pub type RRProvider = XID;
102
103#[derive(Debug, Clone, Copy, PartialEq)]
104#[repr(C)]
105pub 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)]
113pub struct XRRScreenConfiguration;
114
115pub type XRRModeFlags = c_ulong;
116
117#[derive(Debug, Clone, Copy, PartialEq)]
118#[repr(C)]
119pub 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)]
138pub 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)]
151pub 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)]
171pub 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)]
181pub 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)]
198pub 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)]
207pub 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)]
220pub 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)]
238pub 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)]
246pub 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)]
261pub 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)]
281pub 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)]
301pub 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)]
312pub 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)]
329pub 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)]
347pub 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)]
362pub 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)]
376pub 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)]
391pub 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
401event_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
416pub const RANDR_NAME: &str = "RANDR";
417pub const RANDR_MAJOR: c_int = 1;
418pub const RANDR_MINOR: c_int = 5;
419
420pub const RRNumberErrors: c_int = 4;
421pub const RRNumberEvents: c_int = 2;
422pub const RRNumberRequests: c_int = 45;
423
424pub const X_RRQueryVersion: c_int = 0;
425pub const X_RROldGetScreenInfo: c_int = 1;
426pub const X_RRSetScreenConfig: c_int = 2;
427pub const X_RROldScreenChangeSelectInput: c_int = 3;
428pub const X_RRSelectInput: c_int = 4;
429pub const X_RRGetScreenInfo: c_int = 5;
430
431pub const X_RRGetScreenSizeRange: c_int = 6;
432pub const X_RRSetScreenSize: c_int = 7;
433pub const X_RRGetScreenResources: c_int = 8;
434pub const X_RRGetOutputInfo: c_int = 9;
435pub const X_RRListOutputProperties: c_int = 10;
436pub const X_RRQueryOutputProperty: c_int = 11;
437pub const X_RRConfigureOutputProperty: c_int = 12;
438pub const X_RRChangeOutputProperty: c_int = 13;
439pub const X_RRDeleteOutputProperty: c_int = 14;
440pub const X_RRGetOutputProperty: c_int = 15;
441pub const X_RRCreateMode: c_int = 16;
442pub const X_RRDestroyMode: c_int = 17;
443pub const X_RRAddOutputMode: c_int = 18;
444pub const X_RRDeleteOutputMode: c_int = 19;
445pub const X_RRGetCrtcInfo: c_int = 20;
446pub const X_RRSetCrtcConfig: c_int = 21;
447pub const X_RRGetCrtcGammaSize: c_int = 22;
448pub const X_RRGetCrtcGamma: c_int = 23;
449pub const X_RRSetCrtcGamma: c_int = 24;
450
451pub const X_RRGetScreenResourcesCurrent: c_int = 25;
452pub const X_RRSetCrtcTransform: c_int = 26;
453pub const X_RRGetCrtcTransform: c_int = 27;
454pub const X_RRGetPanning: c_int = 28;
455pub const X_RRSetPanning: c_int = 29;
456pub const X_RRSetOutputPrimary: c_int = 30;
457pub const X_RRGetOutputPrimary: c_int = 31;
458
459pub const X_RRGetProviders: c_int = 32;
460pub const X_RRGetProviderInfo: c_int = 33;
461pub const X_RRSetProviderOffloadSink: c_int = 34;
462pub const X_RRSetProviderOutputSource: c_int = 35;
463pub const X_RRListProviderProperties: c_int = 36;
464pub const X_RRQueryProviderProperty: c_int = 37;
465pub const X_RRConfigureProviderProperty: c_int = 38;
466pub const X_RRChangeProviderProperty: c_int = 39;
467pub const X_RRDeleteProviderProperty: c_int = 40;
468pub const X_RRGetProviderProperty: c_int = 41;
469
470pub const X_RRGetMonitors: c_int = 42;
471pub const X_RRSetMonitor: c_int = 43;
472pub const X_RRDeleteMonitor: c_int = 44;
473
474pub const RRTransformUnit: c_int = 1 << 0;
475pub const RRTransformScaleUp: c_int = 1 << 1;
476pub const RRTransformScaleDown: c_int = 1 << 2;
477pub const RRTransformProjective: c_int = 1 << 3;
478
479pub const RRScreenChangeNotifyMask: c_int = 1 << 0;
480pub const RRCrtcChangeNotifyMask: c_int = 1 << 1;
481pub const RROutputChangeNotifyMask: c_int = 1 << 2;
482pub const RROutputPropertyNotifyMask: c_int = 1 << 3;
483pub const RRProviderChangeNotifyMask: c_int = 1 << 4;
484pub const RRProviderPropertyNotifyMask: c_int = 1 << 5;
485pub const RRResourceChangeNotifyMask: c_int = 1 << 6;
486
487pub const RRScreenChangeNotify: c_int = 0;
488pub const RRNotify: c_int = 1;
489pub const RRNotify_CrtcChange: c_int = 0;
490pub const RRNotify_OutputChange: c_int = 1;
491pub const RRNotify_OutputProperty: c_int = 2;
492pub const RRNotify_ProviderChange: c_int = 3;
493pub const RRNotify_ProviderProperty: c_int = 4;
494pub const RRNotify_ResourceChange: c_int = 5;
495
496pub const RR_Rotate_0: c_int = 1;
497pub const RR_Rotate_90: c_int = 2;
498pub const RR_Rotate_180: c_int = 4;
499pub const RR_Rotate_270: c_int = 8;
500
501pub const RR_Reflect_X: c_int = 16;
502pub const RR_Reflect_Y: c_int = 32;
503
504pub const RRSetConfigSuccess: c_int = 0;
505pub const RRSetConfigInvalidConfigTime: c_int = 1;
506pub const RRSetConfigInvalidTime: c_int = 2;
507pub const RRSetConfigFailed: c_int = 3;
508
509pub const RR_HSyncPositive: c_int = 0x00000001;
510pub const RR_HSyncNegative: c_int = 0x00000002;
511pub const RR_VSyncPositive: c_int = 0x00000004;
512pub const RR_VSyncNegative: c_int = 0x00000008;
513pub const RR_Interlace: c_int = 0x00000010;
514pub const RR_DoubleScan: c_int = 0x00000020;
515pub const RR_CSync: c_int = 0x00000040;
516pub const RR_CSyncPositive: c_int = 0x00000080;
517pub const RR_CSyncNegative: c_int = 0x00000100;
518pub const RR_HSkewPresent: c_int = 0x00000200;
519pub const RR_BCast: c_int = 0x00000400;
520pub const RR_PixelMultiplex: c_int = 0x00000800;
521pub const RR_DoubleClock: c_int = 0x00001000;
522pub const RR_ClockDivideBy2: c_int = 0x00002000;
523
524pub const RR_Connected: c_int = 0;
525pub const RR_Disconnected: c_int = 1;
526pub const RR_UnknownConnection: c_int = 2;
527
528pub const BadRROutput: c_int = 0;
529pub const BadRRCrtc: c_int = 1;
530pub const BadRRMode: c_int = 2;
531pub const BadRRProvider: c_int = 3;
532
533pub const RR_PROPERTY_BACKLIGHT: &str = "Backlight";
534pub const RR_PROPERTY_RANDR_EDID: &str = "EDID";
535pub const RR_PROPERTY_SIGNAL_FORMAT: &str = "SignalFormat";
536pub const RR_PROPERTY_SIGNAL_PROPERTIES: &str = "SignalProperties";
537pub const RR_PROPERTY_CONNECTOR_TYPE: &str = "ConnectorType";
538pub const RR_PROPERTY_CONNECTOR_NUMBER: &str = "ConnectorNumber";
539pub const RR_PROPERTY_COMPATIBILITY_LIST: &str = "CompatibilityList";
540pub const RR_PROPERTY_CLONE_LIST: &str = "CloneList";
541pub const RR_PROPERTY_BORDER: &str = "Border";
542pub const RR_PROPERTY_BORDER_DIMENSIONS: &str = "BorderDimensions";
543pub const RR_PROPERTY_GUID: &str = "GUID";
544pub const RR_PROPERTY_RANDR_TILE: &str = "TILE";
545
546pub const RR_Capability_None: c_int = 0;
547pub const RR_Capability_SourceOutput: c_int = 1;
548pub const RR_Capability_SinkOutput: c_int = 2;
549pub const RR_Capability_SourceOffload: c_int = 4;
550pub const RR_Capability_SinkOffload: c_int = 8;