// Write request to wire for UnregisterClients // unregisterClientsRequest writes a UnregisterClients request to a byte slice. func unregisterClientsRequest(c *xgb.Conn, buf []byte, Context Context, NumClientSpecs uint32, ClientSpecs []ClientSpec) []byte { size := xgb.Pad((12 + xgb.Pad((int(NumClientSpecs) * 4)))) b := 0 if cap(buf) >= size { buf = buf[:size] } else { buf = make([]byte, size) } buf[b] = c.Extensions["RECORD"] 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 xgb.Put32(buf[b:], uint32(Context)) b += 4 xgb.Put32(buf[b:], NumClientSpecs) b += 4 for i := 0; i < int(NumClientSpecs); i++ { xgb.Put32(buf[b:], uint32(ClientSpecs[i])) b += 4 } b = xgb.Pad(b) return buf }
// Write request to wire for GetBuffersWithFormat // getBuffersWithFormatRequest writes a GetBuffersWithFormat request to a byte slice. func getBuffersWithFormatRequest(c *xgb.Conn, buf []byte, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) []byte { size := xgb.Pad((12 + xgb.Pad((len(Attachments) * 8)))) b := 0 if cap(buf) >= size { buf = buf[:size] } else { buf = make([]byte, size) } buf[b] = c.Extensions["DRI2"] 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(Drawable)) b += 4 xgb.Put32(buf[b:], Count) b += 4 b += AttachFormatListBytes(buf[b:], Attachments) return buf }
// Write request to wire for GetBuffers // getBuffersRequest writes a GetBuffers request to a byte slice. func getBuffersRequest(c *xgb.Conn, buf []byte, Drawable xproto.Drawable, Count uint32, Attachments []uint32) []byte { size := xgb.Pad((12 + xgb.Pad((len(Attachments) * 4)))) b := 0 if cap(buf) >= size { buf = buf[:size] } else { buf = make([]byte, size) } buf[b] = c.Extensions["DRI2"] 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(Drawable)) b += 4 xgb.Put32(buf[b:], Count) b += 4 for i := 0; i < int(len(Attachments)); i++ { xgb.Put32(buf[b:], Attachments[i]) b += 4 } b = xgb.Pad(b) return buf }
// ClientInfoListSize computes the size (bytes) of a list of ClientInfo values. func ClientInfoListSize(list []ClientInfo) int { size := 0 for _, item := range list { size += (8 + xgb.Pad((int(item.NumRanges) * 24))) } return size }
// DRI2BufferReadList reads a byte slice into a list of DRI2Buffer values. func DRI2BufferReadList(buf []byte, dest []DRI2Buffer) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = DRI2Buffer{} b += DRI2BufferRead(buf[b:], &dest[i]) } return xgb.Pad(b) }
// RangeReadList reads a byte slice into a list of Range values. func RangeReadList(buf []byte, dest []Range) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = Range{} b += RangeRead(buf[b:], &dest[i]) } return xgb.Pad(b) }
// ClientInfoReadList reads a byte slice into a list of ClientInfo values. func ClientInfoReadList(buf []byte, dest []ClientInfo) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = ClientInfo{} b += ClientInfoRead(buf[b:], &dest[i]) } return xgb.Pad(b) }
// AttachFormatReadList reads a byte slice into a list of AttachFormat values. func AttachFormatReadList(buf []byte, dest []AttachFormat) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = AttachFormat{} b += AttachFormatRead(buf[b:], &dest[i]) } return xgb.Pad(b) }
// Bytes writes a ExtRange value to a byte slice. func (v ExtRange) Bytes() []byte { buf := make([]byte, 6) b := 0 { structBytes := v.Major.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.Minor.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return buf }
// AttachFormatListBytes writes a list of AttachFormat values to a byte slice. func AttachFormatListBytes(buf []byte, list []AttachFormat) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b }
// ExtRangeListBytes writes a list of ExtRange values to a byte slice. func ExtRangeListBytes(buf []byte, list []ExtRange) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b }
// DRI2BufferListBytes writes a list of DRI2Buffer values to a byte slice. func DRI2BufferListBytes(buf []byte, list []DRI2Buffer) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b }
// ClientInfoListBytes writes a list of ClientInfo values to a byte slice. func ClientInfoListBytes(buf []byte, list []ClientInfo) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b }
// Write request to wire for RegisterClients // registerClientsRequest writes a RegisterClients request to a byte slice. func registerClientsRequest(c *xgb.Conn, buf []byte, Context Context, ElementHeader ElementHeader, NumClientSpecs uint32, NumRanges uint32, ClientSpecs []ClientSpec, Ranges []Range) []byte { size := xgb.Pad(((20 + xgb.Pad((int(NumClientSpecs) * 4))) + xgb.Pad((int(NumRanges) * 24)))) b := 0 if cap(buf) >= size { buf = buf[:size] } else { buf = make([]byte, size) } buf[b] = c.Extensions["RECORD"] 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 xgb.Put32(buf[b:], uint32(Context)) b += 4 buf[b] = byte(ElementHeader) b += 1 b += 3 // padding xgb.Put32(buf[b:], NumClientSpecs) b += 4 xgb.Put32(buf[b:], NumRanges) b += 4 for i := 0; i < int(NumClientSpecs); i++ { xgb.Put32(buf[b:], uint32(ClientSpecs[i])) b += 4 } b = xgb.Pad(b) b += RangeListBytes(buf[b:], Ranges) return buf }
// Write request to wire for Rectangles // rectanglesRequest writes a Rectangles request to a byte slice. func rectanglesRequest(c *xgb.Conn, buf []byte, 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 if cap(buf) >= size { buf = buf[:size] } else { 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 }
// connectReply reads a byte slice into a ConnectReply value. func connectReply(buf []byte) *ConnectReply { v := new(ConnectReply) 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.DriverNameLength = xgb.Get32(buf[b:]) b += 4 v.DeviceNameLength = xgb.Get32(buf[b:]) b += 4 b += 16 // padding { byteString := make([]byte, v.DriverNameLength) copy(byteString[:v.DriverNameLength], buf[b:]) v.DriverName = string(byteString) b += xgb.Pad(int(v.DriverNameLength)) } v.AlignmentPad = make([]byte, (((int(v.DriverNameLength) + 3) & -4) - int(v.DriverNameLength))) copy(v.AlignmentPad[:(((int(v.DriverNameLength)+3)&-4)-int(v.DriverNameLength))], buf[b:]) b += xgb.Pad(int((((int(v.DriverNameLength) + 3) & -4) - int(v.DriverNameLength)))) { byteString := make([]byte, v.DeviceNameLength) copy(byteString[:v.DeviceNameLength], buf[b:]) v.DeviceName = string(byteString) b += xgb.Pad(int(v.DeviceNameLength)) } return v }
// Bytes writes a ClientInfo value to a byte slice. func (v ClientInfo) Bytes() []byte { buf := make([]byte, (8 + xgb.Pad((int(v.NumRanges) * 24)))) b := 0 xgb.Put32(buf[b:], uint32(v.ClientResource)) b += 4 xgb.Put32(buf[b:], v.NumRanges) b += 4 b += RangeListBytes(buf[b:], v.Ranges) return buf }
// enableContextReply reads a byte slice into a EnableContextReply value. func enableContextReply(buf []byte) *EnableContextReply { v := new(EnableContextReply) b := 1 // skip reply determinant v.Category = buf[b] b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.ElementHeader = ElementHeader(buf[b]) b += 1 if buf[b] == 1 { v.ClientSwapped = true } else { v.ClientSwapped = false } b += 1 b += 2 // padding v.XidBase = xgb.Get32(buf[b:]) b += 4 v.ServerTime = xgb.Get32(buf[b:]) b += 4 v.RecSequenceNum = xgb.Get32(buf[b:]) b += 4 b += 8 // padding v.Data = make([]byte, (int(v.Length) * 4)) copy(v.Data[:(int(v.Length)*4)], buf[b:]) b += xgb.Pad(int((int(v.Length) * 4))) return v }
// Bytes writes a Range value to a byte slice. func (v Range) Bytes() []byte { buf := make([]byte, 24) b := 0 { structBytes := v.CoreRequests.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.CoreReplies.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.ExtRequests.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.ExtReplies.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.DeliveredEvents.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.DeviceEvents.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.Errors.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } if v.ClientStarted { buf[b] = 1 } else { buf[b] = 0 } b += 1 if v.ClientDied { buf[b] = 1 } else { buf[b] = 0 } b += 1 return buf }