2007-11-24 09:25:53 -07:00
|
|
|
|
The X Resize, Rotate and Reflect Extension
|
2010-04-24 13:55:27 -06:00
|
|
|
|
Version 1.3.1
|
|
|
|
|
2009-10-5
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Jim Gettys
|
|
|
|
|
Jim.Gettys@hp.com
|
|
|
|
|
Cambridge Research Laboratory
|
|
|
|
|
HP Labs
|
|
|
|
|
Hewlett Packard Company
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Keith Packard
|
|
|
|
|
keith.packard@intel.com
|
|
|
|
|
Open Source Technology Center
|
|
|
|
|
Intel Corporation
|
|
|
|
|
|
|
|
|
|
1. Introduction
|
|
|
|
|
|
|
|
|
|
The X Resize, Rotate and Reflect Extension, called RandR for short,
|
|
|
|
|
brings the ability to resize, rotate and reflect the root window of a
|
|
|
|
|
screen. It is based on the X Resize and Rotate Extension as specified
|
|
|
|
|
in the Proceedings of the 2001 Usenix Technical Conference [RANDR].
|
|
|
|
|
|
|
|
|
|
RandR as implemented and integrated into the X server differs in
|
|
|
|
|
one substantial fashion from the design discussed in that paper: that
|
|
|
|
|
is, RandR 1.0 does not implement the depth switching described in that
|
|
|
|
|
document, and the support described for that in the protocol in that
|
|
|
|
|
document and in the implementation has been removed from the
|
|
|
|
|
protocol described here, as it has been overtaken by events.
|
|
|
|
|
|
|
|
|
|
These events include:
|
|
|
|
|
► Modern toolkits (in this case, GTK+ 2.x) have progressed to the point
|
|
|
|
|
of implementing migration between screens of arbitrary depths
|
|
|
|
|
► The continued advance of Moore's law has made limited amounts of VRAM
|
|
|
|
|
less of an issue, reducing the pressure to implement depth switching
|
|
|
|
|
on laptops or desktop systems
|
|
|
|
|
► The continued decline of legacy toolkits whose design would have
|
|
|
|
|
required depth switching to support migration
|
2010-04-24 13:55:27 -06:00
|
|
|
|
► The lack of depth switching implementation experience in the
|
2007-11-24 09:25:53 -07:00
|
|
|
|
intervening time, due to events beyond our control
|
|
|
|
|
|
|
|
|
|
Additionally, the requirement to support depth switching might
|
|
|
|
|
complicate other re-engineering of the device independent part of the
|
|
|
|
|
X server that is currently being contemplated.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Rather than further delaying RandR's widespread deployment for a feature
|
|
|
|
|
long wanted by the community (resizing of screens, particularly on laptops),
|
|
|
|
|
or the deployment of a protocol design that might be flawed due to lack of
|
|
|
|
|
implementation experience, we decided to remove depth switching from the
|
|
|
|
|
protocol. It may be implemented at a later time if resources and
|
|
|
|
|
interests permit as a revision to the protocol described here, which will
|
|
|
|
|
remain a stable base for applications. The protocol described here has been
|
|
|
|
|
implemented in the main X.org server, and more fully in the hw/kdrive
|
|
|
|
|
implementation in the distribution, which fully implements resizing,
|
|
|
|
|
rotation and reflection.
|
|
|
|
|
|
|
|
|
|
1.2 Introduction to version 1.2 of the extension
|
|
|
|
|
|
|
|
|
|
One of the significant limitations found in version 1.1 of the RandR
|
|
|
|
|
protocol was the inability to deal with the Xinerama model where multiple
|
|
|
|
|
monitors display portions of a common underlying screen. In this environment,
|
|
|
|
|
zero or more video outputs are associated with each CRT controller which
|
|
|
|
|
defines both a set of video timings and a 'viewport' within the larger
|
|
|
|
|
screen. This viewport is independent of the overall size of the screen, and
|
2010-04-24 13:55:27 -06:00
|
|
|
|
may be located anywhere within the screen.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
The effect is to decouple the reported size of the screen from the size
|
|
|
|
|
presented by each video output, and to permit multiple outputs to present
|
|
|
|
|
information for a single screen.
|
|
|
|
|
|
|
|
|
|
To extend RandR for this model, we separate out the output, CRTC and screen
|
|
|
|
|
configuration information and permit them to be configured separately. For
|
|
|
|
|
compatibility with the 1.1 version of the protocol, we make the 1.1 requests
|
|
|
|
|
simultaneously affect both the screen and the (presumably sole) CRTC and
|
|
|
|
|
output. The set of available outputs are presented with UTF-8 encoded names
|
|
|
|
|
and may be connected to CRTCs as permitted by the underlying hardware. CRTC
|
|
|
|
|
configuration is now done with full mode information instead of just size
|
|
|
|
|
and refresh rate, and these modes have names. These names also use UTF-8
|
|
|
|
|
encoding. New modes may also be added by the user.
|
|
|
|
|
|
|
|
|
|
Additional requests and events are provided for this new functionality.
|
|
|
|
|
|
|
|
|
|
┌────────────────────────────────┬──────────┐
|
|
|
|
|
┏━━━━━━━┳───────────────┐ ╔════════╗ ╔════════╗
|
|
|
|
|
┃ 1 ┃ │ ║ A ║ ║ B ║
|
|
|
|
|
┃ ┏━━━╋━━━━━━━━━━━━━━━┫ ║ ║ ║ ║
|
|
|
|
|
┣━━━╋━━━┛ ┃ ╚════════╝ ╚════════╝
|
|
|
|
|
│ ┃ 2 ┃─────────────────┐
|
2010-04-24 13:55:27 -06:00
|
|
|
|
│ ┃ ┃ ╔═══════════════════╗
|
2007-11-24 09:25:53 -07:00
|
|
|
|
│ ┃ ┃ ║ ║
|
|
|
|
|
│ ┗━━━━━━━━━━━━━━━━━━━┫ ║ C ║
|
|
|
|
|
└───────────────────────┘ ║ ║
|
|
|
|
|
┌──────┐ ┏━━━━┓ ╔══════╗ ║ ║
|
|
|
|
|
│screen│ ┃CRTC┃ ║output║ ╚═══════════════════╝
|
|
|
|
|
└──────┘ ┗━━━━┛ ╚══════╝
|
|
|
|
|
|
|
|
|
|
In this picture, the screen is covered (incompletely) by two CRTCs. CRTC1
|
|
|
|
|
is connected to two outputs, A and B. CRTC2 is connected to output C.
|
|
|
|
|
Outputs A and B will present exactly the same region of the screen using
|
|
|
|
|
the same mode line. Output C will present a different (larger) region of
|
|
|
|
|
the screen using a different mode line.
|
|
|
|
|
|
|
|
|
|
RandR provides information about each available CRTC and output; the
|
|
|
|
|
connection between CRTC and output is under application control, although
|
|
|
|
|
the hardware will probably impose restrictions on the possible
|
|
|
|
|
configurations. The protocol doesn't try to describe these restrictions,
|
|
|
|
|
instead it provides a mechanism to find out what combinations are supported.
|
|
|
|
|
|
|
|
|
|
For instance, dual-link DVI gangs two CRTC outputs together to provide higher
|
|
|
|
|
bandwidth for large resolution screens. This is exposed in RandR by
|
|
|
|
|
requiring that nothing be connected to the second CRTC when driving a high
|
|
|
|
|
resolution screen on the first.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
1.3 Introduction to version 1.3 of the extension
|
|
|
|
|
|
|
|
|
|
Version 1.3 builds on the changes made with version 1.2 and adds some new
|
|
|
|
|
capabilities without fundmentally changing the extension again. The
|
|
|
|
|
following features are added in this version:
|
|
|
|
|
|
|
|
|
|
• Projective Transforms. The implementation work for general rotation
|
|
|
|
|
support made it trivial to add full projective transformations. These
|
|
|
|
|
can be used to scale the screen up/down as well as perform projector
|
|
|
|
|
keystone correct or other effects.
|
|
|
|
|
|
|
|
|
|
• Panning. It was removed with RandR 1.2 because the old semantics didn't
|
|
|
|
|
fit any longer. With RandR 1.3 panning can be specified per crtc.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
1.1 Acknowledgements
|
|
|
|
|
|
|
|
|
|
Our thanks to the contributors to the design found on the xpert mailing
|
|
|
|
|
list, in particular:
|
|
|
|
|
|
|
|
|
|
Alan Hourihane for work on the early implementation
|
|
|
|
|
Andrew C. Aitchison for help with the XFree86 DDX implementation
|
|
|
|
|
Andy Ritger for early questions about how mergefb/Xinerama work with RandR
|
|
|
|
|
Carl Worth for editing the specification and Usenix paper
|
|
|
|
|
David Dawes for XFree86 DDX integration work
|
|
|
|
|
Thomas Winischhofer for the hardware-accelerated SiS rotation implementation
|
|
|
|
|
Matthew Tippett and Kevin Martin for splitting outputs and CRTCs to more
|
|
|
|
|
fully expose what video hardware can do
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
2. Screen change model
|
|
|
|
|
|
|
|
|
|
Screens may change dynamically, either under control of this extension, or
|
|
|
|
|
due to external events. Examples include: monitors being swapped, pressing a
|
|
|
|
|
button to switch from internal display to an external monitor on a laptop,
|
|
|
|
|
or, eventually, the hotplug of a display card entirely on busses such as
|
|
|
|
|
Cardbus or Express Card which permit hot-swap (which will require other work
|
|
|
|
|
in addition to this extension).
|
|
|
|
|
|
|
|
|
|
Since the screen configuration is dynamic and asynchronous to the client and
|
|
|
|
|
may change at any time RandR provides mechanisms to ensure that your clients
|
|
|
|
|
view is up to date with the configuration possibilities of the moment and
|
|
|
|
|
enforces applications that wish to control the configuration to prove that
|
|
|
|
|
their information is up to date before honoring requests to change the
|
|
|
|
|
screen configuration (by requiring a timestamp on the request).
|
|
|
|
|
|
|
|
|
|
Interested applications are notified whenever the screen configuration
|
|
|
|
|
changes, providing the current size of the screen and subpixel order (see
|
|
|
|
|
the Render extension [RENDER]), to enable proper rendering of subpixel
|
|
|
|
|
decimated client text to continue, along with a time stamp of the
|
|
|
|
|
configuration change. A client must refresh its knowledge of the screen
|
|
|
|
|
configuration before attempting to change the configuration after a
|
|
|
|
|
notification, or the request will fail.
|
|
|
|
|
|
|
|
|
|
To avoid multiplicative explosion between orientation, reflection and sizes,
|
|
|
|
|
the sizes are only those sizes in the normal (0) rotation.
|
|
|
|
|
|
|
|
|
|
Rotation and reflection and how they interact can be confusing. In Randr,
|
|
|
|
|
the coordinate system is rotated in a counter-clockwise direction relative
|
|
|
|
|
to the normal orientation. Reflection is along the window system coordinate
|
|
|
|
|
system, not the physical screen X and Y axis, so that rotation and
|
|
|
|
|
reflection do not interact. The other way to consider reflection is to is
|
|
|
|
|
specified in the "normal" orientation, before rotation, if you find the
|
|
|
|
|
other way confusing.
|
|
|
|
|
|
|
|
|
|
We expect that most clients and toolkits will be oblivious to changes to the
|
|
|
|
|
screen structure, as they generally use the values in the connections Display
|
|
|
|
|
structure directly. By toolkits updating the values on the fly, we believe
|
|
|
|
|
pop-up menus and other pop up windows will position themselves correctly in
|
|
|
|
|
the face of screen configuration changes (the issue is ensuring that pop-ups
|
|
|
|
|
are visible on the reconfigured screen).
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
3. Data Types
|
|
|
|
|
|
|
|
|
|
The subpixel order is shared with the Render extension, and is documented
|
|
|
|
|
there. The only datatype defined is the screen size, defined in the normal
|
|
|
|
|
(0 degree) orientation.
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
4. Errors
|
|
|
|
|
|
|
|
|
|
Errors are sent using core X error reports.
|
|
|
|
|
|
|
|
|
|
Output
|
|
|
|
|
A value for an OUTPUT argument does not name a defined OUTPUT.
|
|
|
|
|
CRTC
|
|
|
|
|
A value for a CRTC argument does not name a defined CRTC.
|
|
|
|
|
Mode
|
|
|
|
|
A value for a MODE argument does not name a defined MODE.
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
5. Protocol Types
|
|
|
|
|
|
|
|
|
|
RRCONFIGSTATUS { Success
|
|
|
|
|
InvalidConfigTime
|
|
|
|
|
InvalidTime
|
|
|
|
|
Failed }
|
|
|
|
|
|
|
|
|
|
A value of type RRCONFIGSTATUS returned when manipulating the output
|
|
|
|
|
configuration or querying information from the server that has some
|
|
|
|
|
time-dependency.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
InvalidConfigTime indicates that the supplied configuration
|
|
|
|
|
timestamp does not match the current X server configuration
|
|
|
|
|
timestamp. Usually this means that the output configuration has
|
|
|
|
|
changed since the timestamp was received by the application.
|
|
|
|
|
|
|
|
|
|
InvalidTime indicates that the supplied output reconfiguration time
|
|
|
|
|
is earlier than the most recent output reconfiguration request.
|
|
|
|
|
Generally this indicates that another application has reconfigured
|
|
|
|
|
the output using a later timestamp.
|
|
|
|
|
|
|
|
|
|
Failed is returned whenever the operation is unsuccessful for some
|
|
|
|
|
other reason. This generally indicates that the requested output
|
|
|
|
|
configuration is unsupported by the hardware. The goal is to make
|
|
|
|
|
these limitations expressed by the protocol, but when that isn't
|
|
|
|
|
possible it is correct to return this error value. If, as a
|
|
|
|
|
implentor, you find this error code required, please submit the
|
|
|
|
|
hardware constraints that exist so that a future version of the
|
|
|
|
|
extension can correctly capture the configuration constraints in
|
|
|
|
|
your system.
|
|
|
|
|
|
|
|
|
|
ROTATION { Rotate_0
|
|
|
|
|
Rotate_90
|
|
|
|
|
Rotate_180
|
|
|
|
|
Rotate_270
|
|
|
|
|
Reflect_X
|
|
|
|
|
Reflect_Y }
|
|
|
|
|
|
|
|
|
|
These values are used both to indicate a set of allowed rotations
|
|
|
|
|
and reflections as well as to indicate a specific rotation and
|
|
|
|
|
reflection combination.
|
|
|
|
|
|
|
|
|
|
RRSELECTMASK { RRScreenChangeNotifyMask
|
|
|
|
|
RRCrtcChangeNotifyMask (New in version 1.2)
|
2010-04-24 13:55:27 -06:00
|
|
|
|
RROutputChangeNotifyMask (New in version 1.2)
|
2007-11-24 09:25:53 -07:00
|
|
|
|
RROutputPropertyNotifyMask (New in version 1.2) }
|
|
|
|
|
|
|
|
|
|
SIZEID { CARD16 }
|
|
|
|
|
|
|
|
|
|
MODE { XID or None }
|
|
|
|
|
|
|
|
|
|
CRTC { XID }
|
|
|
|
|
|
|
|
|
|
OUTPUT { XID }
|
|
|
|
|
|
|
|
|
|
CONNECTION { Connected, Disconnected, UnknownConnection }
|
|
|
|
|
|
|
|
|
|
This value provides an indication of whether an output is actually
|
|
|
|
|
connected to a monitor or other presentation device.
|
|
|
|
|
|
|
|
|
|
SUBPIXELORDER { SubPixelUnknown The subpixel order uses the Render
|
|
|
|
|
SubPixelHorizontalRGB extensions definitions; they are here
|
|
|
|
|
SubPixelHorizontalBGR only for convenience.
|
|
|
|
|
SubPixelVerticalRGB
|
|
|
|
|
SubPixelVerticalBGR
|
|
|
|
|
SubPixelNone }
|
|
|
|
|
|
|
|
|
|
SCREENSIZE { widthInPixels, heightInPixels: CARD16
|
|
|
|
|
widthInMillimeters, heightInMillimeters: CARD16 }
|
|
|
|
|
|
|
|
|
|
MODEFLAG { HSyncPositive
|
|
|
|
|
HSyncNegative
|
|
|
|
|
VSyncPositive
|
|
|
|
|
VSyncNegative
|
|
|
|
|
Interlace
|
|
|
|
|
DoubleScan
|
|
|
|
|
CSync
|
|
|
|
|
CSyncPositive
|
|
|
|
|
CSyncNegative
|
|
|
|
|
HSkewPresent
|
|
|
|
|
BCast
|
|
|
|
|
PixelMultiplex
|
|
|
|
|
DoubleClock
|
|
|
|
|
ClockDivideBy2 }
|
|
|
|
|
|
|
|
|
|
MODEINFO { id: MODE
|
|
|
|
|
name: STRING
|
|
|
|
|
width, height: CARD16
|
|
|
|
|
dotClock: CARD32
|
|
|
|
|
hSyncStart, hSyncEnd, hTotal, hSkew: CARD16
|
|
|
|
|
vSyncStart, vSyncEnd, vTotal: CARD16
|
|
|
|
|
modeFlags: SETofMODEFLAG }
|
|
|
|
|
|
|
|
|
|
REFRESH { rates: LISTofCARD16 }
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
6. Extension Initialization
|
|
|
|
|
|
|
|
|
|
The name of this extension is "RANDR".
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRQueryVersion
|
|
|
|
|
client-major-version: CARD32
|
|
|
|
|
client-minor-version: CARD32
|
|
|
|
|
▶
|
|
|
|
|
major-version: CARD32
|
|
|
|
|
minor-version: CARD32
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
The client sends the highest supported version to the server
|
|
|
|
|
and the server sends the highest version it supports, but no
|
|
|
|
|
higher than the requested version. Major versions changes can
|
|
|
|
|
introduce incompatibilities in existing functionality, minor
|
|
|
|
|
version changes introduce only backward compatible changes.
|
|
|
|
|
It is the clients responsibility to ensure that the server
|
|
|
|
|
supports a version which is compatible with its expectations.
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
7. Extension Requests
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSelectInput
|
|
|
|
|
window: WINDOW
|
|
|
|
|
enable: SETofRRSELECTMASK
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window, Value
|
|
|
|
|
|
|
|
|
|
If 'enable' is RRScreenChangeNotifyMask, RRScreenChangeNotify events
|
|
|
|
|
will be sent when the screen configuration changes, either from
|
|
|
|
|
this protocol extension, or due to detected external screen
|
|
|
|
|
configuration changes. RRScreenChangeNotify may also be sent when
|
|
|
|
|
this request executes if the screen configuration has changed since
|
|
|
|
|
the client connected, to avoid race conditions.
|
|
|
|
|
|
|
|
|
|
New for version 1.2:
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'enable' contains RRCrtcChangeMask, RRCrtcChangeNotify events
|
|
|
|
|
will be sent when a the configuration for a CRTC associated with the
|
|
|
|
|
screen changes, either through this protocol extension or due to
|
|
|
|
|
detected external changes. RRCrtcChangeNotify may also be sent when
|
|
|
|
|
this request executes if the CRTC configuration has changed since
|
2010-04-24 13:55:27 -06:00
|
|
|
|
the client connected, to avoid race conditions.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'enable' contains RROutputChangeMask, RROutputChangeNotify events
|
|
|
|
|
will be sent when a the configuration for an output associated with
|
|
|
|
|
the screen changes, either through this protocol extension or due to
|
|
|
|
|
detected external changes. RROutputChangeNotify may also be sent
|
|
|
|
|
when this request executes if the output configuration has changed
|
2010-04-24 13:55:27 -06:00
|
|
|
|
since the client connected, to avoid race conditions.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
If 'enable' contains RROutputPropertyNotifyMask,
|
|
|
|
|
RROutputPropertyNotify events will be sent when properties change on
|
|
|
|
|
this output.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRSetScreenConfig
|
|
|
|
|
window: WINDOW
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
size-id: SIZEID
|
|
|
|
|
rotation: ROTATION
|
|
|
|
|
rate: CARD16
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
new-timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
root: WINDOW
|
|
|
|
|
subpixelOrder: SUBPIXELORDER
|
|
|
|
|
└───
|
|
|
|
|
Errors: Value, Match
|
|
|
|
|
|
|
|
|
|
If 'timestamp' is less than the time when the configuration was last
|
|
|
|
|
successfully set, the request is ignored and InvalidTime returned in
|
|
|
|
|
status.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'config-timestamp' is not equal to when the server's screen
|
|
|
|
|
configurations last changed, the request is ignored and
|
|
|
|
|
InvalidConfigTime returned in status. This could occur if the
|
|
|
|
|
screen changed since you last made a RRGetScreenInfo request,
|
|
|
|
|
perhaps by a different piece of display hardware being installed.
|
|
|
|
|
Rather than allowing an incorrect call to be executed based on stale
|
|
|
|
|
data, the server will ignore the request.
|
|
|
|
|
|
|
|
|
|
'rate' contains the desired refresh rate. If it is zero, the server
|
|
|
|
|
selects an appropriate rate.
|
|
|
|
|
|
|
|
|
|
This request may fail for other indeterminate reasons, in which case
|
|
|
|
|
'status' will be set to Failed and no configuration change will be
|
|
|
|
|
made.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request sets the screen to the specified size, rate, rotation
|
|
|
|
|
and reflection.
|
|
|
|
|
|
|
|
|
|
When this request succeeds, 'status' contains Success and the
|
|
|
|
|
requested changes to configuration will have been made.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'new-time-stamp' contains the time at which this request was
|
|
|
|
|
executed.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'config-timestamp' contains the time when the possible screen
|
|
|
|
|
configurations were last changed.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'root' contains the root window for the screen indicated by the
|
|
|
|
|
window.
|
|
|
|
|
|
|
|
|
|
'subpixelOrder' contains the resulting subpixel order of the screen
|
|
|
|
|
to allow correct subpixel rendering.
|
|
|
|
|
|
|
|
|
|
Value errors are generated when 'rotation', 'rate' or 'size-id'
|
|
|
|
|
are invalid.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenInfo
|
|
|
|
|
window: WINDOW
|
2010-04-24 13:55:27 -06:00
|
|
|
|
▶
|
2007-11-24 09:25:53 -07:00
|
|
|
|
rotations: SETofROTATION
|
|
|
|
|
root: WINDOW
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
size-id: SIZEID
|
|
|
|
|
rotation: ROTATION
|
|
|
|
|
rate: CARD16
|
|
|
|
|
sizes: LISTofSCREENSIZE
|
|
|
|
|
refresh: LISTofREFRESH
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
|
|
|
|
RRGetScreenInfo returns information about the current and available
|
|
|
|
|
configurations for the screen associated with 'window'.
|
|
|
|
|
|
|
|
|
|
'rotations' contains the set of rotations and reflections supported
|
|
|
|
|
by the screen.
|
|
|
|
|
|
|
|
|
|
'root' is the root window of the screen.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'config-timestamp' indicates when the screen configuration
|
|
|
|
|
information last changed: requests to set the screen will fail
|
|
|
|
|
unless the timestamp indicates that the information the client
|
|
|
|
|
is using is up to date, to ensure clients can be well behaved
|
2010-04-24 13:55:27 -06:00
|
|
|
|
in the face of race conditions.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'size-id' indicates which size is active.
|
|
|
|
|
|
|
|
|
|
'rate' is the current refresh rate. This is zero when the refresh
|
|
|
|
|
rate is unknown or on devices for which refresh is not relevant.
|
|
|
|
|
|
|
|
|
|
'sizes' is the list of possible frame buffer sizes (at the normal
|
|
|
|
|
orientation. Each size indicates both the linear physical size of
|
|
|
|
|
the screen and the pixel size.
|
|
|
|
|
|
|
|
|
|
'refresh' is the list of refresh rates for each size. Each element
|
|
|
|
|
of 'sizes' has a corresponding element in 'refresh'. An empty list
|
|
|
|
|
indicates no known rates, or a device for which refresh is not
|
|
|
|
|
relevant.
|
|
|
|
|
|
|
|
|
|
The default size of the screen (the size that would become the
|
|
|
|
|
current size when the server resets) is the first size in the
|
|
|
|
|
list.
|
|
|
|
|
|
|
|
|
|
7.1. Extension Requests added in version 1.2 of the extension
|
|
|
|
|
|
|
|
|
|
As introduced above, version 1.2 of the extension splits the screen size
|
|
|
|
|
from the crtc and output configuration, permitting the subset of the screen
|
|
|
|
|
presented by multiple outputs to be configured. As a separate notion, the
|
|
|
|
|
size of the screen itself may be arbitrarily configured within a defined
|
|
|
|
|
range. As crtcs and outputs are added and removed from the system, the set
|
|
|
|
|
returned by the extension will change so that applications can detect
|
|
|
|
|
dynamic changes in the display environment.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenSizeRange
|
|
|
|
|
window: WINDOW
|
|
|
|
|
▶
|
|
|
|
|
CARD16 minWidth, minHeight
|
|
|
|
|
CARD16 maxWidth, maxHeight
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
|
|
|
|
Returns the range of possible screen sizes. The screen may be set to
|
|
|
|
|
any size within this range.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetScreenSize
|
|
|
|
|
window: WINDOW
|
|
|
|
|
width: CARD16
|
|
|
|
|
height: CARD16
|
|
|
|
|
width-in-millimeters: CARD32
|
|
|
|
|
height-in-millimeters: CARD32
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window, Match, Value
|
|
|
|
|
|
|
|
|
|
Sets the screen to the specified size. 'width' and 'height' must be
|
|
|
|
|
within the range allowed by GetScreenSizeRanges, otherwise a Value
|
|
|
|
|
error results. All active monitors must be configured to display a
|
|
|
|
|
subset of the specified size, else a Match error results.
|
|
|
|
|
|
|
|
|
|
'width-in-millimeters' and 'height-in-millimeters' can be set to
|
|
|
|
|
reflect the physical size of the screen reported both through this
|
|
|
|
|
extension and the core protocol. They must be non-zero, or Value
|
|
|
|
|
error results.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
If panning is enabled, the width and height of the panning and the
|
|
|
|
|
tracking areas are adapted to the new size and clamped afterwards.
|
|
|
|
|
Disabled panning axes remain disabled.
|
|
|
|
|
Panning borders are disabled if their requirements are no longer met
|
|
|
|
|
(see RRSetPanning).
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenResources
|
|
|
|
|
window: WINDOW
|
|
|
|
|
▶
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
crtcs: LISTofCRTC
|
|
|
|
|
outputs: LISTofOUTPUT
|
|
|
|
|
modes: LISTofMODEINFO
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
|
|
|
|
RRGetScreenResources returns the list of outputs and crtcs connected
|
|
|
|
|
to the screen associated with 'window'.
|
|
|
|
|
|
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'config-timestamp' indicates when the configuration information last
|
|
|
|
|
changed. Requests to configure the output will fail unless the
|
|
|
|
|
timestamp indicates that the information the client is using is up
|
|
|
|
|
to date, to ensure clients can be well behaved in the face of race
|
|
|
|
|
conditions.
|
|
|
|
|
|
|
|
|
|
'crtcs' contains the list of CRTCs associated with the screen.
|
|
|
|
|
|
|
|
|
|
'outputs' contains the list of outputs associated with the screen.
|
|
|
|
|
|
|
|
|
|
'modes' contains the list of modes associated with the screen
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request explicitly asks the server to ensure that the
|
|
|
|
|
configuration data is up-to-date wrt the hardware. If that requires
|
2009-05-02 09:19:40 -06:00
|
|
|
|
polling, this is when such polling would take place. If the
|
|
|
|
|
current configuration is all that's required, use
|
|
|
|
|
RRGetScreenResourcesCurrent instead.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputInfo
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
crtc: CRTC
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
name: STRING
|
|
|
|
|
connection: CONNECTION
|
|
|
|
|
subpixel-order: SUBPIXELORDER
|
|
|
|
|
widthInMillimeters, heightInMillimeters: CARD32
|
|
|
|
|
crtcs: LISTofCRTC
|
|
|
|
|
clones: LISTofOUTPUT
|
2009-05-02 09:19:40 -06:00
|
|
|
|
modes: LISTofMODE
|
2007-11-24 09:25:53 -07:00
|
|
|
|
num-preferred: CARD16
|
|
|
|
|
└───
|
|
|
|
|
Errors: Output
|
|
|
|
|
|
|
|
|
|
RRGetOutputInfo returns information about the current and available
|
2010-04-24 13:55:27 -06:00
|
|
|
|
configurations 'output'.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'config-timestamp' does not match the current configuration
|
|
|
|
|
timestamp (as returned by RRGetScreenResources), 'status' is set to
|
|
|
|
|
InvalidConfigTime and the remaining reply data is empty. Otherwise,
|
|
|
|
|
'status' is set to Success.
|
|
|
|
|
|
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'crtc' is the current source CRTC for video data, or Disabled if the
|
|
|
|
|
output is not connected to any CRTC.
|
|
|
|
|
|
|
|
|
|
'name' is a UTF-8 encoded string designed to be presented to the
|
|
|
|
|
user to indicate which output this is. E.g. "S-Video" or "DVI".
|
|
|
|
|
|
|
|
|
|
'connection' indicates whether the hardware was able to detect a
|
|
|
|
|
device connected to this output. If the hardware cannot determine
|
|
|
|
|
whether something is connected, it will set this to
|
|
|
|
|
UnknownConnection.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'subpixel-order' contains the resulting subpixel order of the
|
|
|
|
|
connected device to allow correct subpixel rendering.
|
|
|
|
|
|
|
|
|
|
'widthInMillimeters' and 'heightInMillimeters' report the physical
|
|
|
|
|
size of the displayed area. If unknown, or not really fixed (e.g.,
|
|
|
|
|
for a projector), these values are both zero.
|
|
|
|
|
|
|
|
|
|
'crtcs' is the list of CRTCs that this output may be connected to.
|
|
|
|
|
Attempting to connect this output to a different CRTC results in a
|
|
|
|
|
Match error.
|
|
|
|
|
|
|
|
|
|
'clones' is the list of outputs which may be simultaneously
|
|
|
|
|
connected to the same CRTC along with this output. Attempting to
|
|
|
|
|
connect this output with an output not in the 'clones' list
|
|
|
|
|
results in a Match error.
|
|
|
|
|
|
|
|
|
|
'modes' is the list of modes supported by this output. Attempting to
|
|
|
|
|
connect this output to a CRTC not using one of these modes results
|
|
|
|
|
in a Match error.
|
|
|
|
|
|
|
|
|
|
The first 'num-preferred' modes in 'modes' are preferred by the
|
|
|
|
|
monitor in some way; for fixed-pixel devices, this would generally
|
|
|
|
|
indicate which modes match the resolution of the output device.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRListOutputProperties
|
|
|
|
|
output:OUTPUT
|
|
|
|
|
▶
|
|
|
|
|
atoms: LISTof ATOM
|
|
|
|
|
└───
|
|
|
|
|
Errors: Output
|
|
|
|
|
|
|
|
|
|
This request returns the atoms of properties currently defined on
|
|
|
|
|
the output.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRQueryOutputProperty
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
property: ATOM
|
|
|
|
|
▶
|
|
|
|
|
pending: BOOL
|
|
|
|
|
range: BOOL
|
|
|
|
|
immutable: BOOL
|
|
|
|
|
valid-values: LISTofINT32
|
|
|
|
|
└───
|
|
|
|
|
Errors: Name, Atom, Output
|
|
|
|
|
|
|
|
|
|
If the specified property does not exist for the specified output,
|
|
|
|
|
then a Name error is returned.
|
|
|
|
|
|
|
|
|
|
If 'pending' is TRUE, changes made to property values with
|
|
|
|
|
RRChangeOutputProperty will be saved in the pending property value
|
|
|
|
|
and be automatically copied to the current value on the next
|
|
|
|
|
RRSetCrtcConfig request involving the named output. If 'pending' is
|
|
|
|
|
FALSE, changes are copied immediately.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'range' is TRUE, then the valid-values list will contain
|
|
|
|
|
precisely two values indicating the minimum and maximum allowed
|
|
|
|
|
values. If 'range' is FALSE, then the valid-values list will contain
|
|
|
|
|
the list of possible values; attempts to set other values will
|
|
|
|
|
result in a Value error.
|
|
|
|
|
|
|
|
|
|
If 'immutable' is TRUE, then the property configuration cannot be
|
|
|
|
|
changed by clients. Immutable properties are interpreted by the X
|
|
|
|
|
server.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRConfigureOutputProperty
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
property: ATOM
|
|
|
|
|
pending: BOOL
|
|
|
|
|
range: BOOL
|
|
|
|
|
valid-values: LISTofINT32
|
|
|
|
|
└───
|
|
|
|
|
Errors: Access, Name, Atom, Output
|
|
|
|
|
|
|
|
|
|
If the specified property is 'immutable', an Access error is
|
|
|
|
|
returned.
|
|
|
|
|
|
|
|
|
|
Otherwise, the configuration of the specified property is changed to
|
|
|
|
|
the values provided in this request.
|
|
|
|
|
|
|
|
|
|
If the specified property does not exist for the specified output,
|
|
|
|
|
it is created with an empty value and None type.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRChangeOutputProperty
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
property, type: ATOM
|
|
|
|
|
format: {8, 16, 32}
|
|
|
|
|
mode: { Replace, Prepend, Append }
|
|
|
|
|
data: LISTofINT8 or LISTofINT16 or LISTofINT32
|
|
|
|
|
└───
|
|
|
|
|
Errors: Alloc, Atom, Match, Value, Output
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request alters the value of the property for the specified
|
|
|
|
|
output. If the property is marked as a 'pending' property, only the
|
|
|
|
|
pending value of the property is changed. Otherwise, changes are
|
|
|
|
|
reflected in both the pending and current values of the property.
|
|
|
|
|
The type is uninterpreted by the server. The format specifies
|
|
|
|
|
whether the data should be viewed as a list of 8-bit, 16-bit, or
|
|
|
|
|
32-bit quantities so that the server can correctly byte-swap as
|
|
|
|
|
necessary.
|
|
|
|
|
|
|
|
|
|
If the mode is Replace, the previous property value is discarded.
|
|
|
|
|
If the mode is Prepend or Append, then the type and format must
|
|
|
|
|
match the existing property value (or a Match error results). If
|
|
|
|
|
the property is undefined, it is treated as defined with the correct
|
|
|
|
|
type and format with zero-length data.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
For Prepend, the data is tacked on to the beginning of the existing
|
|
|
|
|
data, and for Append, it is tacked on to the end of the existing data.
|
|
|
|
|
|
|
|
|
|
This request generates a OutputPropertyNotify
|
|
|
|
|
|
|
|
|
|
The lifetime of a property is not tied to the storing client.
|
|
|
|
|
Properties remain until explicitly deleted, until the output is
|
|
|
|
|
destroyed, or until server reset (see section 10).
|
|
|
|
|
|
|
|
|
|
The maximum size of a property is server-dependent and may vary
|
2010-04-24 13:55:27 -06:00
|
|
|
|
dynamically.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRDeleteOutputProperty
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
property: ATOM
|
|
|
|
|
└───
|
|
|
|
|
Errors: Atom, Output
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request deletes the property from the specified window if the
|
|
|
|
|
property exists and generates a OutputPropertyNotify event unless
|
|
|
|
|
the property does not exist.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputProperty
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
property: ATOM
|
|
|
|
|
type: ATOM or AnyPropertyType
|
|
|
|
|
long-offset, long-length: CARD32
|
|
|
|
|
delete: BOOL
|
|
|
|
|
pending: BOOL
|
|
|
|
|
▶
|
|
|
|
|
type: ATOM or None
|
|
|
|
|
format: {0, 8, 16, 32}
|
|
|
|
|
bytes-after: CARD32
|
|
|
|
|
value: LISTofINT8 or LISTofINT16 or LISTofINT32
|
|
|
|
|
└───
|
|
|
|
|
Errors: Atom, Value, Output
|
|
|
|
|
|
|
|
|
|
If the specified property does not exist for the specified output,
|
|
|
|
|
then the return type is None, the format and bytes-after are zero,
|
|
|
|
|
and the value is empty. The delete argument is ignored in this
|
2010-04-24 13:55:27 -06:00
|
|
|
|
case.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If the specified property exists but its type does not match the
|
|
|
|
|
specified type, then the return type is the actual type of the
|
|
|
|
|
property, the format is the actual format of the property (never
|
|
|
|
|
zero), the bytes-after is the length of the property in bytes (even
|
|
|
|
|
if the format is 16 or 32), and the value is empty. The delete
|
2010-04-24 13:55:27 -06:00
|
|
|
|
argument is ignored in this case.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If the specified property exists and either AnyPropertyType is
|
|
|
|
|
specified or the specified type matches the actual type of the
|
|
|
|
|
property, then the return type is the actual type of the property,
|
|
|
|
|
the format is the actual format of the property (never zero), and
|
|
|
|
|
the bytes-after and value are as follows, given:
|
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
N = actual length of the stored property in bytes
|
2007-11-24 09:25:53 -07:00
|
|
|
|
(even if the format is 16 or 32)
|
|
|
|
|
I = 4 × offset
|
|
|
|
|
T = N - I
|
|
|
|
|
L = MINIMUM(T, 4 × long-length)
|
|
|
|
|
A = N - (I + L)
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'pending' is true, and if the property holds a pending value,
|
|
|
|
|
then the value returned will be the pending value of the property
|
|
|
|
|
rather than the current value. The returned value starts at byte
|
|
|
|
|
index I in the property (indexing from 0), and its length in bytes
|
|
|
|
|
is L. However, it is a Value error if long-offset is given such
|
|
|
|
|
that L is negative. The value of bytes-after is A, giving the
|
|
|
|
|
number of trailing unread bytes in the stored property. If delete
|
|
|
|
|
is True and the bytes-after is zero, the property is also deleted
|
|
|
|
|
from the output, and a RROutputPropertyNotify event is generated.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRCreateMode
|
|
|
|
|
window: WINDOW
|
|
|
|
|
modeinfo: MODEINFO
|
|
|
|
|
▶
|
|
|
|
|
mode: MODE
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window, Name, Value
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'modeinfo' provides a new mode for outputs on the screen
|
|
|
|
|
associated with 'window'. If the name of 'modeinfo' names an
|
|
|
|
|
existing mode, a Name error is returned. If some parameter of the
|
|
|
|
|
mode is not valid in some other way, a Value error is returned.
|
|
|
|
|
|
|
|
|
|
The returned 'mode' provides the id for the mode.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRDestroyMode
|
|
|
|
|
mode: MODE
|
|
|
|
|
└───
|
|
|
|
|
Errors: Mode, Access
|
|
|
|
|
|
|
|
|
|
The user-defined 'mode' is destroyed. 'mode' must name a mode
|
|
|
|
|
defined with RRCreateMode, else an Match error is returned. If
|
|
|
|
|
'mode' is in use by some CRTC or Output, then an Access error is
|
|
|
|
|
returned.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRAddOutputMode
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
mode: MODE
|
|
|
|
|
└───
|
|
|
|
|
Errors: Output, Mode, Match
|
|
|
|
|
|
|
|
|
|
'output' indicates which output is to be configured.
|
|
|
|
|
|
|
|
|
|
'mode' specifies which mode to add. If 'mode' is not valid for
|
2010-04-24 13:55:27 -06:00
|
|
|
|
'output', then a Match error is generated.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
This request generates OutputChangeNotify events.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRDeleteOutputMode
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
mode: MODE
|
|
|
|
|
└───
|
|
|
|
|
Errors: Output, Mode
|
|
|
|
|
|
|
|
|
|
'output' indicates which output is to be configured.
|
|
|
|
|
|
|
|
|
|
'mode' specifies which mode to delete. 'mode' must have been added
|
|
|
|
|
with RRAddOutputMode, else an Access error is returned. 'mode' must
|
|
|
|
|
not be active, else a Match error is returned.
|
|
|
|
|
|
|
|
|
|
This request generates OutputChangeNotify events.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcInfo
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
x, y: INT16
|
|
|
|
|
width, height: CARD16
|
|
|
|
|
mode: MODE
|
|
|
|
|
rotation: ROTATION
|
|
|
|
|
outputs: LISTofOUTPUT
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
rotations: SETofROTATION
|
|
|
|
|
possible-outputs: LISTofOUTPUT
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
|
|
|
|
RRGetCrtcModes returns information about the current and available
|
|
|
|
|
configurations for the specified crtc connected to the screen
|
|
|
|
|
associated with 'window'.
|
|
|
|
|
|
|
|
|
|
If 'config-timestamp' does not match the current configuration
|
|
|
|
|
timestamp (as returned by RRGetScreenResources), 'status' is set to
|
|
|
|
|
InvalidConfigTime and the remaining reply data is empty. Otherwise,
|
|
|
|
|
'status' is set to Success.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'x' and 'y' indicate the position of this CRTC within the screen
|
|
|
|
|
region. They will be set to 0 when the CRTC is disabled.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
'width' and 'height' indicate the size of the area within the screen
|
|
|
|
|
presented by this CRTC. This may be different than the size of the
|
2010-04-24 13:55:27 -06:00
|
|
|
|
mode due to rotation. They will be set to 0 when the CRTC
|
|
|
|
|
is disabled.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'mode' indicates which mode is active, or None indicating that the
|
|
|
|
|
CRTC has been disabled and is not displaying the screen contents.
|
|
|
|
|
|
|
|
|
|
'rotation' indicates the active rotation. It is set to Rotate_0
|
|
|
|
|
when the CRTC is disabled.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'outputs' is the list of outputs currently connected to this CRTC
|
|
|
|
|
and is empty when the CRTC is disabled.
|
|
|
|
|
|
|
|
|
|
'rotations' contains the set of rotations and reflections supported
|
|
|
|
|
by the CRTC.
|
|
|
|
|
|
|
|
|
|
'possible-outputs' lists all of the outputs which may be connected
|
|
|
|
|
to this CRTC.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcConfig
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
x, y: INT16
|
|
|
|
|
mode: MODE
|
|
|
|
|
rotation: ROTATION
|
|
|
|
|
outputs: LISTofOUTPUT
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
new-timestamp: TIMESTAMP
|
|
|
|
|
└───
|
|
|
|
|
Errors: Value, Match
|
|
|
|
|
|
|
|
|
|
If 'timestamp' is less than the time when the configuration was last
|
|
|
|
|
successfully set, the request is ignored and InvalidTime returned in
|
|
|
|
|
status.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'config-timestamp' is not equal to when the monitor's
|
|
|
|
|
configuration last changed, the request is ignored and
|
|
|
|
|
InvalidConfigTime returned in status. This could occur if the
|
|
|
|
|
monitor changed since you last made a RRGetScreenInfo request,
|
|
|
|
|
perhaps by a different monitor being connected to the machine.
|
|
|
|
|
Rather than allowing an incorrect call to be executed based on stale
|
|
|
|
|
data, the server will ignore the request.
|
|
|
|
|
|
|
|
|
|
'x' and 'y' contain the desired location within the screen for this
|
|
|
|
|
monitor's content. 'x' and 'y' must be within the screen size, else
|
|
|
|
|
a Value error results.
|
|
|
|
|
|
|
|
|
|
'mode' is either the desired mode or None indicating the CRTC should
|
|
|
|
|
be disabled. If 'mode' is not one of these values, a Value
|
|
|
|
|
error results. 'mode' must be valid for all of the configured outputs,
|
|
|
|
|
else a Match error.
|
|
|
|
|
|
|
|
|
|
'rotation' contains the desired rotation along with which
|
|
|
|
|
reflections should be enabled. The rotation and reflection values
|
|
|
|
|
must be among those allowed for this monitor, else a Value error
|
|
|
|
|
results.
|
|
|
|
|
|
|
|
|
|
'outputs' contains the set of outputs that this CRTC should be
|
|
|
|
|
connected to. The set must be among the list of acceptable output
|
2010-04-24 13:55:27 -06:00
|
|
|
|
sets for this CRTC or a Match error results.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
If 'mode' is None, then 'outputs' must be empty, else a Match error
|
|
|
|
|
results. Conversely, if 'mode' is not None, then 'outputs' must not be
|
|
|
|
|
empty, else a Match error results.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request may fail for other indeterminate reasons, in which case
|
|
|
|
|
'status' will be set to Failed and no configuration change will be
|
|
|
|
|
made.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request sets the CRTC to the specified position, mode, rotation
|
|
|
|
|
and reflection. The entire area of the CRTC must fit within the
|
|
|
|
|
screen size, else a Match error results. As an example, rotating the
|
|
|
|
|
screen so that a single CRTC fills the entire screen before and
|
|
|
|
|
after may necessitate disabling the CRTC, resizing the screen,
|
|
|
|
|
then re-enabling the CRTC at the new configuration to avoid an
|
|
|
|
|
invalid intermediate configuration.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
If panning is enabled, the width and height of the panning and the
|
|
|
|
|
tracking areas are clamped to the new mode size.
|
|
|
|
|
Disabled panning axes remain disabled.
|
|
|
|
|
Panning borders are disabled if their requirements are no longer met
|
|
|
|
|
(see RRSetPanning).
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
When this request succeeds, 'status' contains Success and the
|
|
|
|
|
requested changes to configuration will have been made.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
'new-time-stamp' contains the time at which this request was
|
|
|
|
|
executed.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcGammaSize
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
▶
|
|
|
|
|
size: CARD16
|
|
|
|
|
└───
|
|
|
|
|
Errors: Crtc
|
|
|
|
|
|
|
|
|
|
This request returns the size of the gamma ramps used by 'crtc'.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcGamma
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
▶
|
|
|
|
|
red: LISTofCARD16
|
|
|
|
|
green: LISTofCARD16
|
|
|
|
|
blue: LISTofCARD16
|
2010-04-24 13:55:27 -06:00
|
|
|
|
└───
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Errors: Crtc
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request returns the currently set gamma ramps for 'crtc'. All
|
|
|
|
|
three lists will be the size returned by the RRGetCrtcGammaSize
|
|
|
|
|
request.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcGamma
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
red: LISTofCARD16
|
|
|
|
|
green: LISTofCARD16
|
|
|
|
|
blue: LISTofCARD16
|
|
|
|
|
└───
|
|
|
|
|
Errors: Crtc, Match
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
This request sets the gamma ramps for 'crtc'. All three lists
|
|
|
|
|
must be the size returned by RRGetCrtcGammaSize else a Value error
|
|
|
|
|
results.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
7.2. Extension Requests added in version 1.3 of the extension
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenResourcesCurrent
|
|
|
|
|
window: WINDOW
|
|
|
|
|
▶
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
config-timestamp: TIMESTAMP
|
|
|
|
|
crtcs: LISTofCRTC
|
|
|
|
|
outputs: LISTofOUTPUT
|
|
|
|
|
modes: LISTofMODEINFO
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
|
|
|
|
RRGetScreenResourcesCurrent returns the list of outputs and crtcs
|
|
|
|
|
connected to the screen associated with 'window'.
|
|
|
|
|
|
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
'config-timestamp' indicates when the configuration information last
|
|
|
|
|
changed. Requests to configure the output will fail unless the
|
|
|
|
|
timestamp indicates that the information the client is using is up
|
|
|
|
|
to date, to ensure clients can be well behaved in the face of race
|
|
|
|
|
conditions.
|
|
|
|
|
|
|
|
|
|
'crtcs' contains the list of CRTCs associated with the screen.
|
|
|
|
|
|
|
|
|
|
'outputs' contains the list of outputs associated with the screen.
|
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
'modes' contains the list of modes associated with the screen.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
Unlike RRGetScreenResources, this merely returns the current
|
|
|
|
|
configuration, and does not poll for hardware changes.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcTransform
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
transform: TRANSFORM
|
|
|
|
|
filter: STRING8
|
|
|
|
|
values: LISTofFIXED
|
|
|
|
|
└───
|
|
|
|
|
Errors: Crtc, Match
|
|
|
|
|
|
|
|
|
|
This request provides a mechanism that is more general than the
|
|
|
|
|
existing rotation and reflection values for describing the
|
|
|
|
|
transformation from frame buffer image to crtc presentation.
|
|
|
|
|
'transform' is a full 2D projective transformation from screen
|
|
|
|
|
coordinate space to crtc coordinate space. This transformation is
|
|
|
|
|
applied before the rotation and reflection values to compute the
|
|
|
|
|
complete transform.
|
|
|
|
|
|
|
|
|
|
'filter' and 'values' specify a Render filter that may be used by the
|
|
|
|
|
server when transforming data from frame buffer to crtc.
|
|
|
|
|
|
|
|
|
|
This request sets the transform to be used at the next
|
|
|
|
|
RRSetCrtcConfig request execution; it does not cause any change to
|
|
|
|
|
occur in the current configuration.
|
|
|
|
|
|
|
|
|
|
When a non-identity transformation is in use, the rectangle returned
|
|
|
|
|
by RRGetCrtcInfo defines the bounding rectangle of the screen that is
|
|
|
|
|
projected to the crtc. It is this projected rectangle which must be
|
|
|
|
|
within the area of the screen when the mode is set.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcTransform
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
▶
|
|
|
|
|
pending-transform: TRANSFORM
|
|
|
|
|
pending-filter: STRING8
|
|
|
|
|
pending-values: LISTofFIXED
|
|
|
|
|
current-transform: TRANSFORM
|
|
|
|
|
current-filter: STRING8
|
|
|
|
|
current-values: LISTofFIXED
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
This request returns the pending and current transforms for the
|
|
|
|
|
specified CRTC. The pending transform will be the same as the current
|
|
|
|
|
transform if no new pending transform has been set since the last call
|
|
|
|
|
to RRSetCrtcConfig.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetPanning
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
left, top, width, height: CARD16
|
|
|
|
|
track_left, track_top, track_width, track_height: CARD16
|
|
|
|
|
border_left, border_top, border_right, border_bottom: INT16
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
Errors: Crtc
|
|
|
|
|
|
|
|
|
|
Version 1.3 adds panning support again. If multiple crtcs are active
|
|
|
|
|
the panning behavior can be defined per crtc individually.
|
|
|
|
|
RRGetPanning returns information about the currently set panning
|
|
|
|
|
configuration for the specified crtc. If the CRTC does not support
|
|
|
|
|
panning, all fields (except timestamp) will be 0.
|
|
|
|
|
|
|
|
|
|
'timestamp' indicates when the configuration was last set.
|
|
|
|
|
|
|
|
|
|
All other entries are explained for RRSetPanning.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetPanning
|
|
|
|
|
crtc: CRTC
|
|
|
|
|
timestamp: TIMESTAMP
|
|
|
|
|
left, top, width, height: CARD16
|
|
|
|
|
track_left, track_top, track_width, track_height: CARD16
|
|
|
|
|
border_left, border_top, border_right, border_bottom: INT16
|
|
|
|
|
▶
|
|
|
|
|
status: RRCONFIGSTATUS
|
|
|
|
|
new-timestamp: TIMESTAMP
|
|
|
|
|
└───
|
|
|
|
|
Errors: Crtc, Match
|
|
|
|
|
|
|
|
|
|
This request sets the panning parameters. As soon as panning is
|
|
|
|
|
enabled, the CRTC position can change with every pointer move.
|
|
|
|
|
RRCrtcChangeNotify events are sent to the clients requesting those.
|
|
|
|
|
|
|
|
|
|
If 'timestamp' is less than the time when the configuration was last
|
|
|
|
|
successfully set, the request is ignored and InvalidTime returned in
|
|
|
|
|
status.
|
|
|
|
|
|
|
|
|
|
┌──┳━━━━━━━━━━━━━━┳─────┬ ─ ─ ─ ─ ─ ┐
|
|
|
|
|
│ ┃ CRTC ┃ │
|
|
|
|
|
│ ┃ ┃ │ │
|
|
|
|
|
│ ┃ X┃→ │
|
|
|
|
|
│ ┃ ┃ │ │ framebuffer
|
|
|
|
|
│ ┗━━━━━━━━━━━━━━┛ │
|
|
|
|
|
│ │ │
|
|
|
|
|
│panning area │
|
|
|
|
|
└───────────────────────┴ ─ ─ ─ ─ ─ ┘
|
|
|
|
|
|
|
|
|
|
'left', 'top', 'width', and 'height' contain the total panning area
|
|
|
|
|
for this CRTC. 'width' has to be larger than or equal to the CRTC's
|
|
|
|
|
width or 0, and 'left'+'width' must be within the screen size, else a
|
|
|
|
|
Match error results. Equivalent restrictions for the height exist.
|
|
|
|
|
'width' or 'height' set to 0 indicate that panning should be disabled
|
|
|
|
|
on the according axis. Setting 'width'/'height' to the CRTC's
|
|
|
|
|
width/height will disable panning on the X/Y axis as well, but
|
|
|
|
|
RRSetScreenSize will silently enable panning if the screen size is
|
|
|
|
|
increased. This does not happen if set to 0.
|
|
|
|
|
|
|
|
|
|
┌────────┳━━━━━━━━━━━━━━┳ ─ ─ ─ ─ ─ ┐
|
|
|
|
|
│ ┃ CRTC ┃
|
|
|
|
|
│ ┃ ┃ │
|
|
|
|
|
│ ┃ ┃
|
|
|
|
|
│ ┃ ┃ │ tracking area
|
|
|
|
|
│ ┗━━━━━━━━━━━━━━┫ X
|
|
|
|
|
│ ↓ │ ↓ │
|
|
|
|
|
│panning area │
|
|
|
|
|
└───────────────────────┴ ─ ─ ─ ─ ─ ┘
|
|
|
|
|
|
|
|
|
|
'track_left', 'track_top', 'track_width', and 'track_height' contain
|
|
|
|
|
the pointer area for which the panning region is updated. For normal
|
|
|
|
|
use cases it should enclose the panning area minus borders, and is
|
|
|
|
|
typically set to either the panning area minus borders, or to the
|
|
|
|
|
total screen size. If set to the total screen size, the CRTC will pan
|
|
|
|
|
in the remaining axis even if the pointer is outside the panning area
|
|
|
|
|
on a different CRTC, as shown in the figure above. If the pointer is
|
|
|
|
|
outside the tracking area, the CRTC will not pan. Zero can be used as
|
|
|
|
|
an alias for the total screen size.
|
|
|
|
|
|
|
|
|
|
┌──┳━━━━━━━━━━━━━━┳────────────┐
|
|
|
|
|
│ ┃ CRTC ┃ │
|
|
|
|
|
│ ┃ ┃ │
|
|
|
|
|
│ ┃ ┃→ │
|
|
|
|
|
│ ┃ X←→┃ │
|
|
|
|
|
│ ┃ border_right │
|
|
|
|
|
│ ┗━━━━━━━━━━━━━━┛ │
|
|
|
|
|
│ │
|
|
|
|
|
│panning area │
|
|
|
|
|
└──────────────────────────────┘
|
|
|
|
|
|
|
|
|
|
'border_left', 'border_top', 'border_right', and 'border_bottom'
|
|
|
|
|
define the distances from the CRTC borders that will activate panning
|
|
|
|
|
if the pointer hits them. If the borders are 0, the screen will pan
|
|
|
|
|
when the pointer hits the CRTC borders (behavior of pre-RandR Xserver
|
|
|
|
|
panning). If the borders are positive, the screen will pan when the
|
|
|
|
|
pointer gets close to the CRTC borders, if they are negative, the
|
|
|
|
|
screen will only pan when the pointer is already way past the CRTC
|
|
|
|
|
borders. Negative values might confuse users and disable panning to
|
|
|
|
|
the very edges of the screen. Thus they are discouraged.
|
|
|
|
|
border_left + border_right has to be lower or equal than the CRTC's
|
|
|
|
|
width, else a Match error results. An equivalent restriction for the
|
|
|
|
|
height exists.
|
|
|
|
|
|
|
|
|
|
Screen size changes update the panning and the tracking areas to the
|
|
|
|
|
new size. Both screen size changes and mode changes clamp these areas
|
|
|
|
|
to the current CRTC size. In these cases panning borders are disabled
|
|
|
|
|
if their requirements are no longer met.
|
|
|
|
|
|
|
|
|
|
When this request succeeds, 'status' contains Success and the
|
|
|
|
|
requested changes to configuration will have been made.
|
|
|
|
|
|
|
|
|
|
'new-time-stamp' contains the time at which this request was
|
|
|
|
|
executed.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetOutputPrimary
|
|
|
|
|
window: WINDOW
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
└───
|
|
|
|
|
Errors: Match, Output, Window
|
|
|
|
|
|
|
|
|
|
RRSetOutputPrimary marks 'output' as the primary output for the
|
|
|
|
|
screen with the same root window as 'window'. This output's CRTC
|
|
|
|
|
will be sorted to the front of the list in Xinerama and RANDR
|
|
|
|
|
geometry requests for the benefit of older applications. The
|
|
|
|
|
default primary output is None, and None is a legal value to pass
|
|
|
|
|
to RRSetOutputPrimary. This request is expected to be used by
|
|
|
|
|
desktop environments to mark the screen that should hold the primary
|
|
|
|
|
menu bar or panel.
|
|
|
|
|
|
|
|
|
|
As this changes the logical layout of the screen, ConfigureNotify
|
|
|
|
|
and RRScreenChangeNotify will be generated on the appropriate root
|
|
|
|
|
window when the primary output is changed by this call. This request
|
|
|
|
|
also generates RROutputChangeNotify events on the outputs that gained
|
|
|
|
|
and lost primary status.
|
|
|
|
|
|
|
|
|
|
If an output is disconnected asynchronously (eg. due to recabling),
|
|
|
|
|
the primary status does not change, but RROutputChangeNotify events
|
|
|
|
|
will be generated if the hardware is capable of detecting this;
|
|
|
|
|
clients are expected to reconfigure if appropriate.
|
|
|
|
|
|
|
|
|
|
If an output is deleted (eg. due to device hotplug), the server will
|
|
|
|
|
act as though None was passed to RRSetOutputPrimary, including
|
|
|
|
|
generating the appropriate events.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputPrimary
|
|
|
|
|
window: WINDOW
|
|
|
|
|
▶
|
|
|
|
|
output: OUTPUT
|
|
|
|
|
└───
|
|
|
|
|
Errors: Window
|
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
RRGetOutputPrimary returns the primary output for the screen.
|
2009-05-02 09:19:40 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
8. Extension Events
|
|
|
|
|
|
|
|
|
|
Clients MAY select for ConfigureNotify on the root window to be
|
|
|
|
|
informed of screen changes. This may be advantageous if all your
|
|
|
|
|
client needs to know is the size of the root window, as it avoids
|
|
|
|
|
round trips to set up the extension.
|
|
|
|
|
|
|
|
|
|
RRScreenChangeNotify is sent if RRSelectInput has requested it
|
|
|
|
|
whenever properties of the screen change, which may be due to external
|
|
|
|
|
factors, such as re-cabling a monitor, etc.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRScreenChangeNotify
|
|
|
|
|
|
|
|
|
|
rotation: ROTATION; new rotation
|
|
|
|
|
sequenceNumber: CARD16 low 16 bits of request seq. number
|
|
|
|
|
timestamp: TIMESTAMP time screen was changed
|
|
|
|
|
configTimestamp: TIMESTAMP time config data was changed
|
|
|
|
|
root: WINDOW root window of screen
|
|
|
|
|
window: WINDOW window requesting notification
|
2009-05-02 09:19:40 -06:00
|
|
|
|
size-id: SIZEID index of new SCREENSIZE
|
2007-11-24 09:25:53 -07:00
|
|
|
|
subpixelOrder: SUBPIXELORDER order of subpixels
|
2009-05-02 09:19:40 -06:00
|
|
|
|
widthInPixels: CARD16 width in pixels of the new SCREENSIZE
|
|
|
|
|
heightInPixels: CARD16 height in pixels of the new SCREENSIZE
|
|
|
|
|
widthInMillimeters: CARD16 width in mm of the new SCREENSIZE
|
|
|
|
|
heightInMillimeters: CARD16 height in mm of the new SCREENSIZE
|
2007-11-24 09:25:53 -07:00
|
|
|
|
└───
|
|
|
|
|
This event is generated whenever the screen configuration is changed
|
|
|
|
|
and sent to requesting clients. 'timestamp' indicates when the
|
|
|
|
|
screen configuration was changed. 'configTimestamp' says when the
|
|
|
|
|
last time the configuration was changed. 'root' is the root of the
|
|
|
|
|
screen the change occurred on, 'window' is window selecting for this
|
|
|
|
|
event. 'size-id' contains the index of the current size.
|
|
|
|
|
|
|
|
|
|
This event is sent whenever the screen's configuration changes
|
|
|
|
|
or if a new screen configuration becomes available that was
|
|
|
|
|
not available in the past. In this case (config-timestamp in
|
|
|
|
|
the event not being equal to the config-timestamp returned in
|
|
|
|
|
the last call to RRGetScreenInfo), the client MUST call
|
|
|
|
|
RRGetScreenInfo to update its view of possible screen
|
|
|
|
|
configurations to have a correct view of possible screen
|
|
|
|
|
organizations.
|
|
|
|
|
|
|
|
|
|
Clients which select screen change notification events may be
|
|
|
|
|
sent an event immediately if the screen configuration was
|
|
|
|
|
changed between when they connected to the X server and
|
|
|
|
|
selected for notification. This is to prevent a common race
|
|
|
|
|
that might occur on log-in, where many applications start up
|
|
|
|
|
just at the time when a display manager or log in script might
|
|
|
|
|
be changing the screen size or configuration.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
Note that the sizes in this event reflect the new SCREENSIZE and
|
|
|
|
|
thus will appear rotated by the 'rotation' parameter from the sizes
|
|
|
|
|
of the screen itself. In other words, when rotation is 90 or 270,
|
|
|
|
|
widthInPixels in this event will be the same as the height value
|
|
|
|
|
from a ConfigureNotify that reflects the same size change. This
|
|
|
|
|
will probably confuse developers.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
8.1 Events added in version 1.2 of the RandR extension
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RROutputChangeNotify:
|
|
|
|
|
timestamp: TIMESTAMP time screen was reconfigured
|
|
|
|
|
config-timestamp: TIMESTAMP time available config data was changed
|
|
|
|
|
window: WINDOW window requesting notification
|
|
|
|
|
output: OUTPUT output affected by change
|
|
|
|
|
crtc: CRTC connected CRTC or None
|
|
|
|
|
mode: MODE mode in use on CRTC or None
|
|
|
|
|
connection: CONNECTION connection status
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
This event is generated whenever the available output configurations
|
|
|
|
|
have changed and is sent to requesting clients. 'timestamp'
|
|
|
|
|
indicates when the crtc configuration was changed by a client.
|
|
|
|
|
'config-timestamp' says when the last time the available
|
|
|
|
|
configurations changed. 'root' is the root of the screen the change
|
|
|
|
|
occurred on, 'window' is window selecting for this event. The
|
|
|
|
|
precise change can be detected by examining the new state of the
|
|
|
|
|
system.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RROutputPropertyNotify:
|
|
|
|
|
window: WINDOW window requesting notification
|
|
|
|
|
output: OUTPUT output affected by change
|
|
|
|
|
atom: ATOM affected property
|
|
|
|
|
time: TIMESTAMP time property was changed
|
|
|
|
|
subpixel-order: SUBPIXELORDER order of subpixels
|
|
|
|
|
state: { NewValue, Deleted } new property state
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
This event is reported to clients selecting RROutputPropertyChange
|
|
|
|
|
on the window and is generated with state NewValue when a property
|
|
|
|
|
of the window is changed using RRChangeOutputProperty even when
|
|
|
|
|
adding zero-length data and when replacing all or part of a property
|
|
|
|
|
with identical data. It is generated with state Deleted when a
|
|
|
|
|
property of the window is deleted using either
|
|
|
|
|
RRDeleteOutputProperty or RRGetOutputProperty. The timestamp
|
|
|
|
|
indicates the server time when the property was changed.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRCrtcChangeNotify
|
|
|
|
|
timestamp: TIMESTAMP time monitor was changed
|
|
|
|
|
window: WINDOW window requesting notification
|
|
|
|
|
crtc: CRTC CRTC which changed
|
|
|
|
|
mode: MODE new mode
|
|
|
|
|
rotation: ROTATION; new rotation
|
|
|
|
|
x: INT16 x position of CRTC within screen
|
|
|
|
|
y: INT16 y position of CRTC within screen
|
2009-05-02 09:19:40 -06:00
|
|
|
|
width: CARD16 width of new mode
|
|
|
|
|
height: CARD16 height of new mode
|
2007-11-24 09:25:53 -07:00
|
|
|
|
└───
|
|
|
|
|
This event is generated whenever the CRTC configuration is changed
|
|
|
|
|
and sent to requesting clients. 'timestamp' indicates when the
|
2009-05-02 09:19:40 -06:00
|
|
|
|
CRTC configuration was changed. 'window' is window selecting for this
|
|
|
|
|
event. 'mode' is the new mode, or None if the crtc is disabled.
|
|
|
|
|
'x' and 'y' mark the location in the screen where this CRTC
|
|
|
|
|
is reading data. 'width' and 'height' indicate the size of the
|
|
|
|
|
mode. 'x', 'y, 'width' and 'height' are all zero when 'mode' is None.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
This event is sent whenever the monitor's configuration changes
|
|
|
|
|
or if a new monitor configuration becomes available that was
|
2009-05-02 09:19:40 -06:00
|
|
|
|
not available in the past. In this case, the client MUST call
|
2007-11-24 09:25:53 -07:00
|
|
|
|
RRGetCrtcModes to update its view of possible monitor
|
|
|
|
|
configurations to have a correct view of possible monitor
|
|
|
|
|
organizations.
|
|
|
|
|
|
|
|
|
|
Clients which select monitor change notification events may be
|
|
|
|
|
sent an event immediately if the monitor configuration was
|
|
|
|
|
changed between when they connected to the X server and
|
|
|
|
|
selected for notification. This is to prevent a common race
|
|
|
|
|
that might occur on log-in, where many applications start up
|
|
|
|
|
just at the time when a display manager or log in script might
|
|
|
|
|
be changing the monitor size or configuration.
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
9. Properties
|
|
|
|
|
|
|
|
|
|
Properties are used for output specific parameters, and for announcing
|
|
|
|
|
static or rarely changing data. Announced data is typically
|
|
|
|
|
immutable. Properties are also used for evaluating new parameters
|
|
|
|
|
before adding them to the RandR protocol.
|
|
|
|
|
|
|
|
|
|
The following properties are hereby declared official, and drivers SHOULD
|
|
|
|
|
prefix driver specific properties with '_', unless they are planned to be
|
|
|
|
|
added to this specification. List values, that are not declared by the table
|
|
|
|
|
below, and will remain driver specific or are not planned to be added to this
|
|
|
|
|
specification, SHOULD be prefixed with "_" as well in order to avoid name
|
|
|
|
|
space or semantics clashes with future extensions of these values.
|
|
|
|
|
|
|
|
|
|
Beginning with version 1.3 of the RandR extension, certain properties
|
|
|
|
|
are mandatory and MUST be provided by implementations. Earlier
|
|
|
|
|
versions of the RandR extension MAY provide these properties as well,
|
|
|
|
|
as long as the semantics are not altered. Clients SHOULD fall back
|
|
|
|
|
gracefully to lower version functionality, though, if the driver
|
|
|
|
|
doesn't handle a mandatory property correctly.
|
|
|
|
|
|
|
|
|
|
9.1 Known properties
|
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
"Backlight" aka RR_PROPERTY_BACKLIGHT
|
|
|
|
|
Type: int32
|
|
|
|
|
Flags: -
|
|
|
|
|
Range/List: 0-x (driver specific)
|
|
|
|
|
|
|
|
|
|
This property controls the brightness on laptop panels and equivalent
|
|
|
|
|
displays with a backlight controller. The driver specific maximum
|
|
|
|
|
value MUST turn the backlight to full brightness, 1 SHOULD turn the
|
|
|
|
|
backlight to minimum brightness, 0 SHOULD turn the backlight off.
|
|
|
|
|
|
|
|
|
|
"CloneList" aka RR_PROPERTY_CLONE_LIST
|
|
|
|
|
Type: int32 [2*n] / Atom pairs
|
|
|
|
|
Flags: Immutable
|
|
|
|
|
Range/List: 0-
|
|
|
|
|
|
|
|
|
|
Some combinations of outputs on some cards cannot be served
|
|
|
|
|
independently from each other, because they are wired up to the same
|
|
|
|
|
encoder outputs.
|
|
|
|
|
This property lists all output + signal format pairs that are
|
|
|
|
|
driven together with this output, and thus can only be programmed in
|
|
|
|
|
clone mode with the same CRTC.
|
|
|
|
|
This property MUST be symmetric, but may change with changing signal
|
|
|
|
|
format. I.e. if the property for DVI-1/VGA specifies VGA-1/VGA to be
|
|
|
|
|
cloned, VGA-1/VGA has to list DVI-1/VGA as well.
|
|
|
|
|
Outputs / format pairs listed in this property MUST be included in the
|
|
|
|
|
CompatibilityList.
|
|
|
|
|
|
|
|
|
|
"CompatibilityList" aka RR_PROPERTY_COMPATIBILITY_LIST
|
|
|
|
|
Type: int32 [2*n] / Atom pairs
|
|
|
|
|
Flags: Immutable
|
|
|
|
|
Range/List: 0-
|
|
|
|
|
|
|
|
|
|
Some combinations of outputs on some cards cannot be served at all,
|
|
|
|
|
because the according encoder is only capable of driving one output at
|
|
|
|
|
a time.
|
|
|
|
|
This property lists all output + signal format pairs that can be
|
|
|
|
|
driven together with this output. NULL atoms specify any output / any
|
|
|
|
|
signal format, respectively.
|
|
|
|
|
This property MUST be symmetric, but may change with changing signal
|
|
|
|
|
format. I.e. if the property for DVI-1/TMDS specifies VGA-1/VGA to be
|
|
|
|
|
available, VGA-1/VGA has to list DVI-1/TMDS as well.
|
|
|
|
|
|
|
|
|
|
"ConnectorNumber" aka RR_PROPERTY_CONNECTOR_NUMBER
|
|
|
|
|
Type: int32
|
|
|
|
|
Flags: Immutable, Static
|
|
|
|
|
Range/List: 0-
|
|
|
|
|
|
|
|
|
|
Outputs that route their signal to the same connector MUST
|
|
|
|
|
have the same connector number. Outputs with the same
|
|
|
|
|
connector number MUST route their signal to the same
|
|
|
|
|
connector, except if it is 0, which indicates unknown
|
|
|
|
|
connectivity. 1 is called the primary connector, 2 the
|
|
|
|
|
secondary. 3 is typically a TV connector, but that is completely
|
|
|
|
|
driver / hardware dependent.
|
|
|
|
|
Outputs with the same connector number SHOULD have the same
|
|
|
|
|
connector type. Meaning and client behavior for mismatching
|
|
|
|
|
connector types is undefined at the moment.
|
|
|
|
|
|
|
|
|
|
"ConnectorType" aka RR_PROPERTY_CONNECTOR_TYPE
|
|
|
|
|
Type: int32 / Atom
|
|
|
|
|
Flags: Immutable, Static
|
|
|
|
|
Range/List: unknown VGA DVI DVI‐I DVI‐A DVI‐D HDMI Panel
|
|
|
|
|
TV TV-Composite TV-SVideo TV-Component
|
|
|
|
|
TV-SCART TV-C4 DisplayPort
|
|
|
|
|
|
|
|
|
|
Connector type, as far as known to the driver.
|
|
|
|
|
Values with dashes (TV‐Composite) describe more specific versions of
|
|
|
|
|
the base values (TV). The former SHOULD be used if the connector is
|
|
|
|
|
not capable of producing other signal formats. The later SHOULD be
|
|
|
|
|
used if the exact connector is unknown, or the connector is a
|
|
|
|
|
multi‐format connector that is not described otherwise. DVI, for
|
|
|
|
|
instance, SHOULD be handled like a DVI‐I connector, unless additional
|
|
|
|
|
information is available to the user agent. PANEL describes
|
|
|
|
|
laptop‐internal (normally LVDS) displays. TV, TV‐SCART, TV‐Component,
|
|
|
|
|
and TV‐C4 with signal format VGA are valid combinations and describe
|
|
|
|
|
RGB TV signals.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
"EDID" aka RR_PROPERTY_RANDR_EDID
|
|
|
|
|
Type: int8 [n]
|
|
|
|
|
Flags: Immutable
|
|
|
|
|
Range/List: -
|
|
|
|
|
|
|
|
|
|
Raw EDID data from the device attached to the according
|
|
|
|
|
output. Should include main EDID data and all extension
|
2010-04-24 13:55:27 -06:00
|
|
|
|
blocks. Previously known as EdidData.
|
2009-05-02 09:19:40 -06:00
|
|
|
|
|
|
|
|
|
"SignalFormat" aka RR_PROPERTY_SIGNAL_FORMAT
|
|
|
|
|
Type: int32 / Atom
|
|
|
|
|
Flags: -
|
|
|
|
|
Range/List: unknown VGA TMDS LVDS Composite Composite-PAL
|
|
|
|
|
Composite-NTSC Composite-SECAM SVideo
|
|
|
|
|
Component DisplayPort
|
|
|
|
|
|
|
|
|
|
Signal format / physical protocol format that is used for the
|
|
|
|
|
specified output. valid-values lists all possible formats on this
|
|
|
|
|
output, which SHOULD be a subset of the list above and MUST be static.
|
|
|
|
|
Values with dashes (Composite-PAL) describe more specific versions of
|
|
|
|
|
the base values (Composite) and SHOULD be used if known to the driver.
|
|
|
|
|
A driver MAY change this property of an output if the underlying
|
|
|
|
|
hardware indicates a protocol change (e.g. TV formats). Clients are
|
|
|
|
|
allowed to change the signal format in order to select a different
|
|
|
|
|
signal format (e.g. Composite etc.) or physical protocol (e.g. VGA or
|
|
|
|
|
TMDS on DVI-I).
|
|
|
|
|
Laptop panels SHOULD not be detected with this property, but rather by
|
|
|
|
|
ConnectorType.
|
|
|
|
|
|
|
|
|
|
"SignalProperties" aka RR_PROPERTY_SIGNAL_FORMAT
|
|
|
|
|
Type: int32 [n] / Atom
|
|
|
|
|
Flags: -
|
|
|
|
|
Range/List: For Composite signals:
|
|
|
|
|
NTSC NTSC-M NTSC-J NTSC-N NTSC-4.43 NTSC-film
|
|
|
|
|
PAL PAL-B PAL-G PAL-H PAL-H PAL-I PAL-M PAL-D
|
|
|
|
|
PAL-N PAL-Nc PAL-L PAL-60
|
|
|
|
|
SECAM SECAM-L SECAM-B SECAM-G SECAM-D SECAM-K
|
|
|
|
|
SECAM-H SECAM-K
|
|
|
|
|
For TMDS signals:
|
|
|
|
|
SingleLink DualLink
|
|
|
|
|
For DisplayPort signals:
|
|
|
|
|
Lane1 Lane2 Lane4 LowSpeed HiSpeed
|
|
|
|
|
|
|
|
|
|
Properties of the signal format that is currently used for the
|
|
|
|
|
specified output. valid-values lists all possible properties on this
|
|
|
|
|
output, which SHOULD be a subset of the list above. It will change if
|
|
|
|
|
SignalFormat changes. Multiple properties are allowed.
|
|
|
|
|
Values with dashes (PAL-B) describe more specific versions of the base
|
|
|
|
|
values (PAL) and SHOULD be used if known to the driver. A driver MAY
|
|
|
|
|
change this property of an output if the underlying hardware indicates
|
|
|
|
|
a signal change (e.g. TV formats). Clients are allowed to change the
|
|
|
|
|
properties in order to select a different signal subformat.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9.2 Properties introduced with version 1.2 of the RandR extension
|
|
|
|
|
|
|
|
|
|
Property Immutable Mandatory since
|
|
|
|
|
──────── ───────── ───────────────
|
2010-04-24 13:55:27 -06:00
|
|
|
|
EDID yes n/a
|
2009-05-02 09:19:40 -06:00
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
EDID is provided by the RandR frontend, thus not driver specific.
|
2009-05-02 09:19:40 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9.3 Properties introduced with version 1.3 of the RandR extension
|
|
|
|
|
|
|
|
|
|
Property Immutable Mandatory since
|
|
|
|
|
──────── ───────── ───────────────
|
2010-04-24 13:55:27 -06:00
|
|
|
|
CloneList yes not mandatory
|
|
|
|
|
CompatibilityList yes not mandatory
|
|
|
|
|
ConnectorNumber yes: static not mandatory
|
|
|
|
|
ConnectorType yes: static RandR 1.3
|
2009-05-02 09:19:40 -06:00
|
|
|
|
SignalFormat no RandR 1.3
|
|
|
|
|
SignalProperties no not mandatory
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2010-10-31 03:53:10 -06:00
|
|
|
|
9.4 Properties introduced with version 1.3.1 of the RandR extension
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
|
|
|
|
Property Immutable Mandatory since
|
|
|
|
|
──────── ───────── ───────────────
|
|
|
|
|
Backlight no not mandatory
|
2009-05-02 09:19:40 -06:00
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
10. Extension Versioning
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
The RandR extension was developed in parallel with the implementation
|
|
|
|
|
to ensure the feasibility of various portions of the design. As
|
|
|
|
|
portions of the extension are implemented, the version number of the
|
|
|
|
|
extension has changed to reflect the portions of the standard provided.
|
|
|
|
|
This document describes the version 1.2 of the specification, the
|
|
|
|
|
partial implementations have version numbers less than that. Here's a
|
|
|
|
|
list of what each version provided:
|
|
|
|
|
|
|
|
|
|
0.0: This prototype implemented resize and rotation in the
|
|
|
|
|
TinyX server Used approximately the protocol described in
|
|
|
|
|
the Usenix paper. Appeared in the TinyX server in
|
|
|
|
|
XFree86 4.2, but not in the XFree86 main server.
|
|
|
|
|
|
|
|
|
|
0.1: Added subpixel order, added an event for subpixel order.
|
|
|
|
|
This version was never checked in to XFree86 CVS.
|
|
|
|
|
|
|
|
|
|
1.0: Implements resize, rotation, and reflection. Implemented
|
|
|
|
|
both in the XFree86 main server (size change only at this
|
|
|
|
|
date), and fully (size change, rotation, and reflection)
|
|
|
|
|
in XFree86's TinyX server.
|
|
|
|
|
|
|
|
|
|
1.1: Added refresh rates
|
|
|
|
|
|
|
|
|
|
1.2: Separate screens from CRTCs and outputs, switch to full VESA
|
|
|
|
|
modes
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
1.3: Added cheap version of RRGetScreenResources. Added CRTC
|
|
|
|
|
transformations. Added panning. Added primary outputs.
|
|
|
|
|
Added standard properties.
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients
|
|
|
|
|
will fail against 1.0 servers. The wire encoding op-codes were
|
|
|
|
|
changed for GetScreenInfo to ensure this failure in a relatively
|
|
|
|
|
graceful way. Version 1.1 servers and clients are cross compatible with
|
|
|
|
|
1.0. Version 1.1 is considered to be stable and we intend upward
|
|
|
|
|
compatibility from this point. Version 1.2 offers an extended model of the
|
2009-05-02 09:19:40 -06:00
|
|
|
|
system with multiple output support. Version 1.3 adds a cheap version of
|
|
|
|
|
GetScreenResources to avoid expensive DDC operations, CRTC transformations,
|
|
|
|
|
panning, and the primary output concept. 1.2 and 1.3 are backward-compatible
|
|
|
|
|
with 1.1.
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
11. Relationship with other extensions
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
Two other extensions have a direct relationship with this extension. This
|
|
|
|
|
section attempts to explain how these three are supposed to work together.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
11.1 XFree86-VidModeExtension
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
XFree86-VidModeExtension changes the configuration of a single monitor
|
|
|
|
|
attached to the screen without changing the configuration of the screen
|
|
|
|
|
itself. It provides the ability to specify new mode lines for the server to
|
|
|
|
|
use along with selecting among existing mode lines. As it uses screen
|
|
|
|
|
numbers instead of window identifiers, it can be used to affect multiple
|
|
|
|
|
monitors in a single-screen Xinerama configuration. However, the association
|
|
|
|
|
between screen numbers and root windows in a multi-Screen environment is not
|
|
|
|
|
defined by the extension. Version 2.0 of this extension added the ability to
|
|
|
|
|
adjust the DAC values in a TrueColor server to modify the brightness curves
|
|
|
|
|
of the display.
|
|
|
|
|
|
|
|
|
|
All of the utility of this extension is subsumed by RandR version 1.2, RandR
|
|
|
|
|
should be used in preference to XFree86-VidModeExtension where both are
|
|
|
|
|
present.
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
11.2 Xinerama
|
2007-11-24 09:25:53 -07:00
|
|
|
|
|
|
|
|
|
Xinerama provides a mechanism for describing the relationship between the
|
|
|
|
|
overall screen display and monitors placed within that area. As such, it
|
|
|
|
|
provides the query functionality of RandR 1.2 without any of the
|
|
|
|
|
configuration functionality. Applications using Xinerama to discover
|
|
|
|
|
monitor geometry can continue to do so, with the caveat that they will not be
|
|
|
|
|
informed of changes when they occur. However, Xinerama configuration data
|
|
|
|
|
will be updated, so applications selecting for RandR notification and
|
|
|
|
|
re-querying the configuration with the Xinerama extension will get updated
|
|
|
|
|
information. It is probably better to view RandR as a superset of Xinerama
|
|
|
|
|
at this point and use it in preference to Xinerama where both are present.
|
|
|
|
|
|
|
|
|
|
❧❧❧❧❧❧❧❧❧❧❧
|
|
|
|
|
|
|
|
|
|
Appendix A. Protocol Encoding
|
|
|
|
|
|
|
|
|
|
Syntactic Conventions
|
|
|
|
|
|
|
|
|
|
This document uses the same syntactic conventions as the core X
|
|
|
|
|
protocol encoding document.
|
|
|
|
|
|
|
|
|
|
A.1 Common Types
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
ROTATION
|
|
|
|
|
0x0001 Rotate_0
|
|
|
|
|
0x0002 Rotate_90
|
|
|
|
|
0x0004 Rotate_180
|
|
|
|
|
0x0008 Rotate_270
|
|
|
|
|
0x0010 Reflect_X
|
|
|
|
|
0x0020 Reflect_Y
|
|
|
|
|
└───
|
|
|
|
|
Used to encode both sets of possible rotations and individual
|
|
|
|
|
selected rotations.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSELECTMASK
|
|
|
|
|
0x0001 ScreenChangeNotifyMask
|
|
|
|
|
0x0002 CrtcChangeNotifyMask Added in version 1.2
|
|
|
|
|
0x0004 OutputChangeNotifyMask Added in version 1.2
|
|
|
|
|
0x0008 OutputPropertyNotifyMask Added in version 1.2
|
|
|
|
|
└───
|
|
|
|
|
Event select mask for RRSelectInput
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
RRCONFIGSTATUS
|
|
|
|
|
0x0 Success
|
|
|
|
|
0x1 InvalidConfigTime
|
|
|
|
|
0x2 InvalidTime
|
|
|
|
|
0x3 Failed
|
|
|
|
|
└───
|
|
|
|
|
Return status for requests which depend on time.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
MODEINFO (32) Added in version 1.2
|
|
|
|
|
4 CARD32 id
|
|
|
|
|
2 CARD16 width in pixels
|
|
|
|
|
2 CARD16 height in pixels
|
|
|
|
|
4 CARD32 dot clock
|
|
|
|
|
2 CARD16 h sync start
|
|
|
|
|
2 CARD16 h sync end
|
|
|
|
|
2 CARD16 h total
|
|
|
|
|
2 CARD16 h skew
|
|
|
|
|
2 CARD16 v sync start
|
|
|
|
|
2 CARD16 v sync end
|
|
|
|
|
2 CARD16 v total
|
|
|
|
|
2 CARD16 name length
|
|
|
|
|
4 SETofMODEFLAG mode flags
|
|
|
|
|
└───
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
An output mode specifies the complete CRTC timings for
|
|
|
|
|
a specific mode. The vertical and horizontal synchronization rates
|
|
|
|
|
can be computed given the dot clock and the h total/v total
|
|
|
|
|
values. If the dot clock is zero, then all of the timing
|
|
|
|
|
parameters and flags are not used, and must be zero as this
|
|
|
|
|
indicates that the timings are unknown or otherwise unused.
|
|
|
|
|
The name itself will be encoded separately in each usage.
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
┌───
|
|
|
|
|
MODEFLAG
|
|
|
|
|
0x00000001 HSyncPositive
|
|
|
|
|
0x00000002 HSyncNegative
|
|
|
|
|
0x00000004 VSyncPositive
|
|
|
|
|
0x00000008 VSyncNegative
|
|
|
|
|
0x00000010 Interlace
|
|
|
|
|
0x00000020 DoubleScan
|
|
|
|
|
0x00000040 CSync
|
|
|
|
|
0x00000080 CSyncPositive
|
|
|
|
|
0x00000100 CSyncNegative
|
|
|
|
|
0x00000200 HSkewPresent
|
|
|
|
|
0x00000400 BCast
|
|
|
|
|
0x00000800 PixelMultiplex
|
|
|
|
|
0x00001000 DoubleClock
|
|
|
|
|
0x00002000 ClockDivideBy2
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
CONNECTION
|
|
|
|
|
0 Connected
|
|
|
|
|
1 Disconnected
|
|
|
|
|
2 UnknownConnection
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A.2 Protocol Requests
|
|
|
|
|
|
|
|
|
|
Opcodes 1 and 3 were used in the 0.0 protocols, and will return
|
|
|
|
|
errors if used in version 1.0.
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRQueryVersion
|
|
|
|
|
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 0 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 CARD32 major version
|
|
|
|
|
4 CARD32 minor version
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
1 CARD32 major version
|
|
|
|
|
1 CARD32 minor version
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSetScreenConfig
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 2 RandR opcode
|
|
|
|
|
2 6 length
|
|
|
|
|
4 WINDOW window on screen to be configured
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP config timestamp
|
|
|
|
|
2 SIZEID size index
|
|
|
|
|
2 ROTATION rotation/reflection
|
|
|
|
|
2 CARD16 refresh rate (1.1 only)
|
|
|
|
|
2 CARD16 pad
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
4 TIMESTAMP new timestamp
|
|
|
|
|
4 TIMESTAMP new configuration timestamp
|
|
|
|
|
4 WINDOW root
|
|
|
|
|
2 SUBPIXELORDER subpixel order defined in Render
|
|
|
|
|
2 CARD16 pad4
|
|
|
|
|
4 CARD32 pad5
|
|
|
|
|
4 CARD32 pad6
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSelectInput
|
|
|
|
|
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 4 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
2 SETofRRSELECTMASK enable
|
|
|
|
|
2 CARD16 pad
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenInfo
|
|
|
|
|
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 5 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 CARD8 set of Rotations
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
4 WINDOW root window
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP config timestamp
|
|
|
|
|
2 CARD16 number of SCREENSIZE following
|
|
|
|
|
2 SIZEID current size index
|
|
|
|
|
2 ROTATION current rotation and reflection
|
|
|
|
|
2 CARD16 current rate (added in version 1.1)
|
|
|
|
|
2 CARD16 length of rate info (number of CARD16s)
|
|
|
|
|
2 CARD16 pad
|
|
|
|
|
|
|
|
|
|
SCREENSIZE
|
|
|
|
|
2 CARD16 width in pixels
|
|
|
|
|
2 CARD16 height in pixels
|
|
|
|
|
2 CARD16 width in millimeters
|
|
|
|
|
2 CARD16 height in millimeters
|
|
|
|
|
|
|
|
|
|
REFRESH
|
|
|
|
|
2 CARD16 number of rates (n)
|
|
|
|
|
2n CARD16 rates
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
A.2.1 Protocol Requests added with version 1.2
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenSizeRange
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 6 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
2 CARD16 minWidth
|
|
|
|
|
2 CARD16 minHeight
|
|
|
|
|
2 CARD16 maxWidth
|
|
|
|
|
2 CARD16 maxHeight
|
|
|
|
|
16 unused
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSetScreenSize
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 7 RandR opcode
|
|
|
|
|
2 5 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
2 CARD16 width
|
|
|
|
|
2 CARD16 height
|
|
|
|
|
4 CARD32 width in millimeters
|
|
|
|
|
4 CARD32 height in millimeters
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenResources
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 8 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 c+o+8m+(b+p)/4 reply length
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP config-timestamp
|
|
|
|
|
2 c number of CRTCs
|
|
|
|
|
2 o number of outputs
|
|
|
|
|
2 m number of modeinfos
|
|
|
|
|
2 b total bytes in mode names
|
|
|
|
|
8 unused
|
|
|
|
|
4c LISTofCRTC crtcs
|
|
|
|
|
4o LISTofOUTPUT outputs
|
|
|
|
|
32m LISTofMODEINFO modeinfos
|
|
|
|
|
b STRING8 mode names
|
|
|
|
|
p unused, p=pad(b)
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputInfo
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 9 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 TIMESTAMP config-timestamp
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 1+c+m+(n+p)/4 reply length
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 CRTC current connected crtc
|
|
|
|
|
4 CARD32 width in millimeters
|
|
|
|
|
4 CARD32 height in millimeters
|
|
|
|
|
1 CONNECTION connection
|
|
|
|
|
1 SUBPIXELORDER subpixel-order
|
|
|
|
|
2 c number of CRTCs
|
|
|
|
|
2 m number of modes
|
|
|
|
|
2 p number of preferred modes
|
|
|
|
|
2 o number of clones
|
|
|
|
|
2 n length of name
|
|
|
|
|
4c LISTofCRTC crtcs
|
|
|
|
|
4m LISTofMODE modes
|
2009-05-02 09:19:40 -06:00
|
|
|
|
4o LISTofOUTPUT clones
|
2007-11-24 09:25:53 -07:00
|
|
|
|
n STRING8 name
|
|
|
|
|
p unused, p=pad(n)
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRListOutputProperties
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 10 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 n reply length
|
|
|
|
|
2 n number of ATOMs in atoms
|
|
|
|
|
22 unused
|
|
|
|
|
4n LISTofATOM atoms
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRQueryOutputProperty
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 11 RandR opcode
|
|
|
|
|
2 3 request length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM property
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 n reply length
|
|
|
|
|
1 BOOL pending
|
|
|
|
|
1 BOOL range
|
|
|
|
|
1 BOOL immutable
|
|
|
|
|
21 unused
|
|
|
|
|
4n LISTofINT32 valid values
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRConfigureOutputProperty
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 12 RandR opcode
|
|
|
|
|
2 4+n request length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM property
|
|
|
|
|
1 BOOL pending
|
|
|
|
|
1 BOOL range
|
|
|
|
|
2 unused
|
|
|
|
|
4n LISTofINT32 valid values
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRChangeOutputProperty
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 13 RandR opcode
|
|
|
|
|
2 6+(n+p)/4 request length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM property
|
|
|
|
|
4 ATOM type
|
|
|
|
|
1 CARD8 format
|
|
|
|
|
1 mode
|
|
|
|
|
0 Replace
|
|
|
|
|
1 Prepend
|
|
|
|
|
2 Append
|
|
|
|
|
2 unused
|
|
|
|
|
4 CARD32 length of data in format units
|
|
|
|
|
(= n for format = 8)
|
|
|
|
|
(= n/2 for format = 16)
|
|
|
|
|
(= n/4 for format = 32)
|
|
|
|
|
n LISTofBYTE data
|
|
|
|
|
(n is a multiple of 2 for format = 16)
|
|
|
|
|
(n is a multiple of 4 for format = 32)
|
|
|
|
|
p unused, p=pad(n)
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRDeleteOutputProperty
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 14 RandR opcode
|
|
|
|
|
2 3 request length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM property
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputProperty
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 15 RandR opcode
|
|
|
|
|
2 7 request length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM property
|
|
|
|
|
4 ATOM type
|
|
|
|
|
0 AnyPropertyType
|
|
|
|
|
4 CARD32 long-offset
|
|
|
|
|
4 CARD32 long-length
|
|
|
|
|
1 BOOL delete
|
|
|
|
|
1 BOOL pending
|
|
|
|
|
2 unused
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 CARD8 format
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 (n+p)/4 reply length
|
|
|
|
|
4 ATOM type
|
|
|
|
|
0 None
|
|
|
|
|
4 CARD32 bytes-after
|
|
|
|
|
4 CARD32 length of value in format units
|
|
|
|
|
(= 0 for format = 0)
|
|
|
|
|
(= n for format = 8)
|
|
|
|
|
(= n/2 for format = 16)
|
|
|
|
|
(= n/4 for format = 32)
|
|
|
|
|
12 unused
|
|
|
|
|
n LISTofBYTE value
|
|
|
|
|
(n is zero for format = 0)
|
|
|
|
|
(n is a multiple of 2 for format = 16)
|
|
|
|
|
(n is a multiple of 4 for format = 32)
|
|
|
|
|
p unused, p=pad(n)
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRCreateMode
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 16 RandR opcode
|
|
|
|
|
2 12+(n+p)/4 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
32 MODEINFO mode
|
|
|
|
|
n STRING8 mode name
|
|
|
|
|
p unused, p=pad(n)
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
4 MODE mode
|
|
|
|
|
20 unused
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRDestroyMode
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 17 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 MODE mode
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRAddOutputMode
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 18 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 MODE mode
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRDeleteOutputMode
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 19 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 MODE mode
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcInfo
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 20 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
4 TIMESTAMP config-timestamp
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 o+p reply length
|
|
|
|
|
4 TIMESTATMP timestamp
|
|
|
|
|
2 INT16 x
|
|
|
|
|
2 INT16 y
|
|
|
|
|
2 CARD16 width
|
|
|
|
|
2 CARD16 height
|
|
|
|
|
4 MODE mode
|
|
|
|
|
2 ROTATION current rotation and reflection
|
|
|
|
|
2 ROTATION set of possible rotations
|
|
|
|
|
2 o number of outputs
|
|
|
|
|
2 p number of possible outputs
|
|
|
|
|
4o LISTofOUTPUT outputs
|
|
|
|
|
4p LISTofOUTPUT possible outputs
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcConfig
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 21 RandR opcode
|
|
|
|
|
2 7+2n length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP config timestamp
|
|
|
|
|
2 INT16 x
|
|
|
|
|
2 INT16 y
|
|
|
|
|
4 MODE mode
|
|
|
|
|
2 ROTATION rotation/reflection
|
|
|
|
|
2 unused
|
|
|
|
|
8n LISTofOUTPUT outputs
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
4 TIMESTAMP new timestamp
|
|
|
|
|
20 unused
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcGammaSize
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 22 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
2 CARD16 size
|
|
|
|
|
22 unused
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcGamma
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 23 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 (6n+2)/4 reply length
|
|
|
|
|
2 n size
|
|
|
|
|
20 unused
|
|
|
|
|
2n LISTofCARD16 red
|
|
|
|
|
2n LISTofCARD16 green
|
|
|
|
|
2n LISTofCARD16 blue
|
|
|
|
|
p unused, p=pad(6n)
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcGamma
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 24 RandR opcode
|
|
|
|
|
2 3+(6n+2)/4 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
2 n size
|
|
|
|
|
2 unused
|
|
|
|
|
2n LISTofCARD16 red
|
|
|
|
|
2n LISTofCARD16 green
|
|
|
|
|
2n LISTofCARD16 blue
|
|
|
|
|
p unused, p=pad(6n)
|
|
|
|
|
└───
|
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
A.2.2 Protocol Requests added with version 1.3
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRGetScreenResourcesCurrent
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 25 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 c+o+8m+(b+p)/4 reply length
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP config-timestamp
|
|
|
|
|
2 c number of CRTCs
|
|
|
|
|
2 o number of outputs
|
|
|
|
|
2 m number of modeinfos
|
|
|
|
|
2 b total bytes in mode names
|
|
|
|
|
8 unused
|
|
|
|
|
4c LISTofCRTC crtcs
|
|
|
|
|
4o LISTofOUTPUT outputs
|
|
|
|
|
32m LISTofMODEINFO modeinfos
|
|
|
|
|
b STRING8 mode names
|
|
|
|
|
p unused, p=pad(b)
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetCrtcTransform
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 26 RandR opcode
|
|
|
|
|
2 12+(n+p)/4+v length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
36 TRANSFORM transform
|
|
|
|
|
2 CARD16 filter length
|
|
|
|
|
2 unused
|
|
|
|
|
n STRING8 filter name
|
|
|
|
|
p unused, p=pad(n)
|
|
|
|
|
4v FIXED filter params
|
|
|
|
|
└───
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
┌───
|
|
|
|
|
RRGetCrtcTransform
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 27 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 16+(pn+pnp)/4+(cn+cnp)/4+pf+cf reply length
|
|
|
|
|
36 TRANSFORM pending transform
|
|
|
|
|
1 BOOL has transforms
|
|
|
|
|
3 unused
|
|
|
|
|
36 TRANSFORM current transform
|
|
|
|
|
4 unused
|
|
|
|
|
2 pn pending filter name length
|
|
|
|
|
2 pf pending filter num params
|
|
|
|
|
2 cn current filter name length
|
|
|
|
|
2 cf current filter num params
|
|
|
|
|
pn STRING8 pending filter name
|
|
|
|
|
pnp unused, pnp=pad(pn)
|
|
|
|
|
4*pf FIXED pending filter params
|
|
|
|
|
cn STRING8 current filter name
|
|
|
|
|
cnp unused, cnp=pad(cn)
|
|
|
|
|
4*cf FIXED current filter params
|
|
|
|
|
└───
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
┌───
|
|
|
|
|
RRGetPanning
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 28 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 1 reply length
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
2 CARD16 left
|
|
|
|
|
2 CARD16 top
|
|
|
|
|
2 CARD16 width
|
|
|
|
|
2 CARD16 height
|
|
|
|
|
2 CARD16 track_left
|
|
|
|
|
2 CARD16 track_top
|
|
|
|
|
2 CARD16 track_width
|
|
|
|
|
2 CARD16 track_height
|
|
|
|
|
2 INT16 border_left
|
|
|
|
|
2 INT16 border_top
|
|
|
|
|
2 INT16 border_right
|
|
|
|
|
2 INT16 border_bottom
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RRSetPanning
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 29 RandR opcode
|
|
|
|
|
2 9 length
|
|
|
|
|
4 CRTC crtc
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
2 CARD16 left
|
|
|
|
|
2 CARD16 top
|
|
|
|
|
2 CARD16 width
|
|
|
|
|
2 CARD16 height
|
|
|
|
|
2 CARD16 track_left
|
|
|
|
|
2 CARD16 track_top
|
|
|
|
|
2 CARD16 track_width
|
|
|
|
|
2 CARD16 track_height
|
|
|
|
|
2 INT16 border_left
|
|
|
|
|
2 INT16 border_top
|
|
|
|
|
2 INT16 border_right
|
|
|
|
|
2 INT16 border_bottom
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 RRCONFIGSTATUS status
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 0 reply length
|
|
|
|
|
4 TIMESTAMP new timestamp
|
|
|
|
|
20 unused
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRSetOutputPrimary
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 30 RandR opcode
|
|
|
|
|
2 3 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
└───
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2009-05-02 09:19:40 -06:00
|
|
|
|
┌───
|
|
|
|
|
RRGetOutputPrimary
|
|
|
|
|
1 CARD8 major opcode
|
|
|
|
|
1 31 RandR opcode
|
|
|
|
|
2 2 length
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
▶
|
|
|
|
|
1 1 Reply
|
|
|
|
|
1 unused
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 CARD32 length
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 CARD32 pad1
|
|
|
|
|
4 CARD32 pad2
|
|
|
|
|
4 CARD32 pad3
|
|
|
|
|
4 CARD32 pad4
|
|
|
|
|
└───
|
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
A.3 Protocol Events
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRScreenChangeNotify
|
|
|
|
|
1 Base + 0 code
|
|
|
|
|
1 ROTATION new rotation and reflection
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP configuration timestamp
|
|
|
|
|
4 WINDOW root window
|
|
|
|
|
4 WINDOW request window
|
|
|
|
|
2 SIZEID size ID
|
|
|
|
|
2 SUBPIXELORDER subpixel order defined in Render
|
|
|
|
|
2 CARD16 width in pixels
|
|
|
|
|
2 CARD16 height in pixels
|
|
|
|
|
2 CARD16 width in millimeters
|
|
|
|
|
2 CARD16 height in millimeters
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
A.3.1 Protocol Events added with version 1.2
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
RRCrtcChangeNotify
|
|
|
|
|
1 Base + 1 code
|
|
|
|
|
1 0 sub-code
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 WINDOW request window
|
|
|
|
|
4 CRTC crtc affected
|
|
|
|
|
4 MODE mode in use
|
|
|
|
|
2 ROTATION new rotation and reflection
|
|
|
|
|
2 unused
|
|
|
|
|
2 INT16 x
|
|
|
|
|
2 INT16 y
|
|
|
|
|
2 CARD16 width
|
|
|
|
|
2 CARD16 height
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RROutputChangeNotify
|
|
|
|
|
1 Base + 1 code
|
|
|
|
|
1 1 sub-code
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 TIMESTAMP timestamp
|
|
|
|
|
4 TIMESTAMP configuration timestamp
|
|
|
|
|
4 WINDOW request window
|
|
|
|
|
4 OUTPUT output affected
|
|
|
|
|
4 CRTC crtc in use
|
|
|
|
|
4 MODE mode in use
|
|
|
|
|
2 ROTATION rotation in use
|
|
|
|
|
1 CONNECTION connection status
|
|
|
|
|
1 SUBPIXELORDER subpixel order
|
|
|
|
|
└───
|
|
|
|
|
┌───
|
|
|
|
|
RROutputPropertyNotify
|
|
|
|
|
1 Base + 1 code
|
|
|
|
|
1 2 sub-code
|
|
|
|
|
2 CARD16 sequence number
|
|
|
|
|
4 WINDOW window
|
|
|
|
|
4 OUTPUT output
|
|
|
|
|
4 ATOM atom
|
|
|
|
|
4 TIMESTAMP time
|
|
|
|
|
1 state
|
|
|
|
|
0 NewValue
|
|
|
|
|
1 Deleted
|
|
|
|
|
11 unused
|
|
|
|
|
└───
|
|
|
|
|
|
|
|
|
|
A.4 Protocol Errors
|
|
|
|
|
|
|
|
|
|
┌───
|
|
|
|
|
ERRORS
|
|
|
|
|
Base + 0 Output
|
|
|
|
|
Base + 1 Crtc
|
|
|
|
|
Base + 2 Mode
|
|
|
|
|
└───
|
2010-04-24 13:55:27 -06:00
|
|
|
|
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Bibliography
|
|
|
|
|
|
|
|
|
|
[RANDR] Gettys, Jim and Keith Packard, "The X Resize and Rotate
|
|
|
|
|
Extension - RandR", Proceedings of the 2001 USENIX Annual
|
|
|
|
|
Technical Conference, Boston, MA
|
|
|
|
|
|
2010-04-24 13:55:27 -06:00
|
|
|
|
[RENDER]
|
2007-11-24 09:25:53 -07:00
|
|
|
|
Packard, Keith, "The X Rendering Extension", work in progress,
|
2010-04-24 13:55:27 -06:00
|
|
|
|
http://cgit.freedesktop.org/xorg/proto/renderproto/tree/renderproto.txt
|