Merge branch 'transform-proposal'

Conflicts:

	randr.h
	randrproto.h
	randrproto.txt
This commit is contained in:
Keith Packard 2008-11-24 16:22:11 -08:00
commit 6c17940a79
3 changed files with 176 additions and 23 deletions

11
randr.h
View file

@ -40,11 +40,11 @@ typedef unsigned long XRandrModeFlags;
#define RANDR_NAME "RANDR"
#define RANDR_MAJOR 1
#define RANDR_MINOR 2
#define RANDR_MINOR 3
#define RRNumberErrors 3
#define RRNumberEvents 2
#define RRNumberRequests 26
#define RRNumberRequests 28
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
@ -80,6 +80,13 @@ typedef unsigned long XRandrModeFlags;
/* V1.3 additions */
#define X_RRGetScreenResourcesCurrent 25
#define X_RRSetCrtcTransform 26
#define X_RRGetCrtcTransform 27
#define RRTransformUnit (1L << 0)
#define RRTransformScaleUp (1L << 1)
#define RRTransformScaleDown (1L << 2)
#define RRTransformProjective (1L << 3)
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)

View file

@ -32,6 +32,7 @@
#define _XRANDRP_H_
#include <X11/extensions/randr.h>
#include <X11/extensions/renderproto.h>
#define Window CARD32
#define Drawable CARD32
@ -590,6 +591,46 @@ typedef struct {
} xRRGetScreenResourcesCurrentReply;
#define sz_xRRGetScreenResourcesCurrentReply 32
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
RRCrtc crtc B32;
xRenderTransform transform;
CARD16 nbytesFilter; /* number of bytes in filter name */
CARD16 pad B16;
} xRRSetCrtcTransformReq;
#define sz_xRRSetCrtcTransformReq 48
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
RRCrtc crtc B32;
} xRRGetCrtcTransformReq;
#define sz_xRRGetCrtcTransformReq 8
typedef struct {
BYTE type;
CARD8 status;
CARD16 sequenceNumber B16;
CARD32 length B32;
xRenderTransform pendingTransform;
BYTE hasTransforms;
CARD8 pad0;
CARD16 pad1 B16;
xRenderTransform currentTransform;
CARD32 pad2 B32;
CARD16 pendingNbytesFilter B16; /* number of bytes in filter name */
CARD16 pendingNparamsFilter B16; /* number of filter params */
CARD16 currentNbytesFilter B16; /* number of bytes in filter name */
CARD16 currentNparamsFilter B16; /* number of filter params */
} xRRGetCrtcTransformReply;
#define sz_xRRGetCrtcTransformReply 96
/*
* event
*/
@ -631,8 +672,8 @@ typedef struct {
CARD8 type; /* always evBase + RRNotify */
CARD8 subCode; /* RRNotify_OutputChange */
CARD16 sequenceNumber B16;
Time timestamp B32; /* time crtc was changed */
Time configTimestamp B32; /* time crtc was changed */
Time timestamp B32; /* time output was changed */
Time configTimestamp B32; /* time config was changed */
Window window B32; /* window requesting notification */
RROutput output B32; /* affected output */
RRCrtc crtc B32; /* current crtc */

View file

@ -1,6 +1,6 @@
The X Resize, Rotate and Reflect Extension
Version 1.2
2006-4-13
Version 1.3
2006-20-7
Jim Gettys
Jim.Gettys@hp.com
@ -110,6 +110,17 @@ 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.
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.
1.1 Acknowledgements
Our thanks to the contributors to the design found on the xpert mailing
@ -846,8 +857,10 @@ dynamic changes in the display environment.
'x' and 'y' indicate the position of this CRTC within the screen
region. They will be set to 0 when the CRTC is disabled.
'width' and 'height' indicate the size of the area presented by this
CRTC.
'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
mode due to rotation. They will be set to 0 when the CRTC is
disabled.
'mode' indicates which mode is active, or None indicating that the
CRTC has been disabled and is not displaying the screen contents.
@ -1002,6 +1015,50 @@ dynamic changes in the display environment.
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
transformations 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.
❧❧❧❧❧❧❧❧❧❧❧
8. Extension Events
@ -1024,12 +1081,12 @@ factors, such as re-cabling a monitor, etc.
configTimestamp: TIMESTAMP time config data was changed
root: WINDOW root window of screen
window: WINDOW window requesting notification
size-id: SIZEID index of new size
size-id: SIZEID index of new SCREENSIZE
subpixelOrder: SUBPIXELORDER order of subpixels
widthInPixels: CARD16
heightInPixels: CARD16
widthInMillimeters: CARD16
heightInMillimeters: CARD16
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
└───
This event is generated whenever the screen configuration is changed
and sent to requesting clients. 'timestamp' indicates when the
@ -1055,6 +1112,13 @@ factors, such as re-cabling a monitor, etc.
just at the time when a display manager or log in script might
be changing the screen size or configuration.
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.
8.1 Events added in version 1.2 of the RandR extension
┌───
@ -1099,27 +1163,26 @@ factors, such as re-cabling a monitor, etc.
┌───
RRCrtcChangeNotify
timestamp: TIMESTAMP time monitor was changed
config-timestamp: TIMESTAMP time config data was changed
root: WINDOW root window of screen
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
width: CARD16 width of new mode
height: CARD16 height of new mode
└───
This event is generated whenever the CRTC configuration is changed
and sent to requesting clients. 'timestamp' indicates when the
CRTC configuration was changed. 'config-timestamp' 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.
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.
This event is sent whenever the monitor's configuration changes
or if a new monitor 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 RRGetCrtcModes), the client MUST call
not available in the past. In this case, the client MUST call
RRGetCrtcModes to update its view of possible monitor
configurations to have a correct view of possible monitor
organizations.
@ -1723,7 +1786,7 @@ A.2.2 Protocol Requests added with version 1.3
┌───
RRGetScreenResourcesCurrent
1 CARD8 major opcode
1 8 RandR opcode
1 25 RandR opcode
2 2 length
4 WINDOW window
@ -1745,6 +1808,48 @@ A.2.2 Protocol Requests added with version 1.3
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
└───
┌───
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
└───
A.3 Protocol Events
┌───