900 lines
20 KiB
Go
900 lines
20 KiB
Go
package xgb
|
|
|
|
/*
|
|
This file was generated by shape.xml on May 7 2012 11:34:26pm EDT.
|
|
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"
|
|
|
|
// ShapeInit must be called before using the SHAPE extension.
|
|
func (c *Conn) ShapeInit() error {
|
|
reply, err := c.QueryExtension(5, "SHAPE").Reply()
|
|
switch {
|
|
case err != nil:
|
|
return err
|
|
case !reply.Present:
|
|
return errorf("No extension named SHAPE could be found on on the server.")
|
|
}
|
|
|
|
c.extLock.Lock()
|
|
c.extensions["SHAPE"] = reply.MajorOpcode
|
|
for evNum, fun := range newExtEventFuncs["SHAPE"] {
|
|
newEventFuncs[int(reply.FirstEvent)+evNum] = fun
|
|
}
|
|
for errNum, fun := range newExtErrorFuncs["SHAPE"] {
|
|
newErrorFuncs[int(reply.FirstError)+errNum] = fun
|
|
}
|
|
c.extLock.Unlock()
|
|
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
newExtEventFuncs["SHAPE"] = make(map[int]newEventFun)
|
|
newExtErrorFuncs["SHAPE"] = make(map[int]newErrorFun)
|
|
}
|
|
|
|
// 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'
|
|
|
|
// Skipping definition for base type 'Id'
|
|
|
|
// Skipping definition for base type 'Card8'
|
|
|
|
// Skipping definition for base type 'Int16'
|
|
|
|
// Skipping definition for base type 'Int32'
|
|
|
|
// Skipping definition for base type 'Void'
|
|
|
|
// Skipping definition for base type 'Byte'
|
|
|
|
// Skipping definition for base type 'Int8'
|
|
|
|
const (
|
|
ShapeSoSet = 0
|
|
ShapeSoUnion = 1
|
|
ShapeSoIntersect = 2
|
|
ShapeSoSubtract = 3
|
|
ShapeSoInvert = 4
|
|
)
|
|
|
|
const (
|
|
ShapeSkBounding = 0
|
|
ShapeSkClip = 1
|
|
ShapeSkInput = 2
|
|
)
|
|
|
|
type ShapeOp byte
|
|
|
|
type ShapeKind byte
|
|
|
|
// Event definition ShapeNotify (0)
|
|
// Size: 32
|
|
|
|
const ShapeNotify = 0
|
|
|
|
type ShapeNotifyEvent struct {
|
|
Sequence uint16
|
|
ShapeKind ShapeKind
|
|
AffectedWindow Id
|
|
ExtentsX int16
|
|
ExtentsY int16
|
|
ExtentsWidth uint16
|
|
ExtentsHeight uint16
|
|
ServerTime Timestamp
|
|
Shaped bool
|
|
// padding: 11 bytes
|
|
}
|
|
|
|
// Event read ShapeNotify
|
|
func NewShapeNotifyEvent(buf []byte) Event {
|
|
v := ShapeNotifyEvent{}
|
|
b := 1 // don't read event number
|
|
|
|
v.ShapeKind = ShapeKind(buf[b])
|
|
b += 1
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.AffectedWindow = Id(Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.ExtentsX = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.ExtentsY = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.ExtentsWidth = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.ExtentsHeight = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.ServerTime = Timestamp(Get32(buf[b:]))
|
|
b += 4
|
|
|
|
if buf[b] == 1 {
|
|
v.Shaped = true
|
|
} else {
|
|
v.Shaped = false
|
|
}
|
|
b += 1
|
|
|
|
b += 11 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// Event write ShapeNotify
|
|
func (v ShapeNotifyEvent) Bytes() []byte {
|
|
buf := make([]byte, 32)
|
|
b := 0
|
|
|
|
// write event number
|
|
buf[b] = 0
|
|
b += 1
|
|
|
|
buf[b] = byte(v.ShapeKind)
|
|
b += 1
|
|
|
|
b += 2 // skip sequence number
|
|
|
|
Put32(buf[b:], uint32(v.AffectedWindow))
|
|
b += 4
|
|
|
|
Put16(buf[b:], uint16(v.ExtentsX))
|
|
b += 2
|
|
|
|
Put16(buf[b:], uint16(v.ExtentsY))
|
|
b += 2
|
|
|
|
Put16(buf[b:], v.ExtentsWidth)
|
|
b += 2
|
|
|
|
Put16(buf[b:], v.ExtentsHeight)
|
|
b += 2
|
|
|
|
Put32(buf[b:], uint32(v.ServerTime))
|
|
b += 4
|
|
|
|
if v.Shaped {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
b += 11 // padding
|
|
|
|
return buf
|
|
}
|
|
|
|
func (v ShapeNotifyEvent) ImplementsEvent() {}
|
|
|
|
func (v ShapeNotifyEvent) SequenceId() uint16 {
|
|
return v.Sequence
|
|
}
|
|
|
|
func (v ShapeNotifyEvent) String() string {
|
|
fieldVals := make([]string, 0, 9)
|
|
fieldVals = append(fieldVals, sprintf("Sequence: %d", v.Sequence))
|
|
fieldVals = append(fieldVals, sprintf("ShapeKind: %d", v.ShapeKind))
|
|
fieldVals = append(fieldVals, sprintf("AffectedWindow: %d", v.AffectedWindow))
|
|
fieldVals = append(fieldVals, sprintf("ExtentsX: %d", v.ExtentsX))
|
|
fieldVals = append(fieldVals, sprintf("ExtentsY: %d", v.ExtentsY))
|
|
fieldVals = append(fieldVals, sprintf("ExtentsWidth: %d", v.ExtentsWidth))
|
|
fieldVals = append(fieldVals, sprintf("ExtentsHeight: %d", v.ExtentsHeight))
|
|
fieldVals = append(fieldVals, sprintf("ServerTime: %d", v.ServerTime))
|
|
fieldVals = append(fieldVals, sprintf("Shaped: %t", v.Shaped))
|
|
return "ShapeNotify {" + stringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
newExtEventFuncs["SHAPE"][0] = NewShapeNotifyEvent
|
|
}
|
|
|
|
// Request ShapeQueryVersion
|
|
// size: 4
|
|
type ShapeQueryVersionCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
func (c *Conn) ShapeQueryVersion() ShapeQueryVersionCookie {
|
|
cookie := c.newCookie(true, true)
|
|
c.newRequest(c.shapeQueryVersionRequest(), cookie)
|
|
return ShapeQueryVersionCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeQueryVersionUnchecked() ShapeQueryVersionCookie {
|
|
cookie := c.newCookie(false, true)
|
|
c.newRequest(c.shapeQueryVersionRequest(), cookie)
|
|
return ShapeQueryVersionCookie{cookie}
|
|
}
|
|
|
|
// Request reply for ShapeQueryVersion
|
|
// size: 12
|
|
type ShapeQueryVersionReply struct {
|
|
Sequence uint16
|
|
Length uint32
|
|
// padding: 1 bytes
|
|
MajorVersion uint16
|
|
MinorVersion uint16
|
|
}
|
|
|
|
// Waits and reads reply data from request ShapeQueryVersion
|
|
func (cook ShapeQueryVersionCookie) Reply() (*ShapeQueryVersionReply, error) {
|
|
buf, err := cook.reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return shapeQueryVersionReply(buf), nil
|
|
}
|
|
|
|
// Read reply into structure from buffer for ShapeQueryVersion
|
|
func shapeQueryVersionReply(buf []byte) *ShapeQueryVersionReply {
|
|
v := new(ShapeQueryVersionReply)
|
|
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 = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.MinorVersion = Get16(buf[b:])
|
|
b += 2
|
|
|
|
return v
|
|
}
|
|
|
|
func (cook ShapeQueryVersionCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeQueryVersion
|
|
func (c *Conn) shapeQueryVersionRequest() []byte {
|
|
size := 4
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
b += 1
|
|
|
|
buf[b] = 0 // request opcode
|
|
b += 1
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeRectangles
|
|
// size: pad((16 + pad((len(Rectangles) * 8))))
|
|
type ShapeRectanglesCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
// Write request to wire for ShapeRectangles
|
|
func (c *Conn) ShapeRectangles(Operation ShapeOp, DestinationKind ShapeKind, Ordering byte, DestinationWindow Id, XOffset int16, YOffset int16, Rectangles []Rectangle) ShapeRectanglesCookie {
|
|
cookie := c.newCookie(false, false)
|
|
c.newRequest(c.shapeRectanglesRequest(Operation, DestinationKind, Ordering, DestinationWindow, XOffset, YOffset, Rectangles), cookie)
|
|
return ShapeRectanglesCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeRectanglesChecked(Operation ShapeOp, DestinationKind ShapeKind, Ordering byte, DestinationWindow Id, XOffset int16, YOffset int16, Rectangles []Rectangle) ShapeRectanglesCookie {
|
|
cookie := c.newCookie(true, false)
|
|
c.newRequest(c.shapeRectanglesRequest(Operation, DestinationKind, Ordering, DestinationWindow, XOffset, YOffset, Rectangles), cookie)
|
|
return ShapeRectanglesCookie{cookie}
|
|
}
|
|
|
|
func (cook ShapeRectanglesCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeRectangles
|
|
func (c *Conn) shapeRectanglesRequest(Operation ShapeOp, DestinationKind ShapeKind, Ordering byte, DestinationWindow Id, XOffset int16, YOffset int16, Rectangles []Rectangle) []byte {
|
|
size := pad((16 + pad((len(Rectangles) * 8))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
b += 1
|
|
|
|
buf[b] = 1 // request opcode
|
|
b += 1
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
buf[b] = byte(Operation)
|
|
b += 1
|
|
|
|
buf[b] = byte(DestinationKind)
|
|
b += 1
|
|
|
|
buf[b] = Ordering
|
|
b += 1
|
|
|
|
b += 1 // padding
|
|
|
|
Put32(buf[b:], uint32(DestinationWindow))
|
|
b += 4
|
|
|
|
Put16(buf[b:], uint16(XOffset))
|
|
b += 2
|
|
|
|
Put16(buf[b:], uint16(YOffset))
|
|
b += 2
|
|
|
|
b += RectangleListBytes(buf[b:], Rectangles)
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeMask
|
|
// size: 20
|
|
type ShapeMaskCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
// Write request to wire for ShapeMask
|
|
func (c *Conn) ShapeMask(Operation ShapeOp, DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceBitmap Id) ShapeMaskCookie {
|
|
cookie := c.newCookie(false, false)
|
|
c.newRequest(c.shapeMaskRequest(Operation, DestinationKind, DestinationWindow, XOffset, YOffset, SourceBitmap), cookie)
|
|
return ShapeMaskCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeMaskChecked(Operation ShapeOp, DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceBitmap Id) ShapeMaskCookie {
|
|
cookie := c.newCookie(true, false)
|
|
c.newRequest(c.shapeMaskRequest(Operation, DestinationKind, DestinationWindow, XOffset, YOffset, SourceBitmap), cookie)
|
|
return ShapeMaskCookie{cookie}
|
|
}
|
|
|
|
func (cook ShapeMaskCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeMask
|
|
func (c *Conn) shapeMaskRequest(Operation ShapeOp, DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceBitmap Id) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
b += 1
|
|
|
|
buf[b] = 2 // request opcode
|
|
b += 1
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
buf[b] = byte(Operation)
|
|
b += 1
|
|
|
|
buf[b] = byte(DestinationKind)
|
|
b += 1
|
|
|
|
b += 2 // padding
|
|
|
|
Put32(buf[b:], uint32(DestinationWindow))
|
|
b += 4
|
|
|
|
Put16(buf[b:], uint16(XOffset))
|
|
b += 2
|
|
|
|
Put16(buf[b:], uint16(YOffset))
|
|
b += 2
|
|
|
|
Put32(buf[b:], uint32(SourceBitmap))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeCombine
|
|
// size: 20
|
|
type ShapeCombineCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
// Write request to wire for ShapeCombine
|
|
func (c *Conn) ShapeCombine(Operation ShapeOp, DestinationKind ShapeKind, SourceKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceWindow Id) ShapeCombineCookie {
|
|
cookie := c.newCookie(false, false)
|
|
c.newRequest(c.shapeCombineRequest(Operation, DestinationKind, SourceKind, DestinationWindow, XOffset, YOffset, SourceWindow), cookie)
|
|
return ShapeCombineCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeCombineChecked(Operation ShapeOp, DestinationKind ShapeKind, SourceKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceWindow Id) ShapeCombineCookie {
|
|
cookie := c.newCookie(true, false)
|
|
c.newRequest(c.shapeCombineRequest(Operation, DestinationKind, SourceKind, DestinationWindow, XOffset, YOffset, SourceWindow), cookie)
|
|
return ShapeCombineCookie{cookie}
|
|
}
|
|
|
|
func (cook ShapeCombineCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeCombine
|
|
func (c *Conn) shapeCombineRequest(Operation ShapeOp, DestinationKind ShapeKind, SourceKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16, SourceWindow Id) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
b += 1
|
|
|
|
buf[b] = 3 // request opcode
|
|
b += 1
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
buf[b] = byte(Operation)
|
|
b += 1
|
|
|
|
buf[b] = byte(DestinationKind)
|
|
b += 1
|
|
|
|
buf[b] = byte(SourceKind)
|
|
b += 1
|
|
|
|
b += 1 // padding
|
|
|
|
Put32(buf[b:], uint32(DestinationWindow))
|
|
b += 4
|
|
|
|
Put16(buf[b:], uint16(XOffset))
|
|
b += 2
|
|
|
|
Put16(buf[b:], uint16(YOffset))
|
|
b += 2
|
|
|
|
Put32(buf[b:], uint32(SourceWindow))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeOffset
|
|
// size: 16
|
|
type ShapeOffsetCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
// Write request to wire for ShapeOffset
|
|
func (c *Conn) ShapeOffset(DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16) ShapeOffsetCookie {
|
|
cookie := c.newCookie(false, false)
|
|
c.newRequest(c.shapeOffsetRequest(DestinationKind, DestinationWindow, XOffset, YOffset), cookie)
|
|
return ShapeOffsetCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeOffsetChecked(DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16) ShapeOffsetCookie {
|
|
cookie := c.newCookie(true, false)
|
|
c.newRequest(c.shapeOffsetRequest(DestinationKind, DestinationWindow, XOffset, YOffset), cookie)
|
|
return ShapeOffsetCookie{cookie}
|
|
}
|
|
|
|
func (cook ShapeOffsetCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeOffset
|
|
func (c *Conn) shapeOffsetRequest(DestinationKind ShapeKind, DestinationWindow Id, XOffset int16, YOffset int16) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
b += 1
|
|
|
|
buf[b] = 4 // request opcode
|
|
b += 1
|
|
|
|
Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
buf[b] = byte(DestinationKind)
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
Put32(buf[b:], uint32(DestinationWindow))
|
|
b += 4
|
|
|
|
Put16(buf[b:], uint16(XOffset))
|
|
b += 2
|
|
|
|
Put16(buf[b:], uint16(YOffset))
|
|
b += 2
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeQueryExtents
|
|
// size: 8
|
|
type ShapeQueryExtentsCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
func (c *Conn) ShapeQueryExtents(DestinationWindow Id) ShapeQueryExtentsCookie {
|
|
cookie := c.newCookie(true, true)
|
|
c.newRequest(c.shapeQueryExtentsRequest(DestinationWindow), cookie)
|
|
return ShapeQueryExtentsCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeQueryExtentsUnchecked(DestinationWindow Id) ShapeQueryExtentsCookie {
|
|
cookie := c.newCookie(false, true)
|
|
c.newRequest(c.shapeQueryExtentsRequest(DestinationWindow), cookie)
|
|
return ShapeQueryExtentsCookie{cookie}
|
|
}
|
|
|
|
// Request reply for ShapeQueryExtents
|
|
// size: 28
|
|
type ShapeQueryExtentsReply struct {
|
|
Sequence uint16
|
|
Length uint32
|
|
// padding: 1 bytes
|
|
BoundingShaped bool
|
|
ClipShaped bool
|
|
// padding: 2 bytes
|
|
BoundingShapeExtentsX int16
|
|
BoundingShapeExtentsY int16
|
|
BoundingShapeExtentsWidth uint16
|
|
BoundingShapeExtentsHeight uint16
|
|
ClipShapeExtentsX int16
|
|
ClipShapeExtentsY int16
|
|
ClipShapeExtentsWidth uint16
|
|
ClipShapeExtentsHeight uint16
|
|
}
|
|
|
|
// Waits and reads reply data from request ShapeQueryExtents
|
|
func (cook ShapeQueryExtentsCookie) Reply() (*ShapeQueryExtentsReply, error) {
|
|
buf, err := cook.reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return shapeQueryExtentsReply(buf), nil
|
|
}
|
|
|
|
// Read reply into structure from buffer for ShapeQueryExtents
|
|
func shapeQueryExtentsReply(buf []byte) *ShapeQueryExtentsReply {
|
|
v := new(ShapeQueryExtentsReply)
|
|
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.BoundingShaped = true
|
|
} else {
|
|
v.BoundingShaped = false
|
|
}
|
|
b += 1
|
|
|
|
if buf[b] == 1 {
|
|
v.ClipShaped = true
|
|
} else {
|
|
v.ClipShaped = false
|
|
}
|
|
b += 1
|
|
|
|
b += 2 // padding
|
|
|
|
v.BoundingShapeExtentsX = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.BoundingShapeExtentsY = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.BoundingShapeExtentsWidth = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.BoundingShapeExtentsHeight = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.ClipShapeExtentsX = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.ClipShapeExtentsY = int16(Get16(buf[b:]))
|
|
b += 2
|
|
|
|
v.ClipShapeExtentsWidth = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.ClipShapeExtentsHeight = Get16(buf[b:])
|
|
b += 2
|
|
|
|
return v
|
|
}
|
|
|
|
func (cook ShapeQueryExtentsCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeQueryExtents
|
|
func (c *Conn) shapeQueryExtentsRequest(DestinationWindow Id) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
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(DestinationWindow))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeSelectInput
|
|
// size: 12
|
|
type ShapeSelectInputCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
// Write request to wire for ShapeSelectInput
|
|
func (c *Conn) ShapeSelectInput(DestinationWindow Id, Enable bool) ShapeSelectInputCookie {
|
|
cookie := c.newCookie(false, false)
|
|
c.newRequest(c.shapeSelectInputRequest(DestinationWindow, Enable), cookie)
|
|
return ShapeSelectInputCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeSelectInputChecked(DestinationWindow Id, Enable bool) ShapeSelectInputCookie {
|
|
cookie := c.newCookie(true, false)
|
|
c.newRequest(c.shapeSelectInputRequest(DestinationWindow, Enable), cookie)
|
|
return ShapeSelectInputCookie{cookie}
|
|
}
|
|
|
|
func (cook ShapeSelectInputCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeSelectInput
|
|
func (c *Conn) shapeSelectInputRequest(DestinationWindow Id, Enable bool) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
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(DestinationWindow))
|
|
b += 4
|
|
|
|
if Enable {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeInputSelected
|
|
// size: 8
|
|
type ShapeInputSelectedCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
func (c *Conn) ShapeInputSelected(DestinationWindow Id) ShapeInputSelectedCookie {
|
|
cookie := c.newCookie(true, true)
|
|
c.newRequest(c.shapeInputSelectedRequest(DestinationWindow), cookie)
|
|
return ShapeInputSelectedCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeInputSelectedUnchecked(DestinationWindow Id) ShapeInputSelectedCookie {
|
|
cookie := c.newCookie(false, true)
|
|
c.newRequest(c.shapeInputSelectedRequest(DestinationWindow), cookie)
|
|
return ShapeInputSelectedCookie{cookie}
|
|
}
|
|
|
|
// Request reply for ShapeInputSelected
|
|
// size: 8
|
|
type ShapeInputSelectedReply struct {
|
|
Sequence uint16
|
|
Length uint32
|
|
Enabled bool
|
|
}
|
|
|
|
// Waits and reads reply data from request ShapeInputSelected
|
|
func (cook ShapeInputSelectedCookie) Reply() (*ShapeInputSelectedReply, error) {
|
|
buf, err := cook.reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return shapeInputSelectedReply(buf), nil
|
|
}
|
|
|
|
// Read reply into structure from buffer for ShapeInputSelected
|
|
func shapeInputSelectedReply(buf []byte) *ShapeInputSelectedReply {
|
|
v := new(ShapeInputSelectedReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
if buf[b] == 1 {
|
|
v.Enabled = true
|
|
} else {
|
|
v.Enabled = false
|
|
}
|
|
b += 1
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
func (cook ShapeInputSelectedCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeInputSelected
|
|
func (c *Conn) shapeInputSelectedRequest(DestinationWindow Id) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
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(DestinationWindow))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// Request ShapeGetRectangles
|
|
// size: 12
|
|
type ShapeGetRectanglesCookie struct {
|
|
*cookie
|
|
}
|
|
|
|
func (c *Conn) ShapeGetRectangles(Window Id, SourceKind ShapeKind) ShapeGetRectanglesCookie {
|
|
cookie := c.newCookie(true, true)
|
|
c.newRequest(c.shapeGetRectanglesRequest(Window, SourceKind), cookie)
|
|
return ShapeGetRectanglesCookie{cookie}
|
|
}
|
|
|
|
func (c *Conn) ShapeGetRectanglesUnchecked(Window Id, SourceKind ShapeKind) ShapeGetRectanglesCookie {
|
|
cookie := c.newCookie(false, true)
|
|
c.newRequest(c.shapeGetRectanglesRequest(Window, SourceKind), cookie)
|
|
return ShapeGetRectanglesCookie{cookie}
|
|
}
|
|
|
|
// Request reply for ShapeGetRectangles
|
|
// size: (32 + pad((int(RectanglesLen) * 8)))
|
|
type ShapeGetRectanglesReply struct {
|
|
Sequence uint16
|
|
Length uint32
|
|
Ordering byte
|
|
RectanglesLen uint32
|
|
// padding: 20 bytes
|
|
Rectangles []Rectangle // size: pad((int(RectanglesLen) * 8))
|
|
}
|
|
|
|
// Waits and reads reply data from request ShapeGetRectangles
|
|
func (cook ShapeGetRectanglesCookie) Reply() (*ShapeGetRectanglesReply, error) {
|
|
buf, err := cook.reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return shapeGetRectanglesReply(buf), nil
|
|
}
|
|
|
|
// Read reply into structure from buffer for ShapeGetRectangles
|
|
func shapeGetRectanglesReply(buf []byte) *ShapeGetRectanglesReply {
|
|
v := new(ShapeGetRectanglesReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
v.Ordering = buf[b]
|
|
b += 1
|
|
|
|
v.Sequence = Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RectanglesLen = Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
v.Rectangles = make([]Rectangle, v.RectanglesLen)
|
|
b += ReadRectangleList(buf[b:], v.Rectangles)
|
|
|
|
return v
|
|
}
|
|
|
|
func (cook ShapeGetRectanglesCookie) Check() error {
|
|
return cook.check()
|
|
}
|
|
|
|
// Write request to wire for ShapeGetRectangles
|
|
func (c *Conn) shapeGetRectanglesRequest(Window Id, SourceKind ShapeKind) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
buf[b] = c.extensions["SHAPE"]
|
|
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
|
|
|
|
buf[b] = byte(SourceKind)
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
return buf
|
|
}
|