NAME
X11::Protocol::Ext::RANDR -- Perl extension module for the X Resize, Rotate and Reflect Extension
SYNOPSIS
use X11::Protocol;
$x = X11::Protocol->new($ENV{'DISPLAY'});
$x->init_extension('RANDR') or die;
DESCRIPTION
This moudle is used by the X11::Protocol(3pm) module to participate in the resize, rotate and reflect extension to the X protocol, allowing a client to participate or control these screen changes per "The X Resize, Rotate and Reflect Extension", a copy of which can be obtained from http://www.x.org/releases/X11R7.7/doc/randrproto/randrproto.txt.
This manual page does not attempt to document the protocol itself, see the specification for that. It documents the "CONSTANTS", "REQUESTS", "EVENTS" and "ERRORS" that are added to the X11::Protocol(3pm) module.
CONSTANTS
X11::Protocol::Ext::RANDR provides the following symbolic constants:
Rotation =>
[ qw(Rotate_0 Rotate_90 Rotate_180 Rotate_270
Reflect_X Refect_Y) ]
RRSelectMask =>
[ qw(ScreenChangeNotifyMask CrtcChangeNotifyMask
OutputChangeNotifyMask OutputPropertyNotifyMask) ]
RRConfigStatus =>
[ qw(Success InvalidConfigTime InvalidTime Failed) ]
ModeFlag =>
[ qw(HSyncPositive HSyncNegative VSyncPositive VSyncNegative
Interlace DoubleScan CSync CSyncPositive CSyncNegative
HSkewPercent BCast PixelMultiplex
DoubleClock ClockDividedBy2) ]
Connection =>
[ qw(Connected Disconnected UnknownConnection) ]
SubpixelOrder =>
[ qw(Unknown HoizontalRGB HorizontalBGR VerticalRGB VerticalBGR
None) ]
ERRORS
X11::Protocol::Ext::RANDR provides the folowing bad resource errors: Output
, Crtc
, Mode
.
REQUESTS
X11::Protocol::Ext::RANDR provides the following requests:
$X->RRQueryVersion($major, $minor)
=>
($major, $minor)
$X->RRSetScreenConfig($window, $time, $config_time, size_index,
rotation_reflection, refresh_rate)
=>
($status, $time, $config_time, $root, $subpixel_order)
$X->RRSelectInput($window, $enable)
$enable => $RRSelectMask # mask
$X->RRGetScreenInfo($window)
=>
($rotations, $root, $time, $config_time, $size_index,
$rotation_and_reflection, $rate, $screensizes, $rateinfos)
$screensizes => [ $screensize, ... ]
$screensize => [ $width, $height, $width_mm, $height_mm ]
$rateinfos => [ $rateinfos, ... ]
$rateinfo => [ $rate, ... ]
$X->RRGetScreenSizeRange($window)
=>
($minWidth, $minHeight, $maxWidth, $maxHeight)
$X->RRSetScreenSize($window, $width, $height, $width_mm, $height_mm)
$X->RRGetScreenResources($window)
=>
($time, $config_time, $crtcs, $outputs, $modeinfos)
$crtcs => [ $crtc, ... ]
$outputs => [ $output, ... ]
$modeinfos => [ $modeinfo, ... ]
$modeinfo => [ $id, $width, $heigth, $dot_clock, $h_sync_start,
$h_sync_end, $h_total, $h_skew, $v_sync_start,
$v_sync_end, $v_total, $mode_flags, $name ]
$mode_flags => $ModeFlag # mask
$X->RRGetOutputInfo($output, $config_time)
=>
($status, $time, $crtc, $width_mm, $height_mm, $connection,
$subpixel_order, $preferred_modes, $crtcs, $modes, $clones, $name)
$X->RRListOutputProperties($output)
=>
($atom, ...)
$X->RRQueryOutputProperty($output,$atom)
=>
($pending, $range, $immutable, @values)
$X->RRConfigureOutputProperty($output,$atom,$pending,$range,@values)
$X->RRChangeOutputProperty($output,$property,$type,$format,$mode,@values)
$X->RRDeleteOutputProperty($output, $atom)
$X->RRGetOutputProperty($output, $property, $type, $offset, $length,
$delete, $pending)
=>
($format, $type, $bytes_after, @values
$X->RRCreateMode($window, $id, $width, $height, $dot_clock,
$h_sync_start, $h_sync_end, $h_total, $h_skew, $v_sync_start,
$v_sync_end, $v_total, $flags, $name)
=>
($mode)
$X->RRDestroyMode($mode)
$X->RRAddOutputMode($output, $mode)
$X->RRDeleteOutputMode($output, $mode)
$X->RRGetCrtcInfo($ctrc,$config_time)
=>
($status, $timestamp, $x, $y, $width, $height, $mode, $current_randr,
$possible_rotations, $outputs, $possible_outputs)
$outputs => [ $output, ... ]
$possible_outputs => [ $output, ... ]
$X->RRSetCrtcConfig($ctrc, $time, $config_time, $x, $y, $mode, $randr,
@outputs)
=>
($status, $new_time)
$X->RRGetCrtcGammaSize($crtc)
=>
($size)
$X->RRGetCrtcGamma($crtc)
=>
($crtc, $reds, $greens, $blues)
$X->RRSetCrtcGamma($crtc,@reds,@greens,@blues)
$X->RRGetScreenResourcesCurrent($window)
=>
($time, $config_time, $crtcs, $outputs, $modeinfos)
$crtcs => [ $crtc, ... ]
$outputs => [ $output, ... ]
$modeinfos => [ $modeinfo, ... ]
$modeinfo => [ $id, $width, $height, $dot_clock, $h_sync_start,
$h_sync_end, $h_total, $h_skew, $v_sync_start,
$v_sync_end, $v_total, $mod_flags, $name ]
$mode_flags => $ModeFlag # mask
$X->RRSetCrtcTransform($ctrc,$transform,$filter,@params)
$X->RRGetCrtcTransform($crtc)
=>
($pending, $has_transforms, $current, $pending_filter, $current_filter)
$pending_filter => [ $filter, @params ]
$current_filter => [ $filter, @params ]
$X->RRGetPanning($crtc)
=>
($status, $time, $left, $top, $width, $height, $track_left, $track_top,
$track_width, $track_height, $border_left, $border_top, $border_right,
$border_bottom)
$X->RRSetPanning($crtc, $time, $left, $top, $width, $height,
$track_left, $track_top, $track_width, $track_height,
$border_left, $border_top, $border_right, $border_bottom)
=>
($status, $new_time)
$X->RRSetOutputPrimary($window, $output)
$X->RRGetOutputPrimary($window)
=>
($length, $output, @pads)
EVENTS
X11::Protocol::Ext::RANDR provides the following events:
The following events were added in Version 1.0 of the specification. This event uses a single event number.
RRScreenChangeNotify => {
name=>'RRScreenChangeNotify',
new_rotation_and_reflection=>$rotation, # Rotation
timestamp=>$timestamp,
configuration_timestamp=>$timestamp,
root_window=>$window,
request_window=>$window,
size_id=>$sizeid, # SizeID
subpixel_order_defined_in_render=>$subpixelorder,
width_in_pixels=>$width,
height_in_pixels=>$height,
width_in_millimeters=>$width_mm,
height_in_millimeters=>$height_mm}
The following events were added in Version 1.2 of the specification. Unfortunately they chose to multiplex the events under only one additional event number. Therefore, the format of these events depend on the value of the sub_code
field which is of type RR1dot2EventType
.
RRCrtcChangeNotify => {
name=>'RR1dot2EventNotify',
sub_code=>$RR1dot2EventType, # 0 or 'RRCrtcChangeNotify'
timestamp=>$timestamp,
request_window=>$window,
crtc_affected=>$crtc,
mode_in_use=>$mode, # Mode
new_rotation_and_reflection=>$rotation, # Rotation
x=>$x,
y=>$y,
width=>$width,
height=>$height}
RROutputChangeNotify => {
name=>'RR1dot2EventNotify',
sub_code=>$RR1dot2EventType, # 1 or 'RROutputChangeNotify
timestamp=>$time,
configuration_timestamp=>$config_time,
request_window=>$window,
output_affected=>$output,
crtc_in_use=>$crtc,
mode_in_use=>$mode,
rotation_in_use=>$rotation, # Rotation
connection_status=>$status, # Connection
subpixel_order=>$subpixel_order}
RROutputPropertyNotify => {
name=>'RR1dot2EventNotify',
sub_code=>$RR1dot2EventType, # 2 or 'RROutputPropertyNotify
window=>$window,
output=>$output,
atom=>$atom,
timestamp=>$time}
BUGS
Probably lots: this module has not been thoroughly tested. At least it loads and initializes on server supporting the correct version.
AUTHOR
Brian Bidulock <bidulock@openss7.org>
SEE ALSO
perl(1), X11::Protocol(3pm), X Synchronization Extension Protocol.