a huge commit. splitting extensions into their own sub-packages.
This commit is contained in:
		
							
								
								
									
										883
									
								
								nexgb/shape/shape.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										883
									
								
								nexgb/shape/shape.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,883 @@
 | 
			
		||||
package shape
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	This file was generated by shape.xml on May 10 2012 4:20:28pm 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 'Card32'
 | 
			
		||||
 | 
			
		||||
// Skipping definition for base type 'Double'
 | 
			
		||||
 | 
			
		||||
// Skipping definition for base type 'Bool'
 | 
			
		||||
 | 
			
		||||
// Skipping definition for base type 'Float'
 | 
			
		||||
 | 
			
		||||
// 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'
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user