// Package shape is the X client API for the SHAPE extension. package shape /* This file was generated by shape.xml on May 10 2012 8:04:32pm EDT. This file is automatically generated. Edit at your peril! */ import ( "github.com/BurntSushi/xgb" "github.com/BurntSushi/xgb/xproto" ) // Init must be called before using the SHAPE extension. func Init(c *xgb.Conn) error { reply, err := xproto.QueryExtension(c, 5, "SHAPE").Reply() switch { case err != nil: return err case !reply.Present: return xgb.Errorf("No extension named SHAPE could be found on on the server.") } xgb.ExtLock.Lock() c.Extensions["SHAPE"] = reply.MajorOpcode for evNum, fun := range xgb.NewExtEventFuncs["SHAPE"] { xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun } for errNum, fun := range xgb.NewExtErrorFuncs["SHAPE"] { xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun } xgb.ExtLock.Unlock() return nil } func init() { xgb.NewExtEventFuncs["SHAPE"] = make(map[int]xgb.NewEventFun) xgb.NewExtErrorFuncs["SHAPE"] = make(map[int]xgb.NewErrorFun) } // 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' // 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' const ( SoSet = 0 SoUnion = 1 SoIntersect = 2 SoSubtract = 3 SoInvert = 4 ) const ( SkBounding = 0 SkClip = 1 SkInput = 2 ) type Op byte type Kind byte // Event definition Notify (0) // Size: 32 const Notify = 0 type NotifyEvent struct { Sequence uint16 ShapeKind Kind AffectedWindow xproto.Window ExtentsX int16 ExtentsY int16 ExtentsWidth uint16 ExtentsHeight uint16 ServerTime xproto.Timestamp Shaped bool // padding: 11 bytes } // Event read Notify func NotifyEventNew(buf []byte) xgb.Event { v := NotifyEvent{} b := 1 // don't read event number v.ShapeKind = Kind(buf[b]) b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.AffectedWindow = xproto.Window(xgb.Get32(buf[b:])) b += 4 v.ExtentsX = int16(xgb.Get16(buf[b:])) b += 2 v.ExtentsY = int16(xgb.Get16(buf[b:])) b += 2 v.ExtentsWidth = xgb.Get16(buf[b:]) b += 2 v.ExtentsHeight = xgb.Get16(buf[b:]) b += 2 v.ServerTime = xproto.Timestamp(xgb.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 Notify func (v NotifyEvent) 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 xgb.Put32(buf[b:], uint32(v.AffectedWindow)) b += 4 xgb.Put16(buf[b:], uint16(v.ExtentsX)) b += 2 xgb.Put16(buf[b:], uint16(v.ExtentsY)) b += 2 xgb.Put16(buf[b:], v.ExtentsWidth) b += 2 xgb.Put16(buf[b:], v.ExtentsHeight) b += 2 xgb.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 NotifyEvent) ImplementsEvent() {} func (v NotifyEvent) SequenceId() uint16 { return v.Sequence } func (v NotifyEvent) String() string { fieldVals := make([]string, 0, 9) fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence)) fieldVals = append(fieldVals, xgb.Sprintf("ShapeKind: %d", v.ShapeKind)) fieldVals = append(fieldVals, xgb.Sprintf("AffectedWindow: %d", v.AffectedWindow)) fieldVals = append(fieldVals, xgb.Sprintf("ExtentsX: %d", v.ExtentsX)) fieldVals = append(fieldVals, xgb.Sprintf("ExtentsY: %d", v.ExtentsY)) fieldVals = append(fieldVals, xgb.Sprintf("ExtentsWidth: %d", v.ExtentsWidth)) fieldVals = append(fieldVals, xgb.Sprintf("ExtentsHeight: %d", v.ExtentsHeight)) fieldVals = append(fieldVals, xgb.Sprintf("ServerTime: %d", v.ServerTime)) fieldVals = append(fieldVals, xgb.Sprintf("Shaped: %t", v.Shaped)) return "Notify {" + xgb.StringsJoin(fieldVals, ", ") + "}" } func init() { xgb.NewExtEventFuncs["SHAPE"][0] = NotifyEventNew } // Request QueryVersion // size: 4 type QueryVersionCookie struct { *xgb.Cookie } func QueryVersion(c *xgb.Conn) QueryVersionCookie { cookie := c.NewCookie(true, true) c.NewRequest(queryVersionRequest(c), cookie) return QueryVersionCookie{cookie} } func QueryVersionUnchecked(c *xgb.Conn) QueryVersionCookie { cookie := c.NewCookie(false, true) c.NewRequest(queryVersionRequest(c), cookie) return QueryVersionCookie{cookie} } // Request reply for QueryVersion // size: 12 type QueryVersionReply struct { Sequence uint16 Length uint32 // padding: 1 bytes MajorVersion uint16 MinorVersion uint16 } // Waits and reads reply data from request QueryVersion func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return queryVersionReply(buf), nil } // Read reply into structure from buffer for QueryVersion func queryVersionReply(buf []byte) *QueryVersionReply { v := new(QueryVersionReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.MajorVersion = xgb.Get16(buf[b:]) b += 2 v.MinorVersion = xgb.Get16(buf[b:]) b += 2 return v } // Write request to wire for QueryVersion func queryVersionRequest(c *xgb.Conn) []byte { size := 4 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 0 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 return buf } // Request Rectangles // size: xgb.Pad((16 + xgb.Pad((len(Rectangles) * 8)))) type RectanglesCookie struct { *xgb.Cookie } // Write request to wire for Rectangles func Rectangles(c *xgb.Conn, Operation Op, DestinationKind Kind, Ordering byte, DestinationWindow xproto.Window, XOffset int16, YOffset int16, Rectangles []xproto.Rectangle) RectanglesCookie { cookie := c.NewCookie(false, false) c.NewRequest(rectanglesRequest(c, Operation, DestinationKind, Ordering, DestinationWindow, XOffset, YOffset, Rectangles), cookie) return RectanglesCookie{cookie} } func RectanglesChecked(c *xgb.Conn, Operation Op, DestinationKind Kind, Ordering byte, DestinationWindow xproto.Window, XOffset int16, YOffset int16, Rectangles []xproto.Rectangle) RectanglesCookie { cookie := c.NewCookie(true, false) c.NewRequest(rectanglesRequest(c, Operation, DestinationKind, Ordering, DestinationWindow, XOffset, YOffset, Rectangles), cookie) return RectanglesCookie{cookie} } func (cook RectanglesCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for Rectangles func rectanglesRequest(c *xgb.Conn, Operation Op, DestinationKind Kind, Ordering byte, DestinationWindow xproto.Window, XOffset int16, YOffset int16, Rectangles []xproto.Rectangle) []byte { size := xgb.Pad((16 + xgb.Pad((len(Rectangles) * 8)))) b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 1 // request opcode b += 1 xgb.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 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 xgb.Put16(buf[b:], uint16(XOffset)) b += 2 xgb.Put16(buf[b:], uint16(YOffset)) b += 2 b += xproto.RectangleListBytes(buf[b:], Rectangles) return buf } // Request Mask // size: 20 type MaskCookie struct { *xgb.Cookie } // Write request to wire for Mask func Mask(c *xgb.Conn, Operation Op, DestinationKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceBitmap xproto.Pixmap) MaskCookie { cookie := c.NewCookie(false, false) c.NewRequest(maskRequest(c, Operation, DestinationKind, DestinationWindow, XOffset, YOffset, SourceBitmap), cookie) return MaskCookie{cookie} } func MaskChecked(c *xgb.Conn, Operation Op, DestinationKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceBitmap xproto.Pixmap) MaskCookie { cookie := c.NewCookie(true, false) c.NewRequest(maskRequest(c, Operation, DestinationKind, DestinationWindow, XOffset, YOffset, SourceBitmap), cookie) return MaskCookie{cookie} } func (cook MaskCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for Mask func maskRequest(c *xgb.Conn, Operation Op, DestinationKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceBitmap xproto.Pixmap) []byte { size := 20 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 2 // request opcode b += 1 xgb.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 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 xgb.Put16(buf[b:], uint16(XOffset)) b += 2 xgb.Put16(buf[b:], uint16(YOffset)) b += 2 xgb.Put32(buf[b:], uint32(SourceBitmap)) b += 4 return buf } // Request Combine // size: 20 type CombineCookie struct { *xgb.Cookie } // Write request to wire for Combine func Combine(c *xgb.Conn, Operation Op, DestinationKind Kind, SourceKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceWindow xproto.Window) CombineCookie { cookie := c.NewCookie(false, false) c.NewRequest(combineRequest(c, Operation, DestinationKind, SourceKind, DestinationWindow, XOffset, YOffset, SourceWindow), cookie) return CombineCookie{cookie} } func CombineChecked(c *xgb.Conn, Operation Op, DestinationKind Kind, SourceKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceWindow xproto.Window) CombineCookie { cookie := c.NewCookie(true, false) c.NewRequest(combineRequest(c, Operation, DestinationKind, SourceKind, DestinationWindow, XOffset, YOffset, SourceWindow), cookie) return CombineCookie{cookie} } func (cook CombineCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for Combine func combineRequest(c *xgb.Conn, Operation Op, DestinationKind Kind, SourceKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16, SourceWindow xproto.Window) []byte { size := 20 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 3 // request opcode b += 1 xgb.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 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 xgb.Put16(buf[b:], uint16(XOffset)) b += 2 xgb.Put16(buf[b:], uint16(YOffset)) b += 2 xgb.Put32(buf[b:], uint32(SourceWindow)) b += 4 return buf } // Request Offset // size: 16 type OffsetCookie struct { *xgb.Cookie } // Write request to wire for Offset func Offset(c *xgb.Conn, DestinationKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16) OffsetCookie { cookie := c.NewCookie(false, false) c.NewRequest(offsetRequest(c, DestinationKind, DestinationWindow, XOffset, YOffset), cookie) return OffsetCookie{cookie} } func OffsetChecked(c *xgb.Conn, DestinationKind Kind, DestinationWindow xproto.Window, XOffset int16, YOffset int16) OffsetCookie { cookie := c.NewCookie(true, false) c.NewRequest(offsetRequest(c, DestinationKind, DestinationWindow, XOffset, YOffset), cookie) return OffsetCookie{cookie} } func (cook OffsetCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for Offset func offsetRequest(c *xgb.Conn, DestinationKind Kind, DestinationWindow xproto.Window, 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 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 buf[b] = byte(DestinationKind) b += 1 b += 3 // padding xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 xgb.Put16(buf[b:], uint16(XOffset)) b += 2 xgb.Put16(buf[b:], uint16(YOffset)) b += 2 return buf } // Request QueryExtents // size: 8 type QueryExtentsCookie struct { *xgb.Cookie } func QueryExtents(c *xgb.Conn, DestinationWindow xproto.Window) QueryExtentsCookie { cookie := c.NewCookie(true, true) c.NewRequest(queryExtentsRequest(c, DestinationWindow), cookie) return QueryExtentsCookie{cookie} } func QueryExtentsUnchecked(c *xgb.Conn, DestinationWindow xproto.Window) QueryExtentsCookie { cookie := c.NewCookie(false, true) c.NewRequest(queryExtentsRequest(c, DestinationWindow), cookie) return QueryExtentsCookie{cookie} } // Request reply for QueryExtents // size: 28 type QueryExtentsReply 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 QueryExtents func (cook QueryExtentsCookie) Reply() (*QueryExtentsReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return queryExtentsReply(buf), nil } // Read reply into structure from buffer for QueryExtents func queryExtentsReply(buf []byte) *QueryExtentsReply { v := new(QueryExtentsReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.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(xgb.Get16(buf[b:])) b += 2 v.BoundingShapeExtentsY = int16(xgb.Get16(buf[b:])) b += 2 v.BoundingShapeExtentsWidth = xgb.Get16(buf[b:]) b += 2 v.BoundingShapeExtentsHeight = xgb.Get16(buf[b:]) b += 2 v.ClipShapeExtentsX = int16(xgb.Get16(buf[b:])) b += 2 v.ClipShapeExtentsY = int16(xgb.Get16(buf[b:])) b += 2 v.ClipShapeExtentsWidth = xgb.Get16(buf[b:]) b += 2 v.ClipShapeExtentsHeight = xgb.Get16(buf[b:]) b += 2 return v } // Write request to wire for QueryExtents func queryExtentsRequest(c *xgb.Conn, DestinationWindow xproto.Window) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 5 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 return buf } // Request SelectInput // size: 12 type SelectInputCookie struct { *xgb.Cookie } // Write request to wire for SelectInput func SelectInput(c *xgb.Conn, DestinationWindow xproto.Window, Enable bool) SelectInputCookie { cookie := c.NewCookie(false, false) c.NewRequest(selectInputRequest(c, DestinationWindow, Enable), cookie) return SelectInputCookie{cookie} } func SelectInputChecked(c *xgb.Conn, DestinationWindow xproto.Window, Enable bool) SelectInputCookie { cookie := c.NewCookie(true, false) c.NewRequest(selectInputRequest(c, DestinationWindow, Enable), cookie) return SelectInputCookie{cookie} } func (cook SelectInputCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for SelectInput func selectInputRequest(c *xgb.Conn, DestinationWindow xproto.Window, 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 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 if Enable { buf[b] = 1 } else { buf[b] = 0 } b += 1 b += 3 // padding return buf } // Request InputSelected // size: 8 type InputSelectedCookie struct { *xgb.Cookie } func InputSelected(c *xgb.Conn, DestinationWindow xproto.Window) InputSelectedCookie { cookie := c.NewCookie(true, true) c.NewRequest(inputSelectedRequest(c, DestinationWindow), cookie) return InputSelectedCookie{cookie} } func InputSelectedUnchecked(c *xgb.Conn, DestinationWindow xproto.Window) InputSelectedCookie { cookie := c.NewCookie(false, true) c.NewRequest(inputSelectedRequest(c, DestinationWindow), cookie) return InputSelectedCookie{cookie} } // Request reply for InputSelected // size: 8 type InputSelectedReply struct { Sequence uint16 Length uint32 Enabled bool } // Waits and reads reply data from request InputSelected func (cook InputSelectedCookie) Reply() (*InputSelectedReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return inputSelectedReply(buf), nil } // Read reply into structure from buffer for InputSelected func inputSelectedReply(buf []byte) *InputSelectedReply { v := new(InputSelectedReply) b := 1 // skip reply determinant if buf[b] == 1 { v.Enabled = true } else { v.Enabled = false } b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 return v } // Write request to wire for InputSelected func inputSelectedRequest(c *xgb.Conn, DestinationWindow xproto.Window) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 7 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(DestinationWindow)) b += 4 return buf } // Request GetRectangles // size: 12 type GetRectanglesCookie struct { *xgb.Cookie } func GetRectangles(c *xgb.Conn, Window xproto.Window, SourceKind Kind) GetRectanglesCookie { cookie := c.NewCookie(true, true) c.NewRequest(getRectanglesRequest(c, Window, SourceKind), cookie) return GetRectanglesCookie{cookie} } func GetRectanglesUnchecked(c *xgb.Conn, Window xproto.Window, SourceKind Kind) GetRectanglesCookie { cookie := c.NewCookie(false, true) c.NewRequest(getRectanglesRequest(c, Window, SourceKind), cookie) return GetRectanglesCookie{cookie} } // Request reply for GetRectangles // size: (32 + xgb.Pad((int(RectanglesLen) * 8))) type GetRectanglesReply struct { Sequence uint16 Length uint32 Ordering byte RectanglesLen uint32 // padding: 20 bytes Rectangles []xproto.Rectangle // size: xgb.Pad((int(RectanglesLen) * 8)) } // Waits and reads reply data from request GetRectangles func (cook GetRectanglesCookie) Reply() (*GetRectanglesReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return getRectanglesReply(buf), nil } // Read reply into structure from buffer for GetRectangles func getRectanglesReply(buf []byte) *GetRectanglesReply { v := new(GetRectanglesReply) b := 1 // skip reply determinant v.Ordering = buf[b] b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.RectanglesLen = xgb.Get32(buf[b:]) b += 4 b += 20 // padding v.Rectangles = make([]xproto.Rectangle, v.RectanglesLen) b += xproto.RectangleReadList(buf[b:], v.Rectangles) return v } // Write request to wire for GetRectangles func getRectanglesRequest(c *xgb.Conn, Window xproto.Window, SourceKind Kind) []byte { size := 12 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SHAPE"] b += 1 buf[b] = 8 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Window)) b += 4 buf[b] = byte(SourceKind) b += 1 b += 3 // padding return buf }