2012-05-06 00:22:24 +02:00
|
|
|
package xgb
|
|
|
|
|
|
|
|
/*
|
2012-05-06 09:06:48 +02:00
|
|
|
This file was generated by randr.xml on May 6 2012 3:00:44am EDT.
|
2012-05-06 00:22:24 +02:00
|
|
|
This file is automatically generated. Edit at your peril!
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Imports are not necessary for XGB because everything is
|
|
|
|
// in one package. They are still listed here for reference.
|
|
|
|
// import "xproto"
|
|
|
|
// import "render"
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Int32'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Void'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Byte'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Int8'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Card16'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Char'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Card32'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Double'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Bool'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Float'
|
|
|
|
|
2012-05-06 09:06:48 +02:00
|
|
|
// Skipping definition for base type 'Id'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Card8'
|
|
|
|
|
|
|
|
// Skipping definition for base type 'Int16'
|
|
|
|
|
2012-05-06 00:22:24 +02:00
|
|
|
const (
|
|
|
|
RandrRotationRotate0 = 1
|
|
|
|
RandrRotationRotate90 = 2
|
|
|
|
RandrRotationRotate180 = 4
|
|
|
|
RandrRotationRotate270 = 8
|
|
|
|
RandrRotationReflectX = 16
|
|
|
|
RandrRotationReflectY = 32
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RandrSetConfigSuccess = 0
|
|
|
|
RandrSetConfigInvalidConfigTime = 1
|
|
|
|
RandrSetConfigInvalidTime = 2
|
|
|
|
RandrSetConfigFailed = 3
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RandrNotifyMaskScreenChange = 1
|
|
|
|
RandrNotifyMaskCrtcChange = 2
|
|
|
|
RandrNotifyMaskOutputChange = 4
|
|
|
|
RandrNotifyMaskOutputProperty = 8
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RandrModeFlagHsyncPositive = 1
|
|
|
|
RandrModeFlagHsyncNegative = 2
|
|
|
|
RandrModeFlagVsyncPositive = 4
|
|
|
|
RandrModeFlagVsyncNegative = 8
|
|
|
|
RandrModeFlagInterlace = 16
|
|
|
|
RandrModeFlagDoubleScan = 32
|
|
|
|
RandrModeFlagCsync = 64
|
|
|
|
RandrModeFlagCsyncPositive = 128
|
|
|
|
RandrModeFlagCsyncNegative = 256
|
|
|
|
RandrModeFlagHskewPresent = 512
|
|
|
|
RandrModeFlagBcast = 1024
|
|
|
|
RandrModeFlagPixelMultiplex = 2048
|
|
|
|
RandrModeFlagDoubleClock = 4096
|
|
|
|
RandrModeFlagHalveClock = 8192
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RandrConnectionConnected = 0
|
|
|
|
RandrConnectionDisconnected = 1
|
|
|
|
RandrConnectionUnknown = 2
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RandrNotifyCrtcChange = 0
|
|
|
|
RandrNotifyOutputChange = 1
|
|
|
|
RandrNotifyOutputProperty = 2
|
|
|
|
)
|
|
|
|
|
|
|
|
// Skipping resource definition of 'Mode'
|
|
|
|
|
|
|
|
// Skipping resource definition of 'Crtc'
|
|
|
|
|
|
|
|
// Skipping resource definition of 'Output'
|
|
|
|
|
|
|
|
// 'RandrScreenSize' struct definition
|
|
|
|
// Size: 8
|
|
|
|
type RandrScreenSize struct {
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
Mwidth uint16
|
|
|
|
Mheight uint16
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrScreenSize
|
|
|
|
func ReadRandrScreenSize(buf []byte, v *RandrScreenSize) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Mwidth = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Mheight = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrScreenSize
|
|
|
|
func ReadRandrScreenSizeList(buf []byte, dest []RandrScreenSize) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrScreenSize{}
|
|
|
|
b += ReadRandrScreenSize(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrScreenSize
|
|
|
|
func (v RandrScreenSize) Bytes() []byte {
|
|
|
|
buf := make([]byte, 8)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Mwidth)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Mheight)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrScreenSize
|
|
|
|
func RandrScreenSizeListBytes(buf []byte, list []RandrScreenSize) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// 'RandrRefreshRates' struct definition
|
|
|
|
// Size: (2 + pad((int(NRates) * 2)))
|
|
|
|
type RandrRefreshRates struct {
|
|
|
|
NRates uint16
|
|
|
|
Rates []uint16 // size: pad((int(NRates) * 2))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrRefreshRates
|
|
|
|
func ReadRandrRefreshRates(buf []byte, v *RandrRefreshRates) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.NRates = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Rates = make([]uint16, v.NRates)
|
|
|
|
for i := 0; i < int(v.NRates); i++ {
|
|
|
|
v.Rates[i] = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrRefreshRates
|
|
|
|
func ReadRandrRefreshRatesList(buf []byte, dest []RandrRefreshRates) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrRefreshRates{}
|
|
|
|
b += ReadRandrRefreshRates(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrRefreshRates
|
|
|
|
func (v RandrRefreshRates) Bytes() []byte {
|
|
|
|
buf := make([]byte, (2 + pad((int(v.NRates) * 2))))
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put16(buf[b:], v.NRates)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
for i := 0; i < int(v.NRates); i++ {
|
|
|
|
Put16(buf[b:], v.Rates[i])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrRefreshRates
|
|
|
|
func RandrRefreshRatesListBytes(buf []byte, list []RandrRefreshRates) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list size RandrRefreshRates
|
|
|
|
func RandrRefreshRatesListSize(list []RandrRefreshRates) int {
|
|
|
|
size := 0
|
|
|
|
for _, item := range list {
|
|
|
|
size += (2 + pad((int(item.NRates) * 2)))
|
|
|
|
}
|
|
|
|
return size
|
|
|
|
}
|
|
|
|
|
|
|
|
// 'RandrModeInfo' struct definition
|
|
|
|
// Size: 32
|
|
|
|
type RandrModeInfo struct {
|
|
|
|
Id uint32
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
DotClock uint32
|
|
|
|
HsyncStart uint16
|
|
|
|
HsyncEnd uint16
|
|
|
|
Htotal uint16
|
|
|
|
Hskew uint16
|
|
|
|
VsyncStart uint16
|
|
|
|
VsyncEnd uint16
|
|
|
|
Vtotal uint16
|
|
|
|
NameLen uint16
|
|
|
|
ModeFlags uint32
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrModeInfo
|
|
|
|
func ReadRandrModeInfo(buf []byte, v *RandrModeInfo) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.Id = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.DotClock = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.HsyncStart = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.HsyncEnd = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Htotal = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Hskew = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.VsyncStart = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.VsyncEnd = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Vtotal = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NameLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.ModeFlags = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrModeInfo
|
|
|
|
func ReadRandrModeInfoList(buf []byte, dest []RandrModeInfo) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrModeInfo{}
|
|
|
|
b += ReadRandrModeInfo(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrModeInfo
|
|
|
|
func (v RandrModeInfo) Bytes() []byte {
|
|
|
|
buf := make([]byte, 32)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put32(buf[b:], v.Id)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], v.DotClock)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], v.HsyncStart)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.HsyncEnd)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Htotal)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Hskew)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.VsyncStart)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.VsyncEnd)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Vtotal)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.NameLen)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], v.ModeFlags)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrModeInfo
|
|
|
|
func RandrModeInfoListBytes(buf []byte, list []RandrModeInfo) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// 'RandrCrtcChange' struct definition
|
|
|
|
// Size: 28
|
|
|
|
type RandrCrtcChange struct {
|
|
|
|
Timestamp Timestamp
|
|
|
|
Window Id
|
|
|
|
Crtc Id
|
|
|
|
Mode Id
|
|
|
|
Rotation uint16
|
|
|
|
// padding: 2 bytes
|
|
|
|
X int16
|
|
|
|
Y int16
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrCrtcChange
|
|
|
|
func ReadRandrCrtcChange(buf []byte, v *RandrCrtcChange) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Window = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Crtc = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Mode = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Rotation = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
v.X = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Y = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrCrtcChange
|
|
|
|
func ReadRandrCrtcChangeList(buf []byte, dest []RandrCrtcChange) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrCrtcChange{}
|
|
|
|
b += ReadRandrCrtcChange(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrCrtcChange
|
|
|
|
func (v RandrCrtcChange) Bytes() []byte {
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Rotation)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(v.X))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(v.Y))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrCrtcChange
|
|
|
|
func RandrCrtcChangeListBytes(buf []byte, list []RandrCrtcChange) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// 'RandrOutputChange' struct definition
|
|
|
|
// Size: 28
|
|
|
|
type RandrOutputChange struct {
|
|
|
|
Timestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
Window Id
|
|
|
|
Output Id
|
|
|
|
Crtc Id
|
|
|
|
Mode Id
|
|
|
|
Rotation uint16
|
|
|
|
Connection byte
|
|
|
|
SubpixelOrder byte
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrOutputChange
|
|
|
|
func ReadRandrOutputChange(buf []byte, v *RandrOutputChange) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Window = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Output = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Crtc = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Mode = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Rotation = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Connection = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.SubpixelOrder = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrOutputChange
|
|
|
|
func ReadRandrOutputChangeList(buf []byte, dest []RandrOutputChange) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrOutputChange{}
|
|
|
|
b += ReadRandrOutputChange(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrOutputChange
|
|
|
|
func (v RandrOutputChange) Bytes() []byte {
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Rotation)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
buf[b] = v.Connection
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = v.SubpixelOrder
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrOutputChange
|
|
|
|
func RandrOutputChangeListBytes(buf []byte, list []RandrOutputChange) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// 'RandrOutputProperty' struct definition
|
|
|
|
// Size: 28
|
|
|
|
type RandrOutputProperty struct {
|
|
|
|
Window Id
|
|
|
|
Output Id
|
|
|
|
Atom Id
|
|
|
|
Timestamp Timestamp
|
|
|
|
Status byte
|
|
|
|
// padding: 11 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct read RandrOutputProperty
|
|
|
|
func ReadRandrOutputProperty(buf []byte, v *RandrOutputProperty) int {
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
v.Window = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Output = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Atom = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 11 // padding
|
|
|
|
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct list read RandrOutputProperty
|
|
|
|
func ReadRandrOutputPropertyList(buf []byte, dest []RandrOutputProperty) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrOutputProperty{}
|
|
|
|
b += ReadRandrOutputProperty(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Struct write RandrOutputProperty
|
|
|
|
func (v RandrOutputProperty) Bytes() []byte {
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Atom))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
buf[b] = v.Status
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 11 // padding
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write struct list RandrOutputProperty
|
|
|
|
func RandrOutputPropertyListBytes(buf []byte, list []RandrOutputProperty) int {
|
|
|
|
b := 0
|
|
|
|
var structBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
structBytes = item.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union definition RandrNotifyDataUnion
|
|
|
|
// Note that to *create* a Union, you should *never* create
|
|
|
|
// this struct directly (unless you know what you're doing).
|
|
|
|
// Instead use one of the following constructors for 'RandrNotifyDataUnion':
|
|
|
|
// NewRandrNotifyDataUnionCc(Cc RandrCrtcChange) RandrNotifyDataUnion
|
|
|
|
// NewRandrNotifyDataUnionOc(Oc RandrOutputChange) RandrNotifyDataUnion
|
|
|
|
// NewRandrNotifyDataUnionOp(Op RandrOutputProperty) RandrNotifyDataUnion
|
|
|
|
type RandrNotifyDataUnion struct {
|
|
|
|
Cc RandrCrtcChange
|
|
|
|
Oc RandrOutputChange
|
|
|
|
Op RandrOutputProperty
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union constructor for RandrNotifyDataUnion for field Cc.
|
|
|
|
func NewRandrNotifyDataUnionCc(Cc RandrCrtcChange) RandrNotifyDataUnion {
|
|
|
|
var b int
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := Cc.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create the Union type
|
|
|
|
v := RandrNotifyDataUnion{}
|
|
|
|
|
|
|
|
// Now copy buf into all fields
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Cc = RandrCrtcChange{}
|
|
|
|
b += ReadRandrCrtcChange(buf[b:], &v.Cc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Oc = RandrOutputChange{}
|
|
|
|
b += ReadRandrOutputChange(buf[b:], &v.Oc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Op = RandrOutputProperty{}
|
|
|
|
b += ReadRandrOutputProperty(buf[b:], &v.Op)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union constructor for RandrNotifyDataUnion for field Oc.
|
|
|
|
func NewRandrNotifyDataUnionOc(Oc RandrOutputChange) RandrNotifyDataUnion {
|
|
|
|
var b int
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := Oc.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create the Union type
|
|
|
|
v := RandrNotifyDataUnion{}
|
|
|
|
|
|
|
|
// Now copy buf into all fields
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Cc = RandrCrtcChange{}
|
|
|
|
b += ReadRandrCrtcChange(buf[b:], &v.Cc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Oc = RandrOutputChange{}
|
|
|
|
b += ReadRandrOutputChange(buf[b:], &v.Oc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Op = RandrOutputProperty{}
|
|
|
|
b += ReadRandrOutputProperty(buf[b:], &v.Op)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union constructor for RandrNotifyDataUnion for field Op.
|
|
|
|
func NewRandrNotifyDataUnionOp(Op RandrOutputProperty) RandrNotifyDataUnion {
|
|
|
|
var b int
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := Op.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create the Union type
|
|
|
|
v := RandrNotifyDataUnion{}
|
|
|
|
|
|
|
|
// Now copy buf into all fields
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Cc = RandrCrtcChange{}
|
|
|
|
b += ReadRandrCrtcChange(buf[b:], &v.Cc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Oc = RandrOutputChange{}
|
|
|
|
b += ReadRandrOutputChange(buf[b:], &v.Oc)
|
|
|
|
|
|
|
|
b = 0 // always read the same bytes
|
|
|
|
v.Op = RandrOutputProperty{}
|
|
|
|
b += ReadRandrOutputProperty(buf[b:], &v.Op)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union read RandrNotifyDataUnion
|
|
|
|
func ReadRandrNotifyDataUnion(buf []byte, v *RandrNotifyDataUnion) int {
|
|
|
|
var b int
|
|
|
|
|
|
|
|
b = 0 // re-read the same bytes
|
|
|
|
v.Cc = RandrCrtcChange{}
|
|
|
|
b += ReadRandrCrtcChange(buf[b:], &v.Cc)
|
|
|
|
|
|
|
|
b = 0 // re-read the same bytes
|
|
|
|
v.Oc = RandrOutputChange{}
|
|
|
|
b += ReadRandrOutputChange(buf[b:], &v.Oc)
|
|
|
|
|
|
|
|
b = 0 // re-read the same bytes
|
|
|
|
v.Op = RandrOutputProperty{}
|
|
|
|
b += ReadRandrOutputProperty(buf[b:], &v.Op)
|
|
|
|
|
|
|
|
return 28
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union list read RandrNotifyDataUnion
|
|
|
|
func ReadRandrNotifyDataUnionList(buf []byte, dest []RandrNotifyDataUnion) int {
|
|
|
|
b := 0
|
|
|
|
for i := 0; i < len(dest); i++ {
|
|
|
|
dest[i] = RandrNotifyDataUnion{}
|
|
|
|
b += ReadRandrNotifyDataUnion(buf[b:], &dest[i])
|
|
|
|
}
|
|
|
|
return pad(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union write RandrNotifyDataUnion
|
|
|
|
// Each field in a union must contain the same data.
|
|
|
|
// So simply pick the first field and write that to the wire.
|
|
|
|
func (v RandrNotifyDataUnion) Bytes() []byte {
|
|
|
|
buf := make([]byte, 28)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := v.Cc.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Union list write RandrNotifyDataUnion
|
|
|
|
func RandrNotifyDataUnionListBytes(buf []byte, list []RandrNotifyDataUnion) int {
|
|
|
|
b := 0
|
|
|
|
var unionBytes []byte
|
|
|
|
for _, item := range list {
|
|
|
|
unionBytes = item.Bytes()
|
|
|
|
copy(buf[b:], unionBytes)
|
|
|
|
b += pad(len(unionBytes))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event definition RandrScreenChangeNotify (0)
|
|
|
|
// Size: 32
|
|
|
|
|
|
|
|
const RandrScreenChangeNotify = 0
|
|
|
|
|
|
|
|
type RandrScreenChangeNotifyEvent struct {
|
|
|
|
Sequence uint16
|
|
|
|
Rotation byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
Root Id
|
|
|
|
RequestWindow Id
|
|
|
|
SizeID uint16
|
|
|
|
SubpixelOrder uint16
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
Mwidth uint16
|
|
|
|
Mheight uint16
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event read RandrScreenChangeNotify
|
|
|
|
func NewRandrScreenChangeNotifyEvent(buf []byte) Event {
|
|
|
|
v := RandrScreenChangeNotifyEvent{}
|
|
|
|
b := 1 // don't read event number
|
|
|
|
|
|
|
|
v.Rotation = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Root = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.RequestWindow = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.SizeID = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.SubpixelOrder = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Mwidth = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Mheight = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event write RandrScreenChangeNotify
|
|
|
|
func (v RandrScreenChangeNotifyEvent) Bytes() []byte {
|
|
|
|
buf := make([]byte, 32)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
// write event number
|
|
|
|
buf[b] = 0
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = v.Rotation
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 2 // skip sequence number
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.Root))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(v.RequestWindow))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], v.SizeID)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.SubpixelOrder)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Mwidth)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], v.Mheight)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v RandrScreenChangeNotifyEvent) ImplementsEvent() {}
|
|
|
|
|
|
|
|
func (v RandrScreenChangeNotifyEvent) SequenceId() uint16 {
|
|
|
|
return v.Sequence
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v RandrScreenChangeNotifyEvent) String() string {
|
|
|
|
fieldVals := make([]string, 0, 11)
|
|
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", v.Sequence))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Rotation: %d", v.Rotation))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Timestamp: %d", v.Timestamp))
|
|
|
|
fieldVals = append(fieldVals, sprintf("ConfigTimestamp: %d", v.ConfigTimestamp))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Root: %d", v.Root))
|
|
|
|
fieldVals = append(fieldVals, sprintf("RequestWindow: %d", v.RequestWindow))
|
|
|
|
fieldVals = append(fieldVals, sprintf("SizeID: %d", v.SizeID))
|
|
|
|
fieldVals = append(fieldVals, sprintf("SubpixelOrder: %d", v.SubpixelOrder))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Width: %d", v.Width))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Height: %d", v.Height))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Mwidth: %d", v.Mwidth))
|
|
|
|
fieldVals = append(fieldVals, sprintf("Mheight: %d", v.Mheight))
|
|
|
|
return "RandrScreenChangeNotify {" + stringsJoin(fieldVals, ", ") + "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
newEventFuncs[0] = NewRandrScreenChangeNotifyEvent
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event definition RandrNotify (1)
|
|
|
|
// Size: 32
|
|
|
|
|
|
|
|
const RandrNotify = 1
|
|
|
|
|
|
|
|
type RandrNotifyEvent struct {
|
|
|
|
Sequence uint16
|
|
|
|
SubCode byte
|
|
|
|
U RandrNotifyDataUnion
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event read RandrNotify
|
|
|
|
func NewRandrNotifyEvent(buf []byte) Event {
|
|
|
|
v := RandrNotifyEvent{}
|
|
|
|
b := 1 // don't read event number
|
|
|
|
|
|
|
|
v.SubCode = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.U = RandrNotifyDataUnion{}
|
|
|
|
b += ReadRandrNotifyDataUnion(buf[b:], &v.U)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
// Event write RandrNotify
|
|
|
|
func (v RandrNotifyEvent) Bytes() []byte {
|
|
|
|
buf := make([]byte, 32)
|
|
|
|
b := 0
|
|
|
|
|
|
|
|
// write event number
|
|
|
|
buf[b] = 1
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = v.SubCode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 2 // skip sequence number
|
|
|
|
|
|
|
|
{
|
|
|
|
unionBytes := v.U.Bytes()
|
|
|
|
copy(buf[b:], unionBytes)
|
|
|
|
b += pad(len(unionBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v RandrNotifyEvent) ImplementsEvent() {}
|
|
|
|
|
|
|
|
func (v RandrNotifyEvent) SequenceId() uint16 {
|
|
|
|
return v.Sequence
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v RandrNotifyEvent) String() string {
|
|
|
|
fieldVals := make([]string, 0, 2)
|
|
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", v.Sequence))
|
|
|
|
fieldVals = append(fieldVals, sprintf("SubCode: %d", v.SubCode))
|
|
|
|
return "RandrNotify {" + stringsJoin(fieldVals, ", ") + "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
newEventFuncs[1] = NewRandrNotifyEvent
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error definition RandrBadOutput (0)
|
|
|
|
// Size: 32
|
|
|
|
|
|
|
|
const BadRandrBadOutput = 0
|
|
|
|
|
|
|
|
type RandrBadOutputError struct {
|
|
|
|
Sequence uint16
|
|
|
|
NiceName string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error read RandrBadOutput
|
|
|
|
func NewRandrBadOutputError(buf []byte) Error {
|
|
|
|
v := RandrBadOutputError{}
|
|
|
|
v.NiceName = "RandrBadOutput"
|
|
|
|
|
|
|
|
b := 1 // skip error determinant
|
|
|
|
b += 1 // don't read error number
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadOutputError) ImplementsError() {}
|
|
|
|
|
|
|
|
func (err RandrBadOutputError) SequenceId() uint16 {
|
|
|
|
return err.Sequence
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadOutputError) BadId() Id {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadOutputError) Error() string {
|
|
|
|
fieldVals := make([]string, 0, 0)
|
|
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", err.Sequence))
|
|
|
|
return "BadRandrBadOutput {" + stringsJoin(fieldVals, ", ") + "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
newErrorFuncs[0] = NewRandrBadOutputError
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error definition RandrBadCrtc (1)
|
|
|
|
// Size: 32
|
|
|
|
|
|
|
|
const BadRandrBadCrtc = 1
|
|
|
|
|
|
|
|
type RandrBadCrtcError struct {
|
|
|
|
Sequence uint16
|
|
|
|
NiceName string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error read RandrBadCrtc
|
|
|
|
func NewRandrBadCrtcError(buf []byte) Error {
|
|
|
|
v := RandrBadCrtcError{}
|
|
|
|
v.NiceName = "RandrBadCrtc"
|
|
|
|
|
|
|
|
b := 1 // skip error determinant
|
|
|
|
b += 1 // don't read error number
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadCrtcError) ImplementsError() {}
|
|
|
|
|
|
|
|
func (err RandrBadCrtcError) SequenceId() uint16 {
|
|
|
|
return err.Sequence
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadCrtcError) BadId() Id {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadCrtcError) Error() string {
|
|
|
|
fieldVals := make([]string, 0, 0)
|
|
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", err.Sequence))
|
|
|
|
return "BadRandrBadCrtc {" + stringsJoin(fieldVals, ", ") + "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
newErrorFuncs[1] = NewRandrBadCrtcError
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error definition RandrBadMode (2)
|
|
|
|
// Size: 32
|
|
|
|
|
|
|
|
const BadRandrBadMode = 2
|
|
|
|
|
|
|
|
type RandrBadModeError struct {
|
|
|
|
Sequence uint16
|
|
|
|
NiceName string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error read RandrBadMode
|
|
|
|
func NewRandrBadModeError(buf []byte) Error {
|
|
|
|
v := RandrBadModeError{}
|
|
|
|
v.NiceName = "RandrBadMode"
|
|
|
|
|
|
|
|
b := 1 // skip error determinant
|
|
|
|
b += 1 // don't read error number
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadModeError) ImplementsError() {}
|
|
|
|
|
|
|
|
func (err RandrBadModeError) SequenceId() uint16 {
|
|
|
|
return err.Sequence
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadModeError) BadId() Id {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err RandrBadModeError) Error() string {
|
|
|
|
fieldVals := make([]string, 0, 0)
|
|
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", err.Sequence))
|
|
|
|
return "BadRandrBadMode {" + stringsJoin(fieldVals, ", ") + "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
newErrorFuncs[2] = NewRandrBadModeError
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrQueryVersion
|
|
|
|
// size: 12
|
|
|
|
type RandrQueryVersionCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrQueryVersion(MajorVersion uint32, MinorVersion uint32) RandrQueryVersionCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrQueryVersionRequest(MajorVersion, MinorVersion), cookie)
|
|
|
|
return RandrQueryVersionCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrQueryVersionUnchecked(MajorVersion uint32, MinorVersion uint32) RandrQueryVersionCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrQueryVersionRequest(MajorVersion, MinorVersion), cookie)
|
|
|
|
return RandrQueryVersionCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrQueryVersion
|
|
|
|
// size: 32
|
|
|
|
type RandrQueryVersionReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
MajorVersion uint32
|
|
|
|
MinorVersion uint32
|
|
|
|
// padding: 16 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrQueryVersion
|
|
|
|
func (cook RandrQueryVersionCookie) Reply() (*RandrQueryVersionReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrQueryVersionReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrQueryVersion
|
|
|
|
func randrQueryVersionReply(buf []byte) *RandrQueryVersionReply {
|
|
|
|
v := new(RandrQueryVersionReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.MajorVersion = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.MinorVersion = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
b += 16 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrQueryVersionCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrQueryVersion
|
|
|
|
func (c *Conn) randrQueryVersionRequest(MajorVersion uint32, MinorVersion uint32) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 0 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], MajorVersion)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], MinorVersion)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetScreenConfig
|
|
|
|
// size: 24
|
|
|
|
type RandrSetScreenConfigCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetScreenConfig(Window Id, Timestamp Timestamp, ConfigTimestamp Timestamp, SizeID uint16, Rotation uint16, Rate uint16) RandrSetScreenConfigCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrSetScreenConfigRequest(Window, Timestamp, ConfigTimestamp, SizeID, Rotation, Rate), cookie)
|
|
|
|
return RandrSetScreenConfigCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetScreenConfigUnchecked(Window Id, Timestamp Timestamp, ConfigTimestamp Timestamp, SizeID uint16, Rotation uint16, Rate uint16) RandrSetScreenConfigCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrSetScreenConfigRequest(Window, Timestamp, ConfigTimestamp, SizeID, Rotation, Rate), cookie)
|
|
|
|
return RandrSetScreenConfigCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrSetScreenConfig
|
|
|
|
// size: 32
|
|
|
|
type RandrSetScreenConfigReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
NewTimestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
Root Id
|
|
|
|
SubpixelOrder uint16
|
|
|
|
// padding: 10 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrSetScreenConfig
|
|
|
|
func (cook RandrSetScreenConfigCookie) Reply() (*RandrSetScreenConfigReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrSetScreenConfigReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrSetScreenConfig
|
|
|
|
func randrSetScreenConfigReply(buf []byte) *RandrSetScreenConfigReply {
|
|
|
|
v := new(RandrSetScreenConfigReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NewTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Root = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.SubpixelOrder = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 10 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetScreenConfigCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetScreenConfig
|
|
|
|
func (c *Conn) randrSetScreenConfigRequest(Window Id, Timestamp Timestamp, ConfigTimestamp Timestamp, SizeID uint16, Rotation uint16, Rate uint16) []byte {
|
|
|
|
size := 24
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 2 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], SizeID)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Rotation)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Rate)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSelectInput
|
|
|
|
// size: 12
|
|
|
|
type RandrSelectInputCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSelectInput
|
|
|
|
func (c *Conn) RandrSelectInput(Window Id, Enable uint16) RandrSelectInputCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrSelectInputRequest(Window, Enable), cookie)
|
|
|
|
return RandrSelectInputCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSelectInputChecked(Window Id, Enable uint16) RandrSelectInputCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrSelectInputRequest(Window, Enable), cookie)
|
|
|
|
return RandrSelectInputCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSelectInputCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSelectInput
|
|
|
|
func (c *Conn) randrSelectInputRequest(Window Id, Enable uint16) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 4 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], Enable)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetScreenInfo
|
|
|
|
// size: 8
|
|
|
|
type RandrGetScreenInfoCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenInfo(Window Id) RandrGetScreenInfoCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetScreenInfoRequest(Window), cookie)
|
|
|
|
return RandrGetScreenInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenInfoUnchecked(Window Id) RandrGetScreenInfoCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetScreenInfoRequest(Window), cookie)
|
|
|
|
return RandrGetScreenInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetScreenInfo
|
|
|
|
// size: ((32 + pad((int(NSizes) * 8))) + RandrRefreshRatesListSize(Rates))
|
|
|
|
type RandrGetScreenInfoReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Rotations byte
|
|
|
|
Root Id
|
|
|
|
Timestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
NSizes uint16
|
|
|
|
SizeID uint16
|
|
|
|
Rotation uint16
|
|
|
|
Rate uint16
|
|
|
|
NInfo uint16
|
|
|
|
// padding: 2 bytes
|
|
|
|
Sizes []RandrScreenSize // size: pad((int(NSizes) * 8))
|
|
|
|
Rates []RandrRefreshRates // size: RandrRefreshRatesListSize(Rates)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetScreenInfo
|
|
|
|
func (cook RandrGetScreenInfoCookie) Reply() (*RandrGetScreenInfoReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetScreenInfoReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetScreenInfo
|
|
|
|
func randrGetScreenInfoReply(buf []byte) *RandrGetScreenInfoReply {
|
|
|
|
v := new(RandrGetScreenInfoReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Rotations = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Root = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NSizes = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.SizeID = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Rotation = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Rate = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NInfo = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
v.Sizes = make([]RandrScreenSize, v.NSizes)
|
|
|
|
b += ReadRandrScreenSizeList(buf[b:], v.Sizes)
|
|
|
|
|
|
|
|
v.Rates = make([]RandrRefreshRates, (int(v.NInfo) - int(v.NSizes)))
|
|
|
|
b += ReadRandrRefreshRatesList(buf[b:], v.Rates)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetScreenInfoCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetScreenInfo
|
|
|
|
func (c *Conn) randrGetScreenInfoRequest(Window Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 5 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetScreenSizeRange
|
|
|
|
// size: 8
|
|
|
|
type RandrGetScreenSizeRangeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenSizeRange(Window Id) RandrGetScreenSizeRangeCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetScreenSizeRangeRequest(Window), cookie)
|
|
|
|
return RandrGetScreenSizeRangeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenSizeRangeUnchecked(Window Id) RandrGetScreenSizeRangeCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetScreenSizeRangeRequest(Window), cookie)
|
|
|
|
return RandrGetScreenSizeRangeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetScreenSizeRange
|
|
|
|
// size: 32
|
|
|
|
type RandrGetScreenSizeRangeReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
MinWidth uint16
|
|
|
|
MinHeight uint16
|
|
|
|
MaxWidth uint16
|
|
|
|
MaxHeight uint16
|
|
|
|
// padding: 16 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetScreenSizeRange
|
|
|
|
func (cook RandrGetScreenSizeRangeCookie) Reply() (*RandrGetScreenSizeRangeReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetScreenSizeRangeReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetScreenSizeRange
|
|
|
|
func randrGetScreenSizeRangeReply(buf []byte) *RandrGetScreenSizeRangeReply {
|
|
|
|
v := new(RandrGetScreenSizeRangeReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.MinWidth = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.MinHeight = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.MaxWidth = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.MaxHeight = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 16 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetScreenSizeRangeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetScreenSizeRange
|
|
|
|
func (c *Conn) randrGetScreenSizeRangeRequest(Window Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 6 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetScreenSize
|
|
|
|
// size: 20
|
|
|
|
type RandrSetScreenSizeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetScreenSize
|
|
|
|
func (c *Conn) RandrSetScreenSize(Window Id, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) RandrSetScreenSizeCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrSetScreenSizeRequest(Window, Width, Height, MmWidth, MmHeight), cookie)
|
|
|
|
return RandrSetScreenSizeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetScreenSizeChecked(Window Id, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) RandrSetScreenSizeCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrSetScreenSizeRequest(Window, Width, Height, MmWidth, MmHeight), cookie)
|
|
|
|
return RandrSetScreenSizeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetScreenSizeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetScreenSize
|
|
|
|
func (c *Conn) randrSetScreenSizeRequest(Window Id, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) []byte {
|
|
|
|
size := 20
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 7 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], MmWidth)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], MmHeight)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetScreenResources
|
|
|
|
// size: 8
|
|
|
|
type RandrGetScreenResourcesCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenResources(Window Id) RandrGetScreenResourcesCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetScreenResourcesRequest(Window), cookie)
|
|
|
|
return RandrGetScreenResourcesCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenResourcesUnchecked(Window Id) RandrGetScreenResourcesCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetScreenResourcesRequest(Window), cookie)
|
|
|
|
return RandrGetScreenResourcesCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetScreenResources
|
|
|
|
// size: ((((32 + pad((int(NumCrtcs) * 4))) + pad((int(NumOutputs) * 4))) + pad((int(NumModes) * 32))) + pad((int(NamesLen) * 1)))
|
|
|
|
type RandrGetScreenResourcesReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Timestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
NumCrtcs uint16
|
|
|
|
NumOutputs uint16
|
|
|
|
NumModes uint16
|
|
|
|
NamesLen uint16
|
|
|
|
// padding: 8 bytes
|
|
|
|
Crtcs []Id // size: pad((int(NumCrtcs) * 4))
|
|
|
|
Outputs []Id // size: pad((int(NumOutputs) * 4))
|
|
|
|
Modes []RandrModeInfo // size: pad((int(NumModes) * 32))
|
|
|
|
Names []byte // size: pad((int(NamesLen) * 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetScreenResources
|
|
|
|
func (cook RandrGetScreenResourcesCookie) Reply() (*RandrGetScreenResourcesReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetScreenResourcesReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetScreenResources
|
|
|
|
func randrGetScreenResourcesReply(buf []byte) *RandrGetScreenResourcesReply {
|
|
|
|
v := new(RandrGetScreenResourcesReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NumCrtcs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumOutputs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumModes = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NamesLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 8 // padding
|
|
|
|
|
|
|
|
v.Crtcs = make([]Id, v.NumCrtcs)
|
|
|
|
for i := 0; i < int(v.NumCrtcs); i++ {
|
|
|
|
v.Crtcs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Outputs = make([]Id, v.NumOutputs)
|
|
|
|
for i := 0; i < int(v.NumOutputs); i++ {
|
|
|
|
v.Outputs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Modes = make([]RandrModeInfo, v.NumModes)
|
|
|
|
b += ReadRandrModeInfoList(buf[b:], v.Modes)
|
|
|
|
|
|
|
|
v.Names = make([]byte, v.NamesLen)
|
|
|
|
copy(v.Names[:v.NamesLen], buf[b:])
|
|
|
|
b += pad(int(v.NamesLen))
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetScreenResourcesCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetScreenResources
|
|
|
|
func (c *Conn) randrGetScreenResourcesRequest(Window Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 8 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetOutputInfo
|
|
|
|
// size: 12
|
|
|
|
type RandrGetOutputInfoCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputInfo(Output Id, ConfigTimestamp Timestamp) RandrGetOutputInfoCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetOutputInfoRequest(Output, ConfigTimestamp), cookie)
|
|
|
|
return RandrGetOutputInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputInfoUnchecked(Output Id, ConfigTimestamp Timestamp) RandrGetOutputInfoCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetOutputInfoRequest(Output, ConfigTimestamp), cookie)
|
|
|
|
return RandrGetOutputInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetOutputInfo
|
|
|
|
// size: ((((36 + pad((int(NumCrtcs) * 4))) + pad((int(NumModes) * 4))) + pad((int(NumClones) * 4))) + pad((int(NameLen) * 1)))
|
|
|
|
type RandrGetOutputInfoReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
Crtc Id
|
|
|
|
MmWidth uint32
|
|
|
|
MmHeight uint32
|
|
|
|
Connection byte
|
|
|
|
SubpixelOrder byte
|
|
|
|
NumCrtcs uint16
|
|
|
|
NumModes uint16
|
|
|
|
NumPreferred uint16
|
|
|
|
NumClones uint16
|
|
|
|
NameLen uint16
|
|
|
|
Crtcs []Id // size: pad((int(NumCrtcs) * 4))
|
|
|
|
Modes []Id // size: pad((int(NumModes) * 4))
|
|
|
|
Clones []Id // size: pad((int(NumClones) * 4))
|
|
|
|
Name []byte // size: pad((int(NameLen) * 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetOutputInfo
|
|
|
|
func (cook RandrGetOutputInfoCookie) Reply() (*RandrGetOutputInfoReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetOutputInfoReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetOutputInfo
|
|
|
|
func randrGetOutputInfoReply(buf []byte) *RandrGetOutputInfoReply {
|
|
|
|
v := new(RandrGetOutputInfoReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Crtc = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.MmWidth = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.MmHeight = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Connection = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.SubpixelOrder = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.NumCrtcs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumModes = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumPreferred = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumClones = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NameLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Crtcs = make([]Id, v.NumCrtcs)
|
|
|
|
for i := 0; i < int(v.NumCrtcs); i++ {
|
|
|
|
v.Crtcs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Modes = make([]Id, v.NumModes)
|
|
|
|
for i := 0; i < int(v.NumModes); i++ {
|
|
|
|
v.Modes[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Clones = make([]Id, v.NumClones)
|
|
|
|
for i := 0; i < int(v.NumClones); i++ {
|
|
|
|
v.Clones[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Name = make([]byte, v.NameLen)
|
|
|
|
copy(v.Name[:v.NameLen], buf[b:])
|
|
|
|
b += pad(int(v.NameLen))
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetOutputInfoCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetOutputInfo
|
|
|
|
func (c *Conn) randrGetOutputInfoRequest(Output Id, ConfigTimestamp Timestamp) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 9 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrListOutputProperties
|
|
|
|
// size: 8
|
|
|
|
type RandrListOutputPropertiesCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrListOutputProperties(Output Id) RandrListOutputPropertiesCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrListOutputPropertiesRequest(Output), cookie)
|
|
|
|
return RandrListOutputPropertiesCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrListOutputPropertiesUnchecked(Output Id) RandrListOutputPropertiesCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrListOutputPropertiesRequest(Output), cookie)
|
|
|
|
return RandrListOutputPropertiesCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrListOutputProperties
|
|
|
|
// size: (32 + pad((int(NumAtoms) * 4)))
|
|
|
|
type RandrListOutputPropertiesReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
NumAtoms uint16
|
|
|
|
// padding: 22 bytes
|
|
|
|
Atoms []Id // size: pad((int(NumAtoms) * 4))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrListOutputProperties
|
|
|
|
func (cook RandrListOutputPropertiesCookie) Reply() (*RandrListOutputPropertiesReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrListOutputPropertiesReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrListOutputProperties
|
|
|
|
func randrListOutputPropertiesReply(buf []byte) *RandrListOutputPropertiesReply {
|
|
|
|
v := new(RandrListOutputPropertiesReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NumAtoms = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 22 // padding
|
|
|
|
|
|
|
|
v.Atoms = make([]Id, v.NumAtoms)
|
|
|
|
for i := 0; i < int(v.NumAtoms); i++ {
|
|
|
|
v.Atoms[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrListOutputPropertiesCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrListOutputProperties
|
|
|
|
func (c *Conn) randrListOutputPropertiesRequest(Output Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 10 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrQueryOutputProperty
|
|
|
|
// size: 12
|
|
|
|
type RandrQueryOutputPropertyCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrQueryOutputProperty(Output Id, Property Id) RandrQueryOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrQueryOutputPropertyRequest(Output, Property), cookie)
|
|
|
|
return RandrQueryOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrQueryOutputPropertyUnchecked(Output Id, Property Id) RandrQueryOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrQueryOutputPropertyRequest(Output, Property), cookie)
|
|
|
|
return RandrQueryOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrQueryOutputProperty
|
|
|
|
// size: (32 + pad((int(Length) * 4)))
|
|
|
|
type RandrQueryOutputPropertyReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Pending bool
|
|
|
|
Range bool
|
|
|
|
Immutable bool
|
|
|
|
// padding: 21 bytes
|
|
|
|
ValidValues []int32 // size: pad((int(Length) * 4))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrQueryOutputProperty
|
|
|
|
func (cook RandrQueryOutputPropertyCookie) Reply() (*RandrQueryOutputPropertyReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrQueryOutputPropertyReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrQueryOutputProperty
|
|
|
|
func randrQueryOutputPropertyReply(buf []byte) *RandrQueryOutputPropertyReply {
|
|
|
|
v := new(RandrQueryOutputPropertyReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
if buf[b] == 1 {
|
|
|
|
v.Pending = true
|
|
|
|
} else {
|
|
|
|
v.Pending = false
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
if buf[b] == 1 {
|
|
|
|
v.Range = true
|
|
|
|
} else {
|
|
|
|
v.Range = false
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
if buf[b] == 1 {
|
|
|
|
v.Immutable = true
|
|
|
|
} else {
|
|
|
|
v.Immutable = false
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 21 // padding
|
|
|
|
|
|
|
|
v.ValidValues = make([]int32, v.Length)
|
|
|
|
for i := 0; i < int(v.Length); i++ {
|
|
|
|
v.ValidValues[i] = int32(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrQueryOutputPropertyCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrQueryOutputProperty
|
|
|
|
func (c *Conn) randrQueryOutputPropertyRequest(Output Id, Property Id) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 11 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Property))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrConfigureOutputProperty
|
|
|
|
// size: pad((16 + pad((len(Values) * 4))))
|
|
|
|
type RandrConfigureOutputPropertyCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrConfigureOutputProperty
|
|
|
|
func (c *Conn) RandrConfigureOutputProperty(Output Id, Property Id, Pending bool, Range bool, Values []int32) RandrConfigureOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrConfigureOutputPropertyRequest(Output, Property, Pending, Range, Values), cookie)
|
|
|
|
return RandrConfigureOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrConfigureOutputPropertyChecked(Output Id, Property Id, Pending bool, Range bool, Values []int32) RandrConfigureOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrConfigureOutputPropertyRequest(Output, Property, Pending, Range, Values), cookie)
|
|
|
|
return RandrConfigureOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrConfigureOutputPropertyCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrConfigureOutputProperty
|
|
|
|
func (c *Conn) randrConfigureOutputPropertyRequest(Output Id, Property Id, Pending bool, Range bool, Values []int32) []byte {
|
|
|
|
size := pad((16 + pad((len(Values) * 4))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 12 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Property))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
if Pending {
|
|
|
|
buf[b] = 1
|
|
|
|
} else {
|
|
|
|
buf[b] = 0
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
if Range {
|
|
|
|
buf[b] = 1
|
|
|
|
} else {
|
|
|
|
buf[b] = 0
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
for i := 0; i < int(len(Values)); i++ {
|
|
|
|
Put32(buf[b:], uint32(Values[i]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrChangeOutputProperty
|
|
|
|
// size: pad((24 + pad((((int(NumUnits) * int(Format)) / 8) * 1))))
|
|
|
|
type RandrChangeOutputPropertyCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrChangeOutputProperty
|
|
|
|
func (c *Conn) RandrChangeOutputProperty(Output Id, Property Id, Type Id, Format byte, Mode byte, NumUnits uint32, Data []byte) RandrChangeOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrChangeOutputPropertyRequest(Output, Property, Type, Format, Mode, NumUnits, Data), cookie)
|
|
|
|
return RandrChangeOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrChangeOutputPropertyChecked(Output Id, Property Id, Type Id, Format byte, Mode byte, NumUnits uint32, Data []byte) RandrChangeOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrChangeOutputPropertyRequest(Output, Property, Type, Format, Mode, NumUnits, Data), cookie)
|
|
|
|
return RandrChangeOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrChangeOutputPropertyCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrChangeOutputProperty
|
|
|
|
func (c *Conn) randrChangeOutputPropertyRequest(Output Id, Property Id, Type Id, Format byte, Mode byte, NumUnits uint32, Data []byte) []byte {
|
|
|
|
size := pad((24 + pad((((int(NumUnits) * int(Format)) / 8) * 1))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 13 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Property))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Type))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
buf[b] = Format
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = Mode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
Put32(buf[b:], NumUnits)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
copy(buf[b:], Data[:((int(NumUnits)*int(Format))/8)])
|
|
|
|
b += pad(int(((int(NumUnits) * int(Format)) / 8)))
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrDeleteOutputProperty
|
|
|
|
// size: 12
|
|
|
|
type RandrDeleteOutputPropertyCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDeleteOutputProperty
|
|
|
|
func (c *Conn) RandrDeleteOutputProperty(Output Id, Property Id) RandrDeleteOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrDeleteOutputPropertyRequest(Output, Property), cookie)
|
|
|
|
return RandrDeleteOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrDeleteOutputPropertyChecked(Output Id, Property Id) RandrDeleteOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrDeleteOutputPropertyRequest(Output, Property), cookie)
|
|
|
|
return RandrDeleteOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrDeleteOutputPropertyCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDeleteOutputProperty
|
|
|
|
func (c *Conn) randrDeleteOutputPropertyRequest(Output Id, Property Id) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 14 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Property))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetOutputProperty
|
|
|
|
// size: 28
|
|
|
|
type RandrGetOutputPropertyCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputProperty(Output Id, Property Id, Type Id, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) RandrGetOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetOutputPropertyRequest(Output, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
|
|
|
|
return RandrGetOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputPropertyUnchecked(Output Id, Property Id, Type Id, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) RandrGetOutputPropertyCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetOutputPropertyRequest(Output, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
|
|
|
|
return RandrGetOutputPropertyCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetOutputProperty
|
|
|
|
// size: (32 + pad(((int(NumItems) * (int(Format) / 8)) * 1)))
|
|
|
|
type RandrGetOutputPropertyReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Format byte
|
|
|
|
Type Id
|
|
|
|
BytesAfter uint32
|
|
|
|
NumItems uint32
|
|
|
|
// padding: 12 bytes
|
|
|
|
Data []byte // size: pad(((int(NumItems) * (int(Format) / 8)) * 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetOutputProperty
|
|
|
|
func (cook RandrGetOutputPropertyCookie) Reply() (*RandrGetOutputPropertyReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetOutputPropertyReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetOutputProperty
|
|
|
|
func randrGetOutputPropertyReply(buf []byte) *RandrGetOutputPropertyReply {
|
|
|
|
v := new(RandrGetOutputPropertyReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Format = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Type = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.BytesAfter = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NumItems = Get32(buf[b:])
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
b += 12 // padding
|
|
|
|
|
|
|
|
v.Data = make([]byte, (int(v.NumItems) * (int(v.Format) / 8)))
|
|
|
|
copy(v.Data[:(int(v.NumItems)*(int(v.Format)/8))], buf[b:])
|
|
|
|
b += pad(int((int(v.NumItems) * (int(v.Format) / 8))))
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetOutputPropertyCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetOutputProperty
|
|
|
|
func (c *Conn) randrGetOutputPropertyRequest(Output Id, Property Id, Type Id, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) []byte {
|
|
|
|
size := 28
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 15 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Property))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Type))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], LongOffset)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], LongLength)
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
if Delete {
|
|
|
|
buf[b] = 1
|
|
|
|
} else {
|
|
|
|
buf[b] = 0
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
if Pending {
|
|
|
|
buf[b] = 1
|
|
|
|
} else {
|
|
|
|
buf[b] = 0
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrCreateMode
|
|
|
|
// size: pad((40 + pad((len(Name) * 1))))
|
|
|
|
type RandrCreateModeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrCreateMode(Window Id, ModeInfo RandrModeInfo, Name string) RandrCreateModeCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrCreateModeRequest(Window, ModeInfo, Name), cookie)
|
|
|
|
return RandrCreateModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrCreateModeUnchecked(Window Id, ModeInfo RandrModeInfo, Name string) RandrCreateModeCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrCreateModeRequest(Window, ModeInfo, Name), cookie)
|
|
|
|
return RandrCreateModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrCreateMode
|
|
|
|
// size: 32
|
|
|
|
type RandrCreateModeReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Mode Id
|
|
|
|
// padding: 20 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrCreateMode
|
|
|
|
func (cook RandrCreateModeCookie) Reply() (*RandrCreateModeReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrCreateModeReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrCreateMode
|
|
|
|
func randrCreateModeReply(buf []byte) *RandrCreateModeReply {
|
|
|
|
v := new(RandrCreateModeReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Mode = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
b += 20 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrCreateModeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrCreateMode
|
|
|
|
func (c *Conn) randrCreateModeRequest(Window Id, ModeInfo RandrModeInfo, Name string) []byte {
|
|
|
|
size := pad((40 + pad((len(Name) * 1))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 16 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := ModeInfo.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
copy(buf[b:], Name[:len(Name)])
|
|
|
|
b += pad(int(len(Name)))
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrDestroyMode
|
|
|
|
// size: 8
|
|
|
|
type RandrDestroyModeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDestroyMode
|
|
|
|
func (c *Conn) RandrDestroyMode(Mode Id) RandrDestroyModeCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrDestroyModeRequest(Mode), cookie)
|
|
|
|
return RandrDestroyModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrDestroyModeChecked(Mode Id) RandrDestroyModeCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrDestroyModeRequest(Mode), cookie)
|
|
|
|
return RandrDestroyModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrDestroyModeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDestroyMode
|
|
|
|
func (c *Conn) randrDestroyModeRequest(Mode Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 17 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrAddOutputMode
|
|
|
|
// size: 12
|
|
|
|
type RandrAddOutputModeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrAddOutputMode
|
|
|
|
func (c *Conn) RandrAddOutputMode(Output Id, Mode Id) RandrAddOutputModeCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrAddOutputModeRequest(Output, Mode), cookie)
|
|
|
|
return RandrAddOutputModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrAddOutputModeChecked(Output Id, Mode Id) RandrAddOutputModeCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrAddOutputModeRequest(Output, Mode), cookie)
|
|
|
|
return RandrAddOutputModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrAddOutputModeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrAddOutputMode
|
|
|
|
func (c *Conn) randrAddOutputModeRequest(Output Id, Mode Id) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 18 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrDeleteOutputMode
|
|
|
|
// size: 12
|
|
|
|
type RandrDeleteOutputModeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDeleteOutputMode
|
|
|
|
func (c *Conn) RandrDeleteOutputMode(Output Id, Mode Id) RandrDeleteOutputModeCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrDeleteOutputModeRequest(Output, Mode), cookie)
|
|
|
|
return RandrDeleteOutputModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrDeleteOutputModeChecked(Output Id, Mode Id) RandrDeleteOutputModeCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrDeleteOutputModeRequest(Output, Mode), cookie)
|
|
|
|
return RandrDeleteOutputModeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrDeleteOutputModeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrDeleteOutputMode
|
|
|
|
func (c *Conn) randrDeleteOutputModeRequest(Output Id, Mode Id) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 19 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetCrtcInfo
|
|
|
|
// size: 12
|
|
|
|
type RandrGetCrtcInfoCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcInfo(Crtc Id, ConfigTimestamp Timestamp) RandrGetCrtcInfoCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetCrtcInfoRequest(Crtc, ConfigTimestamp), cookie)
|
|
|
|
return RandrGetCrtcInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcInfoUnchecked(Crtc Id, ConfigTimestamp Timestamp) RandrGetCrtcInfoCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetCrtcInfoRequest(Crtc, ConfigTimestamp), cookie)
|
|
|
|
return RandrGetCrtcInfoCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetCrtcInfo
|
|
|
|
// size: ((32 + pad((int(NumOutputs) * 4))) + pad((int(NumPossibleOutputs) * 4)))
|
|
|
|
type RandrGetCrtcInfoReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
X int16
|
|
|
|
Y int16
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
Mode Id
|
|
|
|
Rotation uint16
|
|
|
|
Rotations uint16
|
|
|
|
NumOutputs uint16
|
|
|
|
NumPossibleOutputs uint16
|
|
|
|
Outputs []Id // size: pad((int(NumOutputs) * 4))
|
|
|
|
Possible []Id // size: pad((int(NumPossibleOutputs) * 4))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetCrtcInfo
|
|
|
|
func (cook RandrGetCrtcInfoCookie) Reply() (*RandrGetCrtcInfoReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetCrtcInfoReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetCrtcInfo
|
|
|
|
func randrGetCrtcInfoReply(buf []byte) *RandrGetCrtcInfoReply {
|
|
|
|
v := new(RandrGetCrtcInfoReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.X = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Y = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Mode = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Rotation = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Rotations = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumOutputs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumPossibleOutputs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Outputs = make([]Id, v.NumOutputs)
|
|
|
|
for i := 0; i < int(v.NumOutputs); i++ {
|
|
|
|
v.Outputs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Possible = make([]Id, v.NumPossibleOutputs)
|
|
|
|
for i := 0; i < int(v.NumPossibleOutputs); i++ {
|
|
|
|
v.Possible[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetCrtcInfoCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetCrtcInfo
|
|
|
|
func (c *Conn) randrGetCrtcInfoRequest(Crtc Id, ConfigTimestamp Timestamp) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 20 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetCrtcConfig
|
|
|
|
// size: pad((28 + pad((len(Outputs) * 4))))
|
|
|
|
type RandrSetCrtcConfigCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetCrtcConfig(Crtc Id, Timestamp Timestamp, ConfigTimestamp Timestamp, X int16, Y int16, Mode Id, Rotation uint16, Outputs []Id) RandrSetCrtcConfigCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrSetCrtcConfigRequest(Crtc, Timestamp, ConfigTimestamp, X, Y, Mode, Rotation, Outputs), cookie)
|
|
|
|
return RandrSetCrtcConfigCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetCrtcConfigUnchecked(Crtc Id, Timestamp Timestamp, ConfigTimestamp Timestamp, X int16, Y int16, Mode Id, Rotation uint16, Outputs []Id) RandrSetCrtcConfigCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrSetCrtcConfigRequest(Crtc, Timestamp, ConfigTimestamp, X, Y, Mode, Rotation, Outputs), cookie)
|
|
|
|
return RandrSetCrtcConfigCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrSetCrtcConfig
|
|
|
|
// size: 32
|
|
|
|
type RandrSetCrtcConfigReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
// padding: 20 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrSetCrtcConfig
|
|
|
|
func (cook RandrSetCrtcConfigCookie) Reply() (*RandrSetCrtcConfigReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrSetCrtcConfigReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrSetCrtcConfig
|
|
|
|
func randrSetCrtcConfigReply(buf []byte) *RandrSetCrtcConfigReply {
|
|
|
|
v := new(RandrSetCrtcConfigReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
b += 20 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetCrtcConfigCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetCrtcConfig
|
|
|
|
func (c *Conn) randrSetCrtcConfigRequest(Crtc Id, Timestamp Timestamp, ConfigTimestamp Timestamp, X int16, Y int16, Mode Id, Rotation uint16, Outputs []Id) []byte {
|
|
|
|
size := pad((28 + pad((len(Outputs) * 4))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 21 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(ConfigTimestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(X))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(Y))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Mode))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], Rotation)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
for i := 0; i < int(len(Outputs)); i++ {
|
|
|
|
Put32(buf[b:], uint32(Outputs[i]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetCrtcGammaSize
|
|
|
|
// size: 8
|
|
|
|
type RandrGetCrtcGammaSizeCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcGammaSize(Crtc Id) RandrGetCrtcGammaSizeCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetCrtcGammaSizeRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcGammaSizeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcGammaSizeUnchecked(Crtc Id) RandrGetCrtcGammaSizeCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetCrtcGammaSizeRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcGammaSizeCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetCrtcGammaSize
|
|
|
|
// size: 32
|
|
|
|
type RandrGetCrtcGammaSizeReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Size uint16
|
|
|
|
// padding: 22 bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetCrtcGammaSize
|
|
|
|
func (cook RandrGetCrtcGammaSizeCookie) Reply() (*RandrGetCrtcGammaSizeReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetCrtcGammaSizeReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetCrtcGammaSize
|
|
|
|
func randrGetCrtcGammaSizeReply(buf []byte) *RandrGetCrtcGammaSizeReply {
|
|
|
|
v := new(RandrGetCrtcGammaSizeReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Size = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 22 // padding
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetCrtcGammaSizeCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetCrtcGammaSize
|
|
|
|
func (c *Conn) randrGetCrtcGammaSizeRequest(Crtc Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 22 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetCrtcGamma
|
|
|
|
// size: 8
|
|
|
|
type RandrGetCrtcGammaCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcGamma(Crtc Id) RandrGetCrtcGammaCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetCrtcGammaRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcGammaCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcGammaUnchecked(Crtc Id) RandrGetCrtcGammaCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetCrtcGammaRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcGammaCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetCrtcGamma
|
|
|
|
// size: (((32 + pad((int(Size) * 2))) + pad((int(Size) * 2))) + pad((int(Size) * 2)))
|
|
|
|
type RandrGetCrtcGammaReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Size uint16
|
|
|
|
// padding: 22 bytes
|
|
|
|
Red []uint16 // size: pad((int(Size) * 2))
|
|
|
|
Green []uint16 // size: pad((int(Size) * 2))
|
|
|
|
Blue []uint16 // size: pad((int(Size) * 2))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetCrtcGamma
|
|
|
|
func (cook RandrGetCrtcGammaCookie) Reply() (*RandrGetCrtcGammaReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetCrtcGammaReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetCrtcGamma
|
|
|
|
func randrGetCrtcGammaReply(buf []byte) *RandrGetCrtcGammaReply {
|
|
|
|
v := new(RandrGetCrtcGammaReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Size = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 22 // padding
|
|
|
|
|
|
|
|
v.Red = make([]uint16, v.Size)
|
|
|
|
for i := 0; i < int(v.Size); i++ {
|
|
|
|
v.Red[i] = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Green = make([]uint16, v.Size)
|
|
|
|
for i := 0; i < int(v.Size); i++ {
|
|
|
|
v.Green[i] = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Blue = make([]uint16, v.Size)
|
|
|
|
for i := 0; i < int(v.Size); i++ {
|
|
|
|
v.Blue[i] = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetCrtcGammaCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetCrtcGamma
|
|
|
|
func (c *Conn) randrGetCrtcGammaRequest(Crtc Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 23 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetCrtcGamma
|
|
|
|
// size: pad((((12 + pad((int(Size) * 2))) + pad((int(Size) * 2))) + pad((int(Size) * 2))))
|
|
|
|
type RandrSetCrtcGammaCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetCrtcGamma
|
|
|
|
func (c *Conn) RandrSetCrtcGamma(Crtc Id, Size uint16, Red []uint16, Green []uint16, Blue []uint16) RandrSetCrtcGammaCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrSetCrtcGammaRequest(Crtc, Size, Red, Green, Blue), cookie)
|
|
|
|
return RandrSetCrtcGammaCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetCrtcGammaChecked(Crtc Id, Size uint16, Red []uint16, Green []uint16, Blue []uint16) RandrSetCrtcGammaCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrSetCrtcGammaRequest(Crtc, Size, Red, Green, Blue), cookie)
|
|
|
|
return RandrSetCrtcGammaCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetCrtcGammaCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetCrtcGamma
|
|
|
|
func (c *Conn) randrSetCrtcGammaRequest(Crtc Id, Size uint16, Red []uint16, Green []uint16, Blue []uint16) []byte {
|
|
|
|
size := pad((((12 + pad((int(Size) * 2))) + pad((int(Size) * 2))) + pad((int(Size) * 2))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 24 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], Size)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
for i := 0; i < int(Size); i++ {
|
|
|
|
Put16(buf[b:], Red[i])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
for i := 0; i < int(Size); i++ {
|
|
|
|
Put16(buf[b:], Green[i])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
for i := 0; i < int(Size); i++ {
|
|
|
|
Put16(buf[b:], Blue[i])
|
|
|
|
b += 2
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetScreenResourcesCurrent
|
|
|
|
// size: 8
|
|
|
|
type RandrGetScreenResourcesCurrentCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenResourcesCurrent(Window Id) RandrGetScreenResourcesCurrentCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetScreenResourcesCurrentRequest(Window), cookie)
|
|
|
|
return RandrGetScreenResourcesCurrentCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetScreenResourcesCurrentUnchecked(Window Id) RandrGetScreenResourcesCurrentCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetScreenResourcesCurrentRequest(Window), cookie)
|
|
|
|
return RandrGetScreenResourcesCurrentCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetScreenResourcesCurrent
|
|
|
|
// size: ((((32 + pad((int(NumCrtcs) * 4))) + pad((int(NumOutputs) * 4))) + pad((int(NumModes) * 32))) + pad((int(NamesLen) * 1)))
|
|
|
|
type RandrGetScreenResourcesCurrentReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Timestamp Timestamp
|
|
|
|
ConfigTimestamp Timestamp
|
|
|
|
NumCrtcs uint16
|
|
|
|
NumOutputs uint16
|
|
|
|
NumModes uint16
|
|
|
|
NamesLen uint16
|
|
|
|
// padding: 8 bytes
|
|
|
|
Crtcs []Id // size: pad((int(NumCrtcs) * 4))
|
|
|
|
Outputs []Id // size: pad((int(NumOutputs) * 4))
|
|
|
|
Modes []RandrModeInfo // size: pad((int(NumModes) * 32))
|
|
|
|
Names []byte // size: pad((int(NamesLen) * 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetScreenResourcesCurrent
|
|
|
|
func (cook RandrGetScreenResourcesCurrentCookie) Reply() (*RandrGetScreenResourcesCurrentReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetScreenResourcesCurrentReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetScreenResourcesCurrent
|
|
|
|
func randrGetScreenResourcesCurrentReply(buf []byte) *RandrGetScreenResourcesCurrentReply {
|
|
|
|
v := new(RandrGetScreenResourcesCurrentReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.ConfigTimestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.NumCrtcs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumOutputs = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NumModes = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.NamesLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 8 // padding
|
|
|
|
|
|
|
|
v.Crtcs = make([]Id, v.NumCrtcs)
|
|
|
|
for i := 0; i < int(v.NumCrtcs); i++ {
|
|
|
|
v.Crtcs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Outputs = make([]Id, v.NumOutputs)
|
|
|
|
for i := 0; i < int(v.NumOutputs); i++ {
|
|
|
|
v.Outputs[i] = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
v.Modes = make([]RandrModeInfo, v.NumModes)
|
|
|
|
b += ReadRandrModeInfoList(buf[b:], v.Modes)
|
|
|
|
|
|
|
|
v.Names = make([]byte, v.NamesLen)
|
|
|
|
copy(v.Names[:v.NamesLen], buf[b:])
|
|
|
|
b += pad(int(v.NamesLen))
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetScreenResourcesCurrentCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetScreenResourcesCurrent
|
|
|
|
func (c *Conn) randrGetScreenResourcesCurrentRequest(Window Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 25 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetCrtcTransform
|
|
|
|
// size: pad(((48 + pad((int(FilterLen) * 1))) + pad((len(FilterParams) * 4))))
|
|
|
|
type RandrSetCrtcTransformCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetCrtcTransform
|
|
|
|
func (c *Conn) RandrSetCrtcTransform(Crtc Id, Transform RenderTransform, FilterLen uint16, FilterName string, FilterParams []RenderFixed) RandrSetCrtcTransformCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrSetCrtcTransformRequest(Crtc, Transform, FilterLen, FilterName, FilterParams), cookie)
|
|
|
|
return RandrSetCrtcTransformCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetCrtcTransformChecked(Crtc Id, Transform RenderTransform, FilterLen uint16, FilterName string, FilterParams []RenderFixed) RandrSetCrtcTransformCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrSetCrtcTransformRequest(Crtc, Transform, FilterLen, FilterName, FilterParams), cookie)
|
|
|
|
return RandrSetCrtcTransformCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetCrtcTransformCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetCrtcTransform
|
|
|
|
func (c *Conn) randrSetCrtcTransformRequest(Crtc Id, Transform RenderTransform, FilterLen uint16, FilterName string, FilterParams []RenderFixed) []byte {
|
|
|
|
size := pad(((48 + pad((int(FilterLen) * 1))) + pad((len(FilterParams) * 4))))
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 26 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
{
|
|
|
|
structBytes := Transform.Bytes()
|
|
|
|
copy(buf[b:], structBytes)
|
|
|
|
b += pad(len(structBytes))
|
|
|
|
}
|
|
|
|
|
|
|
|
Put16(buf[b:], FilterLen)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
b += 2 // padding
|
|
|
|
|
|
|
|
copy(buf[b:], FilterName[:FilterLen])
|
|
|
|
b += pad(int(FilterLen))
|
|
|
|
|
|
|
|
for i := 0; i < int(len(FilterParams)); i++ {
|
|
|
|
Put32(buf[b:], uint32(FilterParams[i]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetCrtcTransform
|
|
|
|
// size: 8
|
|
|
|
type RandrGetCrtcTransformCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcTransform(Crtc Id) RandrGetCrtcTransformCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetCrtcTransformRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcTransformCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetCrtcTransformUnchecked(Crtc Id) RandrGetCrtcTransformCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetCrtcTransformRequest(Crtc), cookie)
|
|
|
|
return RandrGetCrtcTransformCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetCrtcTransform
|
|
|
|
// size: ((((96 + pad((int(PendingLen) * 1))) + pad((int(PendingNparams) * 4))) + pad((int(CurrentLen) * 1))) + pad((int(CurrentNparams) * 4)))
|
|
|
|
type RandrGetCrtcTransformReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
PendingTransform RenderTransform
|
|
|
|
HasTransforms bool
|
|
|
|
// padding: 3 bytes
|
|
|
|
CurrentTransform RenderTransform
|
|
|
|
// padding: 4 bytes
|
|
|
|
PendingLen uint16
|
|
|
|
PendingNparams uint16
|
|
|
|
CurrentLen uint16
|
|
|
|
CurrentNparams uint16
|
|
|
|
PendingFilterName string // size: pad((int(PendingLen) * 1))
|
|
|
|
PendingParams []RenderFixed // size: pad((int(PendingNparams) * 4))
|
|
|
|
CurrentFilterName string // size: pad((int(CurrentLen) * 1))
|
|
|
|
CurrentParams []RenderFixed // size: pad((int(CurrentNparams) * 4))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetCrtcTransform
|
|
|
|
func (cook RandrGetCrtcTransformCookie) Reply() (*RandrGetCrtcTransformReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetCrtcTransformReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetCrtcTransform
|
|
|
|
func randrGetCrtcTransformReply(buf []byte) *RandrGetCrtcTransformReply {
|
|
|
|
v := new(RandrGetCrtcTransformReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.PendingTransform = RenderTransform{}
|
|
|
|
b += ReadRenderTransform(buf[b:], &v.PendingTransform)
|
|
|
|
|
|
|
|
if buf[b] == 1 {
|
|
|
|
v.HasTransforms = true
|
|
|
|
} else {
|
|
|
|
v.HasTransforms = false
|
|
|
|
}
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
b += 3 // padding
|
|
|
|
|
|
|
|
v.CurrentTransform = RenderTransform{}
|
|
|
|
b += ReadRenderTransform(buf[b:], &v.CurrentTransform)
|
|
|
|
|
|
|
|
b += 4 // padding
|
|
|
|
|
|
|
|
v.PendingLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.PendingNparams = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.CurrentLen = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.CurrentNparams = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
{
|
|
|
|
byteString := make([]byte, v.PendingLen)
|
|
|
|
copy(byteString[:v.PendingLen], buf[b:])
|
|
|
|
v.PendingFilterName = string(byteString)
|
|
|
|
b += pad(int(v.PendingLen))
|
|
|
|
}
|
|
|
|
|
|
|
|
v.PendingParams = make([]RenderFixed, v.PendingNparams)
|
|
|
|
for i := 0; i < int(v.PendingNparams); i++ {
|
|
|
|
v.PendingParams[i] = RenderFixed(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
{
|
|
|
|
byteString := make([]byte, v.CurrentLen)
|
|
|
|
copy(byteString[:v.CurrentLen], buf[b:])
|
|
|
|
v.CurrentFilterName = string(byteString)
|
|
|
|
b += pad(int(v.CurrentLen))
|
|
|
|
}
|
|
|
|
|
|
|
|
v.CurrentParams = make([]RenderFixed, v.CurrentNparams)
|
|
|
|
for i := 0; i < int(v.CurrentNparams); i++ {
|
|
|
|
v.CurrentParams[i] = RenderFixed(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
}
|
|
|
|
b = pad(b)
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetCrtcTransformCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetCrtcTransform
|
|
|
|
func (c *Conn) randrGetCrtcTransformRequest(Crtc Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 27 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetPanning
|
|
|
|
// size: 8
|
|
|
|
type RandrGetPanningCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetPanning(Crtc Id) RandrGetPanningCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetPanningRequest(Crtc), cookie)
|
|
|
|
return RandrGetPanningCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetPanningUnchecked(Crtc Id) RandrGetPanningCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetPanningRequest(Crtc), cookie)
|
|
|
|
return RandrGetPanningCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetPanning
|
|
|
|
// size: 36
|
|
|
|
type RandrGetPanningReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
Left uint16
|
|
|
|
Top uint16
|
|
|
|
Width uint16
|
|
|
|
Height uint16
|
|
|
|
TrackLeft uint16
|
|
|
|
TrackTop uint16
|
|
|
|
TrackWidth uint16
|
|
|
|
TrackHeight uint16
|
|
|
|
BorderLeft int16
|
|
|
|
BorderTop int16
|
|
|
|
BorderRight int16
|
|
|
|
BorderBottom int16
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetPanning
|
|
|
|
func (cook RandrGetPanningCookie) Reply() (*RandrGetPanningReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetPanningReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetPanning
|
|
|
|
func randrGetPanningReply(buf []byte) *RandrGetPanningReply {
|
|
|
|
v := new(RandrGetPanningReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Left = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Top = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Width = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Height = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.TrackLeft = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.TrackTop = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.TrackWidth = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.TrackHeight = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.BorderLeft = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.BorderTop = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.BorderRight = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.BorderBottom = int16(Get16(buf[b:]))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetPanningCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetPanning
|
|
|
|
func (c *Conn) randrGetPanningRequest(Crtc Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 28 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetPanning
|
|
|
|
// size: 36
|
|
|
|
type RandrSetPanningCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetPanning(Crtc Id, Timestamp Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) RandrSetPanningCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrSetPanningRequest(Crtc, Timestamp, Left, Top, Width, Height, TrackLeft, TrackTop, TrackWidth, TrackHeight, BorderLeft, BorderTop, BorderRight, BorderBottom), cookie)
|
|
|
|
return RandrSetPanningCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetPanningUnchecked(Crtc Id, Timestamp Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) RandrSetPanningCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrSetPanningRequest(Crtc, Timestamp, Left, Top, Width, Height, TrackLeft, TrackTop, TrackWidth, TrackHeight, BorderLeft, BorderTop, BorderRight, BorderBottom), cookie)
|
|
|
|
return RandrSetPanningCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrSetPanning
|
|
|
|
// size: 12
|
|
|
|
type RandrSetPanningReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
Status byte
|
|
|
|
Timestamp Timestamp
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrSetPanning
|
|
|
|
func (cook RandrSetPanningCookie) Reply() (*RandrSetPanningReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrSetPanningReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrSetPanning
|
|
|
|
func randrSetPanningReply(buf []byte) *RandrSetPanningReply {
|
|
|
|
v := new(RandrSetPanningReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
v.Status = buf[b]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Timestamp = Timestamp(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetPanningCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetPanning
|
|
|
|
func (c *Conn) randrSetPanningRequest(Crtc Id, Timestamp Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) []byte {
|
|
|
|
size := 36
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 29 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Crtc))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Timestamp))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put16(buf[b:], Left)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Top)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Width)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], Height)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], TrackLeft)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], TrackTop)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], TrackWidth)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], TrackHeight)
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(BorderLeft))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(BorderTop))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(BorderRight))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(BorderBottom))
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrSetOutputPrimary
|
|
|
|
// size: 12
|
|
|
|
type RandrSetOutputPrimaryCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetOutputPrimary
|
|
|
|
func (c *Conn) RandrSetOutputPrimary(Window Id, Output Id) RandrSetOutputPrimaryCookie {
|
|
|
|
cookie := c.newCookie(false, false)
|
|
|
|
c.newRequest(c.randrSetOutputPrimaryRequest(Window, Output), cookie)
|
|
|
|
return RandrSetOutputPrimaryCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrSetOutputPrimaryChecked(Window Id, Output Id) RandrSetOutputPrimaryCookie {
|
|
|
|
cookie := c.newCookie(true, false)
|
|
|
|
c.newRequest(c.randrSetOutputPrimaryRequest(Window, Output), cookie)
|
|
|
|
return RandrSetOutputPrimaryCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrSetOutputPrimaryCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrSetOutputPrimary
|
|
|
|
func (c *Conn) randrSetOutputPrimaryRequest(Window Id, Output Id) []byte {
|
|
|
|
size := 12
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 30 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Output))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request RandrGetOutputPrimary
|
|
|
|
// size: 8
|
|
|
|
type RandrGetOutputPrimaryCookie struct {
|
|
|
|
*cookie
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputPrimary(Window Id) RandrGetOutputPrimaryCookie {
|
|
|
|
cookie := c.newCookie(true, true)
|
|
|
|
c.newRequest(c.randrGetOutputPrimaryRequest(Window), cookie)
|
|
|
|
return RandrGetOutputPrimaryCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Conn) RandrGetOutputPrimaryUnchecked(Window Id) RandrGetOutputPrimaryCookie {
|
|
|
|
cookie := c.newCookie(false, true)
|
|
|
|
c.newRequest(c.randrGetOutputPrimaryRequest(Window), cookie)
|
|
|
|
return RandrGetOutputPrimaryCookie{cookie}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Request reply for RandrGetOutputPrimary
|
|
|
|
// size: 12
|
|
|
|
type RandrGetOutputPrimaryReply struct {
|
|
|
|
Sequence uint16
|
|
|
|
Length uint32
|
|
|
|
// padding: 1 bytes
|
|
|
|
Output Id
|
|
|
|
}
|
|
|
|
|
|
|
|
// Waits and reads reply data from request RandrGetOutputPrimary
|
|
|
|
func (cook RandrGetOutputPrimaryCookie) Reply() (*RandrGetOutputPrimaryReply, error) {
|
|
|
|
buf, err := cook.reply()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if buf == nil {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
return randrGetOutputPrimaryReply(buf), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read reply into structure from buffer for RandrGetOutputPrimary
|
|
|
|
func randrGetOutputPrimaryReply(buf []byte) *RandrGetOutputPrimaryReply {
|
|
|
|
v := new(RandrGetOutputPrimaryReply)
|
|
|
|
b := 1 // skip reply determinant
|
|
|
|
|
|
|
|
b += 1 // padding
|
|
|
|
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
v.Output = Id(Get32(buf[b:]))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cook RandrGetOutputPrimaryCookie) Check() error {
|
|
|
|
return cook.check()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write request to wire for RandrGetOutputPrimary
|
|
|
|
func (c *Conn) randrGetOutputPrimaryRequest(Window Id) []byte {
|
|
|
|
size := 8
|
|
|
|
b := 0
|
|
|
|
buf := make([]byte, size)
|
|
|
|
|
|
|
|
buf[b] = c.extensions["RANDR"]
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
buf[b] = 31 // request opcode
|
|
|
|
b += 1
|
|
|
|
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
|
|
b += 2
|
|
|
|
|
|
|
|
Put32(buf[b:], uint32(Window))
|
|
|
|
b += 4
|
|
|
|
|
|
|
|
return buf
|
|
|
|
}
|