aboutsummaryrefslogtreecommitdiff
path: root/nexgb/auto_shape.go
diff options
context:
space:
mode:
Diffstat (limited to 'nexgb/auto_shape.go')
-rw-r--r--nexgb/auto_shape.go871
1 files changed, 871 insertions, 0 deletions
diff --git a/nexgb/auto_shape.go b/nexgb/auto_shape.go
new file mode 100644
index 0000000..b5c5f04
--- /dev/null
+++ b/nexgb/auto_shape.go
@@ -0,0 +1,871 @@
+package xgb
+
+/*
+ This file was generated by shape.xml on May 6 2012 3:00:44am 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"
+
+// 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() {
+ newEventFuncs[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
+}