blob: 154a6573c4762644c449d1431f51277a8ca7d64d [file] [log] [blame]
// This file was generated automatically from xproto.xml.
package xgb
import "os"
type Char2b struct {
Byte1 byte
Byte2 byte
}
func getChar2b(b []byte, v *Char2b) int {
v.Byte1 = b[0]
v.Byte2 = b[1]
return 2
}
func (c *Conn) sendChar2bList(list []Char2b, count int) {
b0 := make([]byte, 2*count)
for k := 0; k < count; k++ {
b := b0[k*2:]
b[0] = list[k].Byte1
b[1] = list[k].Byte2
}
c.sendBytes(b0)
}
type Point struct {
X int16
Y int16
}
func getPoint(b []byte, v *Point) int {
v.X = int16(get16(b[0:]))
v.Y = int16(get16(b[2:]))
return 4
}
func (c *Conn) sendPointList(list []Point, count int) {
b0 := make([]byte, 4*count)
for k := 0; k < count; k++ {
b := b0[k*4:]
put16(b[0:], uint16(list[k].X))
put16(b[2:], uint16(list[k].Y))
}
c.sendBytes(b0)
}
type Rectangle struct {
X int16
Y int16
Width uint16
Height uint16
}
func getRectangle(b []byte, v *Rectangle) int {
v.X = int16(get16(b[0:]))
v.Y = int16(get16(b[2:]))
v.Width = get16(b[4:])
v.Height = get16(b[6:])
return 8
}
func (c *Conn) sendRectangleList(list []Rectangle, count int) {
b0 := make([]byte, 8*count)
for k := 0; k < count; k++ {
b := b0[k*8:]
put16(b[0:], uint16(list[k].X))
put16(b[2:], uint16(list[k].Y))
put16(b[4:], list[k].Width)
put16(b[6:], list[k].Height)
}
c.sendBytes(b0)
}
type Arc struct {
X int16
Y int16
Width uint16
Height uint16
Angle1 int16
Angle2 int16
}
func getArc(b []byte, v *Arc) int {
v.X = int16(get16(b[0:]))
v.Y = int16(get16(b[2:]))
v.Width = get16(b[4:])
v.Height = get16(b[6:])
v.Angle1 = int16(get16(b[8:]))
v.Angle2 = int16(get16(b[10:]))
return 12
}
func (c *Conn) sendArcList(list []Arc, count int) {
b0 := make([]byte, 12*count)
for k := 0; k < count; k++ {
b := b0[k*12:]
put16(b[0:], uint16(list[k].X))
put16(b[2:], uint16(list[k].Y))
put16(b[4:], list[k].Width)
put16(b[6:], list[k].Height)
put16(b[8:], uint16(list[k].Angle1))
put16(b[10:], uint16(list[k].Angle2))
}
c.sendBytes(b0)
}
type Format struct {
Depth byte
BitsPerPixel byte
ScanlinePad byte
}
func getFormat(b []byte, v *Format) int {
v.Depth = b[0]
v.BitsPerPixel = b[1]
v.ScanlinePad = b[2]
return 8
}
const (
VisualClassStaticGray = 0
VisualClassGrayScale = 1
VisualClassStaticColor = 2
VisualClassPseudoColor = 3
VisualClassTrueColor = 4
VisualClassDirectColor = 5
)
type VisualInfo struct {
VisualId Id
Class byte
BitsPerRgbValue byte
ColormapEntries uint16
RedMask uint32
GreenMask uint32
BlueMask uint32
}
func getVisualInfo(b []byte, v *VisualInfo) int {
v.VisualId = Id(get32(b[0:]))
v.Class = b[4]
v.BitsPerRgbValue = b[5]
v.ColormapEntries = get16(b[6:])
v.RedMask = get32(b[8:])
v.GreenMask = get32(b[12:])
v.BlueMask = get32(b[16:])
return 24
}
type DepthInfo struct {
Depth byte
VisualsLen uint16
Visuals []VisualInfo
}
func getDepthInfo(b []byte, v *DepthInfo) int {
v.Depth = b[0]
v.VisualsLen = get16(b[2:])
offset := 8
v.Visuals = make([]VisualInfo, int(v.VisualsLen))
for i := 0; i < int(v.VisualsLen); i++ {
offset += getVisualInfo(b[offset:], &v.Visuals[i])
}
return offset
}
const (
EventMaskNoEvent = 0
EventMaskKeyPress = 1
EventMaskKeyRelease = 2
EventMaskButtonPress = 4
EventMaskButtonRelease = 8
EventMaskEnterWindow = 16
EventMaskLeaveWindow = 32
EventMaskPointerMotion = 64
EventMaskPointerMotionHint = 128
EventMaskButton1Motion = 256
EventMaskButton2Motion = 512
EventMaskButton3Motion = 1024
EventMaskButton4Motion = 2048
EventMaskButton5Motion = 4096
EventMaskButtonMotion = 8192
EventMaskKeymapState = 16384
EventMaskExposure = 32768
EventMaskVisibilityChange = 65536
EventMaskStructureNotify = 131072
EventMaskResizeRedirect = 262144
EventMaskSubstructureNotify = 524288
EventMaskSubstructureRedirect = 1048576
EventMaskFocusChange = 2097152
EventMaskPropertyChange = 4194304
EventMaskColorMapChange = 8388608
EventMaskOwnerGrabButton = 16777216
)
const (
BackingStoreNotUseful = 0
BackingStoreWhenMapped = 1
BackingStoreAlways = 2
)
type ScreenInfo struct {
Root Id
DefaultColormap Id
WhitePixel uint32
BlackPixel uint32
CurrentInputMasks uint32
WidthInPixels uint16
HeightInPixels uint16
WidthInMillimeters uint16
HeightInMillimeters uint16
MinInstalledMaps uint16
MaxInstalledMaps uint16
RootVisual Id
BackingStores byte
SaveUnders byte
RootDepth byte
AllowedDepthsLen byte
AllowedDepths []DepthInfo
}
func getScreenInfo(b []byte, v *ScreenInfo) int {
v.Root = Id(get32(b[0:]))
v.DefaultColormap = Id(get32(b[4:]))
v.WhitePixel = get32(b[8:])
v.BlackPixel = get32(b[12:])
v.CurrentInputMasks = get32(b[16:])
v.WidthInPixels = get16(b[20:])
v.HeightInPixels = get16(b[22:])
v.WidthInMillimeters = get16(b[24:])
v.HeightInMillimeters = get16(b[26:])
v.MinInstalledMaps = get16(b[28:])
v.MaxInstalledMaps = get16(b[30:])
v.RootVisual = Id(get32(b[32:]))
v.BackingStores = b[36]
v.SaveUnders = b[37]
v.RootDepth = b[38]
v.AllowedDepthsLen = b[39]
offset := 40
v.AllowedDepths = make([]DepthInfo, int(v.AllowedDepthsLen))
for i := 0; i < int(v.AllowedDepthsLen); i++ {
offset += getDepthInfo(b[offset:], &v.AllowedDepths[i])
}
return offset
}
const (
ImageOrderLSBFirst = 0
ImageOrderMSBFirst = 1
)
type SetupInfo struct {
Status byte
ProtocolMajorVersion uint16
ProtocolMinorVersion uint16
Length uint16
ReleaseNumber uint32
ResourceIdBase uint32
ResourceIdMask uint32
MotionBufferSize uint32
VendorLen uint16
MaximumRequestLength uint16
RootsLen byte
PixmapFormatsLen byte
ImageByteOrder byte
BitmapFormatBitOrder byte
BitmapFormatScanlineUnit byte
BitmapFormatScanlinePad byte
MinKeycode byte
MaxKeycode byte
Vendor []byte
PixmapFormats []Format
Roots []ScreenInfo
}
func getSetupInfo(b []byte, v *SetupInfo) int {
v.Status = b[0]
v.ProtocolMajorVersion = get16(b[2:])
v.ProtocolMinorVersion = get16(b[4:])
v.Length = get16(b[6:])
v.ReleaseNumber = get32(b[8:])
v.ResourceIdBase = get32(b[12:])
v.ResourceIdMask = get32(b[16:])
v.MotionBufferSize = get32(b[20:])
v.VendorLen = get16(b[24:])
v.MaximumRequestLength = get16(b[26:])
v.RootsLen = b[28]
v.PixmapFormatsLen = b[29]
v.ImageByteOrder = b[30]
v.BitmapFormatBitOrder = b[31]
v.BitmapFormatScanlineUnit = b[32]
v.BitmapFormatScanlinePad = b[33]
v.MinKeycode = b[34]
v.MaxKeycode = b[35]
offset := 40
v.Vendor = make([]byte, int(v.VendorLen))
copy(v.Vendor[0:len(v.Vendor)], b[offset:])
offset += len(v.Vendor) * 1
offset = pad(offset)
v.PixmapFormats = make([]Format, int(v.PixmapFormatsLen))
for i := 0; i < int(v.PixmapFormatsLen); i++ {
offset += getFormat(b[offset:], &v.PixmapFormats[i])
}
offset = pad(offset)
v.Roots = make([]ScreenInfo, int(v.RootsLen))
for i := 0; i < int(v.RootsLen); i++ {
offset += getScreenInfo(b[offset:], &v.Roots[i])
}
return offset
}
const (
ModMaskShift = 1
ModMaskLock = 2
ModMaskControl = 4
ModMask1 = 8
ModMask2 = 16
ModMask3 = 32
ModMask4 = 64
ModMask5 = 128
ModMaskAny = 32768
)
const (
KeyButMaskShift = 1
KeyButMaskLock = 2
KeyButMaskControl = 4
KeyButMaskMod1 = 8
KeyButMaskMod2 = 16
KeyButMaskMod3 = 32
KeyButMaskMod4 = 64
KeyButMaskMod5 = 128
KeyButMaskButton1 = 256
KeyButMaskButton2 = 512
KeyButMaskButton3 = 1024
KeyButMaskButton4 = 2048
KeyButMaskButton5 = 4096
)
const (
WindowNone = 0
)
const KeyPress = 2
type KeyPressEvent struct {
Detail byte
Time Timestamp
Root Id
Event Id
Child Id
RootX int16
RootY int16
EventX int16
EventY int16
State uint16
SameScreen byte
}
func getKeyPressEvent(b []byte) KeyPressEvent {
var v KeyPressEvent
v.Detail = b[1]
v.Time = Timestamp(get32(b[4:]))
v.Root = Id(get32(b[8:]))
v.Event = Id(get32(b[12:]))
v.Child = Id(get32(b[16:]))
v.RootX = int16(get16(b[20:]))
v.RootY = int16(get16(b[22:]))
v.EventX = int16(get16(b[24:]))
v.EventY = int16(get16(b[26:]))
v.State = get16(b[28:])
v.SameScreen = b[30]
return v
}
const KeyRelease = 3
type KeyReleaseEvent KeyPressEvent
func getKeyReleaseEvent(b []byte) KeyReleaseEvent {
return (KeyReleaseEvent)(getKeyPressEvent(b))
}
const (
ButtonMask1 = 256
ButtonMask2 = 512
ButtonMask3 = 1024
ButtonMask4 = 2048
ButtonMask5 = 4096
ButtonMaskAny = 32768
)
const ButtonPress = 4
type ButtonPressEvent struct {
Detail byte
Time Timestamp
Root Id
Event Id
Child Id
RootX int16
RootY int16
EventX int16
EventY int16
State uint16
SameScreen byte
}
func getButtonPressEvent(b []byte) ButtonPressEvent {
var v ButtonPressEvent
v.Detail = b[1]
v.Time = Timestamp(get32(b[4:]))
v.Root = Id(get32(b[8:]))
v.Event = Id(get32(b[12:]))
v.Child = Id(get32(b[16:]))
v.RootX = int16(get16(b[20:]))
v.RootY = int16(get16(b[22:]))
v.EventX = int16(get16(b[24:]))
v.EventY = int16(get16(b[26:]))
v.State = get16(b[28:])
v.SameScreen = b[30]
return v
}
const ButtonRelease = 5
type ButtonReleaseEvent ButtonPressEvent
func getButtonReleaseEvent(b []byte) ButtonReleaseEvent {
return (ButtonReleaseEvent)(getButtonPressEvent(b))
}
const (
MotionNormal = 0
MotionHint = 1
)
const MotionNotify = 6
type MotionNotifyEvent struct {
Detail byte
Time Timestamp
Root Id
Event Id
Child Id
RootX int16
RootY int16
EventX int16
EventY int16
State uint16
SameScreen byte
}
func getMotionNotifyEvent(b []byte) MotionNotifyEvent {
var v MotionNotifyEvent
v.Detail = b[1]
v.Time = Timestamp(get32(b[4:]))
v.Root = Id(get32(b[8:]))
v.Event = Id(get32(b[12:]))
v.Child = Id(get32(b[16:]))
v.RootX = int16(get16(b[20:]))
v.RootY = int16(get16(b[22:]))
v.EventX = int16(get16(b[24:]))
v.EventY = int16(get16(b[26:]))
v.State = get16(b[28:])
v.SameScreen = b[30]
return v
}
const (
NotifyDetailAncestor = 0
NotifyDetailVirtual = 1
NotifyDetailInferior = 2
NotifyDetailNonlinear = 3
NotifyDetailNonlinearVirtual = 4
NotifyDetailPointer = 5
NotifyDetailPointerRoot = 6
NotifyDetailNone = 7
)
const (
NotifyModeNormal = 0
NotifyModeGrab = 1
NotifyModeUngrab = 2
NotifyModeWhileGrabbed = 3
)
const EnterNotify = 7
type EnterNotifyEvent struct {
Detail byte
Time Timestamp
Root Id
Event Id
Child Id
RootX int16
RootY int16
EventX int16
EventY int16
State uint16
Mode byte
SameScreenFocus byte
}
func getEnterNotifyEvent(b []byte) EnterNotifyEvent {
var v EnterNotifyEvent
v.Detail = b[1]
v.Time = Timestamp(get32(b[4:]))
v.Root = Id(get32(b[8:]))
v.Event = Id(get32(b[12:]))
v.Child = Id(get32(b[16:]))
v.RootX = int16(get16(b[20:]))
v.RootY = int16(get16(b[22:]))
v.EventX = int16(get16(b[24:]))
v.EventY = int16(get16(b[26:]))
v.State = get16(b[28:])
v.Mode = b[30]
v.SameScreenFocus = b[31]
return v
}
const LeaveNotify = 8
type LeaveNotifyEvent EnterNotifyEvent
func getLeaveNotifyEvent(b []byte) LeaveNotifyEvent {
return (LeaveNotifyEvent)(getEnterNotifyEvent(b))
}
const FocusIn = 9
type FocusInEvent struct {
Detail byte
Event Id
Mode byte
}
func getFocusInEvent(b []byte) FocusInEvent {
var v FocusInEvent
v.Detail = b[1]
v.Event = Id(get32(b[4:]))
v.Mode = b[8]
return v
}
const FocusOut = 10
type FocusOutEvent FocusInEvent
func getFocusOutEvent(b []byte) FocusOutEvent { return (FocusOutEvent)(getFocusInEvent(b)) }
const KeymapNotify = 11
type KeymapNotifyEvent struct {
Keys [31]byte
}
func getKeymapNotifyEvent(b []byte) KeymapNotifyEvent {
var v KeymapNotifyEvent
copy(v.Keys[0:31], b[1:])
return v
}
const Expose = 12
type ExposeEvent struct {
Window Id
X uint16
Y uint16
Width uint16
Height uint16
Count uint16
}
func getExposeEvent(b []byte) ExposeEvent {
var v ExposeEvent
v.Window = Id(get32(b[4:]))
v.X = get16(b[8:])
v.Y = get16(b[10:])
v.Width = get16(b[12:])
v.Height = get16(b[14:])
v.Count = get16(b[16:])
return v
}
const GraphicsExposure = 13
type GraphicsExposureEvent struct {
Drawable Id
X uint16
Y uint16
Width uint16
Height uint16
MinorOpcode uint16
Count uint16
MajorOpcode byte
}
func getGraphicsExposureEvent(b []byte) GraphicsExposureEvent {
var v GraphicsExposureEvent
v.Drawable = Id(get32(b[4:]))
v.X = get16(b[8:])
v.Y = get16(b[10:])
v.Width = get16(b[12:])
v.Height = get16(b[14:])
v.MinorOpcode = get16(b[16:])
v.Count = get16(b[18:])
v.MajorOpcode = b[20]
return v
}
const NoExposure = 14
type NoExposureEvent struct {
Drawable Id
MinorOpcode uint16
MajorOpcode byte
}
func getNoExposureEvent(b []byte) NoExposureEvent {
var v NoExposureEvent
v.Drawable = Id(get32(b[4:]))
v.MinorOpcode = get16(b[8:])
v.MajorOpcode = b[10]
return v
}
const (
VisibilityUnobscured = 0
VisibilityPartiallyObscured = 1
VisibilityFullyObscured = 2
)
const VisibilityNotify = 15
type VisibilityNotifyEvent struct {
Window Id
State byte
}
func getVisibilityNotifyEvent(b []byte) VisibilityNotifyEvent {
var v VisibilityNotifyEvent
v.Window = Id(get32(b[4:]))
v.State = b[8]
return v
}
const CreateNotify = 16
type CreateNotifyEvent struct {
Parent Id
Window Id
X int16
Y int16
Width uint16
Height uint16
BorderWidth uint16
OverrideRedirect byte
}
func getCreateNotifyEvent(b []byte) CreateNotifyEvent {
var v CreateNotifyEvent
v.Parent = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.X = int16(get16(b[12:]))
v.Y = int16(get16(b[14:]))
v.Width = get16(b[16:])
v.Height = get16(b[18:])
v.BorderWidth = get16(b[20:])
v.OverrideRedirect = b[22]
return v
}
const DestroyNotify = 17
type DestroyNotifyEvent struct {
Event Id
Window Id
}
func getDestroyNotifyEvent(b []byte) DestroyNotifyEvent {
var v DestroyNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
return v
}
const UnmapNotify = 18
type UnmapNotifyEvent struct {
Event Id
Window Id
FromConfigure byte
}
func getUnmapNotifyEvent(b []byte) UnmapNotifyEvent {
var v UnmapNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.FromConfigure = b[12]
return v
}
const MapNotify = 19
type MapNotifyEvent struct {
Event Id
Window Id
OverrideRedirect byte
}
func getMapNotifyEvent(b []byte) MapNotifyEvent {
var v MapNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.OverrideRedirect = b[12]
return v
}
const MapRequest = 20
type MapRequestEvent struct {
Parent Id
Window Id
}
func getMapRequestEvent(b []byte) MapRequestEvent {
var v MapRequestEvent
v.Parent = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
return v
}
const ReparentNotify = 21
type ReparentNotifyEvent struct {
Event Id
Window Id
Parent Id
X int16
Y int16
OverrideRedirect byte
}
func getReparentNotifyEvent(b []byte) ReparentNotifyEvent {
var v ReparentNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.Parent = Id(get32(b[12:]))
v.X = int16(get16(b[16:]))
v.Y = int16(get16(b[18:]))
v.OverrideRedirect = b[20]
return v
}
const ConfigureNotify = 22
type ConfigureNotifyEvent struct {
Event Id
Window Id
AboveSibling Id
X int16
Y int16
Width uint16
Height uint16
BorderWidth uint16
OverrideRedirect byte
}
func getConfigureNotifyEvent(b []byte) ConfigureNotifyEvent {
var v ConfigureNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.AboveSibling = Id(get32(b[12:]))
v.X = int16(get16(b[16:]))
v.Y = int16(get16(b[18:]))
v.Width = get16(b[20:])
v.Height = get16(b[22:])
v.BorderWidth = get16(b[24:])
v.OverrideRedirect = b[26]
return v
}
const ConfigureRequest = 23
type ConfigureRequestEvent struct {
StackMode byte
Parent Id
Window Id
Sibling Id
X int16
Y int16
Width uint16
Height uint16
BorderWidth uint16
ValueMask uint16
}
func getConfigureRequestEvent(b []byte) ConfigureRequestEvent {
var v ConfigureRequestEvent
v.StackMode = b[1]
v.Parent = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.Sibling = Id(get32(b[12:]))
v.X = int16(get16(b[16:]))
v.Y = int16(get16(b[18:]))
v.Width = get16(b[20:])
v.Height = get16(b[22:])
v.BorderWidth = get16(b[24:])
v.ValueMask = get16(b[26:])
return v
}
const GravityNotify = 24
type GravityNotifyEvent struct {
Event Id
Window Id
X int16
Y int16
}
func getGravityNotifyEvent(b []byte) GravityNotifyEvent {
var v GravityNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.X = int16(get16(b[12:]))
v.Y = int16(get16(b[14:]))
return v
}
const ResizeRequest = 25
type ResizeRequestEvent struct {
Window Id
Width uint16
Height uint16
}
func getResizeRequestEvent(b []byte) ResizeRequestEvent {
var v ResizeRequestEvent
v.Window = Id(get32(b[4:]))
v.Width = get16(b[8:])
v.Height = get16(b[10:])
return v
}
const (
PlaceOnTop = 0
PlaceOnBottom = 1
)
const CirculateNotify = 26
type CirculateNotifyEvent struct {
Event Id
Window Id
Place byte
}
func getCirculateNotifyEvent(b []byte) CirculateNotifyEvent {
var v CirculateNotifyEvent
v.Event = Id(get32(b[4:]))
v.Window = Id(get32(b[8:]))
v.Place = b[16]
return v
}
const CirculateRequest = 27
type CirculateRequestEvent CirculateNotifyEvent
func getCirculateRequestEvent(b []byte) CirculateRequestEvent {
return (CirculateRequestEvent)(getCirculateNotifyEvent(b))
}
const (
PropertyNewValue = 0
PropertyDelete = 1
)
const PropertyNotify = 28
type PropertyNotifyEvent struct {
Window Id
Atom Id
Time Timestamp
State byte
}
func getPropertyNotifyEvent(b []byte) PropertyNotifyEvent {
var v PropertyNotifyEvent
v.Window = Id(get32(b[4:]))
v.Atom = Id(get32(b[8:]))
v.Time = Timestamp(get32(b[12:]))
v.State = b[16]
return v
}
const SelectionClear = 29
type SelectionClearEvent struct {
Time Timestamp
Owner Id
Selection Id
}
func getSelectionClearEvent(b []byte) SelectionClearEvent {
var v SelectionClearEvent
v.Time = Timestamp(get32(b[4:]))
v.Owner = Id(get32(b[8:]))
v.Selection = Id(get32(b[12:]))
return v
}
const (
TimeCurrentTime = 0
)
const (
AtomNone = 0
AtomAny = 0
AtomPrimary = 1
AtomSecondary = 2
AtomArc = 3
AtomAtom = 4
AtomBitmap = 5
AtomCardinal = 6
AtomColormap = 7
AtomCursor = 8
AtomCutBuffer0 = 9
AtomCutBuffer1 = 10
AtomCutBuffer2 = 11
AtomCutBuffer3 = 12
AtomCutBuffer4 = 13
AtomCutBuffer5 = 14
AtomCutBuffer6 = 15
AtomCutBuffer7 = 16
AtomDrawable = 17
AtomFont = 18
AtomInteger = 19
AtomPixmap = 20
AtomPoint = 21
AtomRectangle = 22
AtomResourceManager = 23
AtomRgbColorMap = 24
AtomRgbBestMap = 25
AtomRgbBlueMap = 26
AtomRgbDefaultMap = 27
AtomRgbGrayMap = 28
AtomRgbGreenMap = 29
AtomRgbRedMap = 30
AtomString = 31
AtomVisualid = 32
AtomWindow = 33
AtomWmCommand = 34
AtomWmHints = 35
AtomWmClientMachine = 36
AtomWmIconName = 37
AtomWmIconSize = 38
AtomWmName = 39
AtomWmNormalHints = 40
AtomWmSizeHints = 41
AtomWmZoomHints = 42
AtomMinSpace = 43
AtomNormSpace = 44
AtomMaxSpace = 45
AtomEndSpace = 46
AtomSuperscriptX = 47
AtomSuperscriptY = 48
AtomSubscriptX = 49
AtomSubscriptY = 50
AtomUnderlinePosition = 51
AtomUnderlineThickness = 52
AtomStrikeoutAscent = 53
AtomStrikeoutDescent = 54
AtomItalicAngle = 55
AtomXHeight = 56
AtomQuadWidth = 57
AtomWeight = 58
AtomPointSize = 59
AtomResolution = 60
AtomCopyright = 61
AtomNotice = 62
AtomFontName = 63
AtomFamilyName = 64
AtomFullName = 65
AtomCapHeight = 66
AtomWmClass = 67
AtomWmTransientFor = 68
)
const SelectionRequest = 30
type SelectionRequestEvent struct {
Time Timestamp
Owner Id
Requestor Id
Selection Id
Target Id
Property Id
}
func getSelectionRequestEvent(b []byte) SelectionRequestEvent {
var v SelectionRequestEvent
v.Time = Timestamp(get32(b[4:]))
v.Owner = Id(get32(b[8:]))
v.Requestor = Id(get32(b[12:]))
v.Selection = Id(get32(b[16:]))
v.Target = Id(get32(b[20:]))
v.Property = Id(get32(b[24:]))
return v
}
const SelectionNotify = 31
type SelectionNotifyEvent struct {
Time Timestamp
Requestor Id
Selection Id
Target Id
Property Id
}
func getSelectionNotifyEvent(b []byte) SelectionNotifyEvent {
var v SelectionNotifyEvent
v.Time = Timestamp(get32(b[4:]))
v.Requestor = Id(get32(b[8:]))
v.Selection = Id(get32(b[12:]))
v.Target = Id(get32(b[16:]))
v.Property = Id(get32(b[20:]))
return v
}
const (
ColormapStateUninstalled = 0
ColormapStateInstalled = 1
)
const (
ColormapNone = 0
)
const ColormapNotify = 32
type ColormapNotifyEvent struct {
Window Id
Colormap Id
New byte
State byte
}
func getColormapNotifyEvent(b []byte) ColormapNotifyEvent {
var v ColormapNotifyEvent
v.Window = Id(get32(b[4:]))
v.Colormap = Id(get32(b[8:]))
v.New = b[12]
v.State = b[13]
return v
}
const ClientMessage = 33
type ClientMessageEvent struct {
Format byte
Window Id
Type Id
Data ClientMessageData
}
func getClientMessageEvent(b []byte) ClientMessageEvent {
var v ClientMessageEvent
v.Format = b[1]
v.Window = Id(get32(b[4:]))
v.Type = Id(get32(b[8:]))
getClientMessageData(b[12:], &v.Data)
return v
}
const (
MappingModifier = 0
MappingKeyboard = 1
MappingPointer = 2
)
const MappingNotify = 34
type MappingNotifyEvent struct {
Request byte
FirstKeycode byte
Count byte
}
func getMappingNotifyEvent(b []byte) MappingNotifyEvent {
var v MappingNotifyEvent
v.Request = b[4]
v.FirstKeycode = b[5]
v.Count = b[6]
return v
}
const BadRequest = 1
const BadValue = 2
const BadWindow = 3
const BadPixmap = 4
const BadAtom = 5
const BadCursor = 6
const BadFont = 7
const BadMatch = 8
const BadDrawable = 9
const BadAccess = 10
const BadAlloc = 11
const BadColormap = 12
const BadGContext = 13
const BadIDChoice = 14
const BadName = 15
const BadLength = 16
const BadImplementation = 17
const (
WindowClassCopyFromParent = 0
WindowClassInputOutput = 1
WindowClassInputOnly = 2
)
const (
CWBackPixmap = 1
CWBackPixel = 2
CWBorderPixmap = 4
CWBorderPixel = 8
CWBitGravity = 16
CWWinGravity = 32
CWBackingStore = 64
CWBackingPlanes = 128
CWBackingPixel = 256
CWOverrideRedirect = 512
CWSaveUnder = 1024
CWEventMask = 2048
CWDontPropagate = 4096
CWColormap = 8192
CWCursor = 16384
)
const (
BackPixmapNone = 0
BackPixmapParentRelative = 1
)
const (
GravityBitForget = 0
GravityWinUnmap = 0
GravityNorthWest = 1
GravityNorth = 2
GravityNorthEast = 3
GravityWest = 4
GravityCenter = 5
GravityEast = 6
GravitySouthWest = 7
GravitySouth = 8
GravitySouthEast = 9
GravityStatic = 10
)
func (c *Conn) CreateWindow(Depth byte, Wid Id, Parent Id, X int16, Y int16, Width uint16, Height uint16, BorderWidth uint16, Class uint16, Visual Id, ValueMask uint32, ValueList []uint32) {
b := c.scratch[0:32]
n := 32
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 1
b[1] = Depth
put32(b[4:], uint32(Wid))
put32(b[8:], uint32(Parent))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
put16(b[16:], Width)
put16(b[18:], Height)
put16(b[20:], BorderWidth)
put16(b[22:], Class)
put32(b[24:], uint32(Visual))
put32(b[28:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
func (c *Conn) ChangeWindowAttributes(Window Id, ValueMask uint32, ValueList []uint32) {
b := c.scratch[0:12]
n := 12
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 2
put32(b[4:], uint32(Window))
put32(b[8:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
const (
MapStateUnmapped = 0
MapStateUnviewable = 1
MapStateViewable = 2
)
func (c *Conn) GetWindowAttributesRequest(Window Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 3
put32(b[4:], uint32(Window))
return c.sendRequest(b)
}
func (c *Conn) GetWindowAttributes(Window Id) (*GetWindowAttributesReply, os.Error) {
return c.GetWindowAttributesReply(c.GetWindowAttributesRequest(Window))
}
type GetWindowAttributesReply struct {
BackingStore byte
Visual Id
Class uint16
BitGravity byte
WinGravity byte
BackingPlanes uint32
BackingPixel uint32
SaveUnder byte
MapIsInstalled byte
MapState byte
OverrideRedirect byte
Colormap Id
AllEventMasks uint32
YourEventMask uint32
DoNotPropagateMask uint16
}
func (c *Conn) GetWindowAttributesReply(cookie Cookie) (*GetWindowAttributesReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetWindowAttributesReply)
v.BackingStore = b[1]
v.Visual = Id(get32(b[8:]))
v.Class = get16(b[12:])
v.BitGravity = b[14]
v.WinGravity = b[15]
v.BackingPlanes = get32(b[16:])
v.BackingPixel = get32(b[20:])
v.SaveUnder = b[24]
v.MapIsInstalled = b[25]
v.MapState = b[26]
v.OverrideRedirect = b[27]
v.Colormap = Id(get32(b[28:]))
v.AllEventMasks = get32(b[32:])
v.YourEventMask = get32(b[36:])
v.DoNotPropagateMask = get16(b[40:])
return v, nil
}
func (c *Conn) DestroyWindow(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 4
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) DestroySubwindows(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 5
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
const (
SetModeInsert = 0
SetModeDelete = 1
)
func (c *Conn) ChangeSaveSet(Mode byte, Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 6
b[1] = Mode
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) ReparentWindow(Window Id, Parent Id, X int16, Y int16) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 7
put32(b[4:], uint32(Window))
put32(b[8:], uint32(Parent))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
c.sendRequest(b)
}
func (c *Conn) MapWindow(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 8
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) MapSubwindows(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 9
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) UnmapWindow(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 10
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) UnmapSubwindows(Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 11
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
const (
ConfigWindowX = 1
ConfigWindowY = 2
ConfigWindowWidth = 4
ConfigWindowHeight = 8
ConfigWindowBorderWidth = 16
ConfigWindowSibling = 32
ConfigWindowStackMode = 64
)
const (
StackModeAbove = 0
StackModeBelow = 1
StackModeTopIf = 2
StackModeBottomIf = 3
StackModeOpposite = 4
)
func (c *Conn) ConfigureWindow(Window Id, ValueMask uint16, ValueList []uint32) {
b := c.scratch[0:12]
n := 12
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 12
put32(b[4:], uint32(Window))
put16(b[8:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
const (
CirculateRaiseLowest = 0
CirculateLowerHighest = 1
)
func (c *Conn) CirculateWindow(Direction byte, Window Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 13
b[1] = Direction
put32(b[4:], uint32(Window))
c.sendRequest(b)
}
func (c *Conn) GetGeometryRequest(Drawable Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 14
put32(b[4:], uint32(Drawable))
return c.sendRequest(b)
}
func (c *Conn) GetGeometry(Drawable Id) (*GetGeometryReply, os.Error) {
return c.GetGeometryReply(c.GetGeometryRequest(Drawable))
}
type GetGeometryReply struct {
Depth byte
Root Id
X int16
Y int16
Width uint16
Height uint16
BorderWidth uint16
}
func (c *Conn) GetGeometryReply(cookie Cookie) (*GetGeometryReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetGeometryReply)
v.Depth = b[1]
v.Root = Id(get32(b[8:]))
v.X = int16(get16(b[12:]))
v.Y = int16(get16(b[14:]))
v.Width = get16(b[16:])
v.Height = get16(b[18:])
v.BorderWidth = get16(b[20:])
return v, nil
}
func (c *Conn) QueryTreeRequest(Window Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 15
put32(b[4:], uint32(Window))
return c.sendRequest(b)
}
func (c *Conn) QueryTree(Window Id) (*QueryTreeReply, os.Error) {
return c.QueryTreeReply(c.QueryTreeRequest(Window))
}
type QueryTreeReply struct {
Root Id
Parent Id
ChildrenLen uint16
Children []Id
}
func (c *Conn) QueryTreeReply(cookie Cookie) (*QueryTreeReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryTreeReply)
v.Root = Id(get32(b[8:]))
v.Parent = Id(get32(b[12:]))
v.ChildrenLen = get16(b[16:])
offset := 32
v.Children = make([]Id, int(v.ChildrenLen))
for i := 0; i < len(v.Children); i++ {
v.Children[i] = Id(get32(b[offset+i*4:]))
}
offset += len(v.Children) * 4
return v, nil
}
func (c *Conn) InternAtomRequest(OnlyIfExists byte, Name string) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 16
b[1] = OnlyIfExists
put16(b[4:], uint16(len(Name)))
cookie := c.sendRequest(b)
c.sendString(Name)
return cookie
}
func (c *Conn) InternAtom(OnlyIfExists byte, Name string) (*InternAtomReply, os.Error) {
return c.InternAtomReply(c.InternAtomRequest(OnlyIfExists, Name))
}
type InternAtomReply struct {
Atom Id
}
func (c *Conn) InternAtomReply(cookie Cookie) (*InternAtomReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(InternAtomReply)
v.Atom = Id(get32(b[8:]))
return v, nil
}
func (c *Conn) GetAtomNameRequest(Atom Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 17
put32(b[4:], uint32(Atom))
return c.sendRequest(b)
}
func (c *Conn) GetAtomName(Atom Id) (*GetAtomNameReply, os.Error) {
return c.GetAtomNameReply(c.GetAtomNameRequest(Atom))
}
type GetAtomNameReply struct {
NameLen uint16
Name []byte
}
func (c *Conn) GetAtomNameReply(cookie Cookie) (*GetAtomNameReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetAtomNameReply)
v.NameLen = get16(b[8:])
offset := 32
v.Name = make([]byte, int(v.NameLen))
copy(v.Name[0:len(v.Name)], b[offset:])
offset += len(v.Name) * 1
return v, nil
}
const (
PropModeReplace = 0
PropModePrepend = 1
PropModeAppend = 2
)
func (c *Conn) ChangeProperty(Mode byte, Window Id, Property Id, Type Id, Format byte, Data []byte) {
b := c.scratch[0:24]
n := 24
n += pad(((len(Data) * int(Format)) / 8) * 1)
put16(b[2:], uint16(n/4))
b[0] = 18
b[1] = Mode
put32(b[4:], uint32(Window))
put32(b[8:], uint32(Property))
put32(b[12:], uint32(Type))
b[16] = Format
put32(b[20:], uint32(len(Data)))
c.sendRequest(b)
c.sendBytes(Data[0:((len(Data) * int(Format)) / 8)])
}
func (c *Conn) DeleteProperty(Window Id, Property Id) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 19
put32(b[4:], uint32(Window))
put32(b[8:], uint32(Property))
c.sendRequest(b)
}
const (
GetPropertyTypeAny = 0
)
func (c *Conn) GetPropertyRequest(Delete byte, Window Id, Property Id, Type Id, LongOffset uint32, LongLength uint32) Cookie {
b := c.scratch[0:24]
put16(b[2:], 6)
b[0] = 20
b[1] = Delete
put32(b[4:], uint32(Window))
put32(b[8:], uint32(Property))
put32(b[12:], uint32(Type))
put32(b[16:], LongOffset)
put32(b[20:], LongLength)
return c.sendRequest(b)
}
func (c *Conn) GetProperty(Delete byte, Window Id, Property Id, Type Id, LongOffset uint32, LongLength uint32) (*GetPropertyReply, os.Error) {
return c.GetPropertyReply(c.GetPropertyRequest(Delete, Window, Property, Type, LongOffset, LongLength))
}
type GetPropertyReply struct {
Format byte
Type Id
BytesAfter uint32
ValueLen uint32
Value []byte
}
func (c *Conn) GetPropertyReply(cookie Cookie) (*GetPropertyReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetPropertyReply)
v.Format = b[1]
v.Type = Id(get32(b[8:]))
v.BytesAfter = get32(b[12:])
v.ValueLen = get32(b[16:])
offset := 32
v.Value = make([]byte, (int(v.ValueLen) * (int(v.Format) / 8)))
copy(v.Value[0:len(v.Value)], b[offset:])
offset += len(v.Value) * 1
return v, nil
}
func (c *Conn) ListPropertiesRequest(Window Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 21
put32(b[4:], uint32(Window))
return c.sendRequest(b)
}
func (c *Conn) ListProperties(Window Id) (*ListPropertiesReply, os.Error) {
return c.ListPropertiesReply(c.ListPropertiesRequest(Window))
}
type ListPropertiesReply struct {
AtomsLen uint16
Atoms []Id
}
func (c *Conn) ListPropertiesReply(cookie Cookie) (*ListPropertiesReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListPropertiesReply)
v.AtomsLen = get16(b[8:])
offset := 32
v.Atoms = make([]Id, int(v.AtomsLen))
for i := 0; i < len(v.Atoms); i++ {
v.Atoms[i] = Id(get32(b[offset+i*4:]))
}
offset += len(v.Atoms) * 4
return v, nil
}
func (c *Conn) SetSelectionOwner(Owner Id, Selection Id, Time Timestamp) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 22
put32(b[4:], uint32(Owner))
put32(b[8:], uint32(Selection))
put32(b[12:], uint32(Time))
c.sendRequest(b)
}
func (c *Conn) GetSelectionOwnerRequest(Selection Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 23
put32(b[4:], uint32(Selection))
return c.sendRequest(b)
}
func (c *Conn) GetSelectionOwner(Selection Id) (*GetSelectionOwnerReply, os.Error) {
return c.GetSelectionOwnerReply(c.GetSelectionOwnerRequest(Selection))
}
type GetSelectionOwnerReply struct {
Owner Id
}
func (c *Conn) GetSelectionOwnerReply(cookie Cookie) (*GetSelectionOwnerReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetSelectionOwnerReply)
v.Owner = Id(get32(b[8:]))
return v, nil
}
func (c *Conn) ConvertSelection(Requestor Id, Selection Id, Target Id, Property Id, Time Timestamp) {
b := c.scratch[0:24]
put16(b[2:], 6)
b[0] = 24
put32(b[4:], uint32(Requestor))
put32(b[8:], uint32(Selection))
put32(b[12:], uint32(Target))
put32(b[16:], uint32(Property))
put32(b[20:], uint32(Time))
c.sendRequest(b)
}
const (
SendEventDestPointerWindow = 0
SendEventDestItemFocus = 1
)
func (c *Conn) SendEvent(Propagate byte, Destination Id, EventMask uint32, Event []byte) {
b := make([]byte, 44)
put16(b[2:], 11)
b[0] = 25
b[1] = Propagate
put32(b[4:], uint32(Destination))
put32(b[8:], EventMask)
copy(b[12:44], Event)
c.sendRequest(b)
}
const (
GrabModeSync = 0
GrabModeAsync = 1
)
const (
GrabStatusSuccess = 0
GrabStatusAlreadyGrabbed = 1
GrabStatusInvalidTime = 2
GrabStatusNotViewable = 3
GrabStatusFrozen = 4
)
const (
CursorNone = 0
)
func (c *Conn) GrabPointerRequest(OwnerEvents byte, GrabWindow Id, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Id, Cursor Id, Time Timestamp) Cookie {
b := c.scratch[0:24]
put16(b[2:], 6)
b[0] = 26
b[1] = OwnerEvents
put32(b[4:], uint32(GrabWindow))
put16(b[8:], EventMask)
b[10] = PointerMode
b[11] = KeyboardMode
put32(b[12:], uint32(ConfineTo))
put32(b[16:], uint32(Cursor))
put32(b[20:], uint32(Time))
return c.sendRequest(b)
}
func (c *Conn) GrabPointer(OwnerEvents byte, GrabWindow Id, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Id, Cursor Id, Time Timestamp) (*GrabPointerReply, os.Error) {
return c.GrabPointerReply(c.GrabPointerRequest(OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Time))
}
type GrabPointerReply struct {
Status byte
}
func (c *Conn) GrabPointerReply(cookie Cookie) (*GrabPointerReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GrabPointerReply)
v.Status = b[1]
return v, nil
}
func (c *Conn) UngrabPointer(Time Timestamp) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 27
put32(b[4:], uint32(Time))
c.sendRequest(b)
}
const (
ButtonIndexAny = 0
ButtonIndex1 = 1
ButtonIndex2 = 2
ButtonIndex3 = 3
ButtonIndex4 = 4
ButtonIndex5 = 5
)
func (c *Conn) GrabButton(OwnerEvents byte, GrabWindow Id, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Id, Cursor Id, Button byte, Modifiers uint16) {
b := c.scratch[0:24]
put16(b[2:], 6)
b[0] = 28
b[1] = OwnerEvents
put32(b[4:], uint32(GrabWindow))
put16(b[8:], EventMask)
b[10] = PointerMode
b[11] = KeyboardMode
put32(b[12:], uint32(ConfineTo))
put32(b[16:], uint32(Cursor))
b[20] = Button
put16(b[22:], Modifiers)
c.sendRequest(b)
}
func (c *Conn) UngrabButton(Button byte, GrabWindow Id, Modifiers uint16) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 29
b[1] = Button
put32(b[4:], uint32(GrabWindow))
put16(b[8:], Modifiers)
c.sendRequest(b)
}
func (c *Conn) ChangeActivePointerGrab(Cursor Id, Time Timestamp, EventMask uint16) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 30
put32(b[4:], uint32(Cursor))
put32(b[8:], uint32(Time))
put16(b[12:], EventMask)
c.sendRequest(b)
}
func (c *Conn) GrabKeyboardRequest(OwnerEvents byte, GrabWindow Id, Time Timestamp, PointerMode byte, KeyboardMode byte) Cookie {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 31
b[1] = OwnerEvents
put32(b[4:], uint32(GrabWindow))
put32(b[8:], uint32(Time))
b[12] = PointerMode
b[13] = KeyboardMode
return c.sendRequest(b)
}
func (c *Conn) GrabKeyboard(OwnerEvents byte, GrabWindow Id, Time Timestamp, PointerMode byte, KeyboardMode byte) (*GrabKeyboardReply, os.Error) {
return c.GrabKeyboardReply(c.GrabKeyboardRequest(OwnerEvents, GrabWindow, Time, PointerMode, KeyboardMode))
}
type GrabKeyboardReply struct {
Status byte
}
func (c *Conn) GrabKeyboardReply(cookie Cookie) (*GrabKeyboardReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GrabKeyboardReply)
v.Status = b[1]
return v, nil
}
func (c *Conn) UngrabKeyboard(Time Timestamp) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 32
put32(b[4:], uint32(Time))
c.sendRequest(b)
}
const (
GrabAny = 0
)
func (c *Conn) GrabKey(OwnerEvents byte, GrabWindow Id, Modifiers uint16, Key byte, PointerMode byte, KeyboardMode byte) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 33
b[1] = OwnerEvents
put32(b[4:], uint32(GrabWindow))
put16(b[8:], Modifiers)
b[10] = Key
b[11] = PointerMode
b[12] = KeyboardMode
c.sendRequest(b)
}
func (c *Conn) UngrabKey(Key byte, GrabWindow Id, Modifiers uint16) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 34
b[1] = Key
put32(b[4:], uint32(GrabWindow))
put16(b[8:], Modifiers)
c.sendRequest(b)
}
const (
AllowAsyncPointer = 0
AllowSyncPointer = 1
AllowReplayPointer = 2
AllowAsyncKeyboard = 3
AllowSyncKeyboard = 4
AllowReplayKeyboard = 5
AllowAsyncBoth = 6
AllowSyncBoth = 7
)
func (c *Conn) AllowEvents(Mode byte, Time Timestamp) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 35
b[1] = Mode
put32(b[4:], uint32(Time))
c.sendRequest(b)
}
func (c *Conn) GrabServer() {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 36
c.sendRequest(b)
}
func (c *Conn) UngrabServer() {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 37
c.sendRequest(b)
}
func (c *Conn) QueryPointerRequest(Window Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 38
put32(b[4:], uint32(Window))
return c.sendRequest(b)
}
func (c *Conn) QueryPointer(Window Id) (*QueryPointerReply, os.Error) {
return c.QueryPointerReply(c.QueryPointerRequest(Window))
}
type QueryPointerReply struct {
SameScreen byte
Root Id
Child Id
RootX int16
RootY int16
WinX int16
WinY int16
Mask uint16
}
func (c *Conn) QueryPointerReply(cookie Cookie) (*QueryPointerReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryPointerReply)
v.SameScreen = b[1]
v.Root = Id(get32(b[8:]))
v.Child = Id(get32(b[12:]))
v.RootX = int16(get16(b[16:]))
v.RootY = int16(get16(b[18:]))
v.WinX = int16(get16(b[20:]))
v.WinY = int16(get16(b[22:]))
v.Mask = get16(b[24:])
return v, nil
}
type Timecoord struct {
Time Timestamp
X int16
Y int16
}
func getTimecoord(b []byte, v *Timecoord) int {
v.Time = Timestamp(get32(b[0:]))
v.X = int16(get16(b[4:]))
v.Y = int16(get16(b[6:]))
return 8
}
func (c *Conn) sendTimecoordList(list []Timecoord, count int) {
b0 := make([]byte, 8*count)
for k := 0; k < count; k++ {
b := b0[k*8:]
put32(b[0:], uint32(list[k].Time))
put16(b[4:], uint16(list[k].X))
put16(b[6:], uint16(list[k].Y))
}
c.sendBytes(b0)
}
func (c *Conn) GetMotionEventsRequest(Window Id, Start Timestamp, Stop Timestamp) Cookie {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 39
put32(b[4:], uint32(Window))
put32(b[8:], uint32(Start))
put32(b[12:], uint32(Stop))
return c.sendRequest(b)
}
func (c *Conn) GetMotionEvents(Window Id, Start Timestamp, Stop Timestamp) (*GetMotionEventsReply, os.Error) {
return c.GetMotionEventsReply(c.GetMotionEventsRequest(Window, Start, Stop))
}
type GetMotionEventsReply struct {
EventsLen uint32
Events []Timecoord
}
func (c *Conn) GetMotionEventsReply(cookie Cookie) (*GetMotionEventsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetMotionEventsReply)
v.EventsLen = get32(b[8:])
offset := 32
v.Events = make([]Timecoord, int(v.EventsLen))
for i := 0; i < int(v.EventsLen); i++ {
offset += getTimecoord(b[offset:], &v.Events[i])
}
return v, nil
}
func (c *Conn) TranslateCoordinatesRequest(SrcWindow Id, DstWindow Id, SrcX int16, SrcY int16) Cookie {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 40
put32(b[4:], uint32(SrcWindow))
put32(b[8:], uint32(DstWindow))
put16(b[12:], uint16(SrcX))
put16(b[14:], uint16(SrcY))
return c.sendRequest(b)
}
func (c *Conn) TranslateCoordinates(SrcWindow Id, DstWindow Id, SrcX int16, SrcY int16) (*TranslateCoordinatesReply, os.Error) {
return c.TranslateCoordinatesReply(c.TranslateCoordinatesRequest(SrcWindow, DstWindow, SrcX, SrcY))
}
type TranslateCoordinatesReply struct {
SameScreen byte
Child Id
DstX uint16
DstY uint16
}
func (c *Conn) TranslateCoordinatesReply(cookie Cookie) (*TranslateCoordinatesReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(TranslateCoordinatesReply)
v.SameScreen = b[1]
v.Child = Id(get32(b[8:]))
v.DstX = get16(b[12:])
v.DstY = get16(b[14:])
return v, nil
}
func (c *Conn) WarpPointer(SrcWindow Id, DstWindow Id, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) {
b := c.scratch[0:24]
put16(b[2:], 6)
b[0] = 41
put32(b[4:], uint32(SrcWindow))
put32(b[8:], uint32(DstWindow))
put16(b[12:], uint16(SrcX))
put16(b[14:], uint16(SrcY))
put16(b[16:], SrcWidth)
put16(b[18:], SrcHeight)
put16(b[20:], uint16(DstX))
put16(b[22:], uint16(DstY))
c.sendRequest(b)
}
const (
InputFocusNone = 0
InputFocusPointerRoot = 1
InputFocusParent = 2
InputFocusFollowKeyboard = 3
)
func (c *Conn) SetInputFocus(RevertTo byte, Focus Id, Time Timestamp) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 42
b[1] = RevertTo
put32(b[4:], uint32(Focus))
put32(b[8:], uint32(Time))
c.sendRequest(b)
}
func (c *Conn) GetInputFocusRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 43
return c.sendRequest(b)
}
func (c *Conn) GetInputFocus() (*GetInputFocusReply, os.Error) {
return c.GetInputFocusReply(c.GetInputFocusRequest())
}
type GetInputFocusReply struct {
RevertTo byte
Focus Id
}
func (c *Conn) GetInputFocusReply(cookie Cookie) (*GetInputFocusReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetInputFocusReply)
v.RevertTo = b[1]
v.Focus = Id(get32(b[8:]))
return v, nil
}
func (c *Conn) QueryKeymapRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 44
return c.sendRequest(b)
}
func (c *Conn) QueryKeymap() (*QueryKeymapReply, os.Error) {
return c.QueryKeymapReply(c.QueryKeymapRequest())
}
type QueryKeymapReply struct {
Keys [32]byte
}
func (c *Conn) QueryKeymapReply(cookie Cookie) (*QueryKeymapReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryKeymapReply)
copy(v.Keys[0:32], b[8:])
return v, nil
}
func (c *Conn) OpenFont(Fid Id, Name string) {
b := c.scratch[0:12]
n := 12
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 45
put32(b[4:], uint32(Fid))
put16(b[8:], uint16(len(Name)))
c.sendRequest(b)
c.sendString(Name)
}
func (c *Conn) CloseFont(Font Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 46
put32(b[4:], uint32(Font))
c.sendRequest(b)
}
const (
FontDrawLeftToRight = 0
FontDrawRightToLeft = 1
)
type Fontprop struct {
Name Id
Value uint32
}
func getFontprop(b []byte, v *Fontprop) int {
v.Name = Id(get32(b[0:]))
v.Value = get32(b[4:])
return 8
}
func (c *Conn) sendFontpropList(list []Fontprop, count int) {
b0 := make([]byte, 8*count)
for k := 0; k < count; k++ {
b := b0[k*8:]
put32(b[0:], uint32(list[k].Name))
put32(b[4:], list[k].Value)
}
c.sendBytes(b0)
}
type Charinfo struct {
LeftSideBearing int16
RightSideBearing int16
CharacterWidth int16
Ascent int16
Descent int16
Attributes uint16
}
func getCharinfo(b []byte, v *Charinfo) int {
v.LeftSideBearing = int16(get16(b[0:]))
v.RightSideBearing = int16(get16(b[2:]))
v.CharacterWidth = int16(get16(b[4:]))
v.Ascent = int16(get16(b[6:]))
v.Descent = int16(get16(b[8:]))
v.Attributes = get16(b[10:])
return 12
}
func (c *Conn) sendCharinfoList(list []Charinfo, count int) {
b0 := make([]byte, 12*count)
for k := 0; k < count; k++ {
b := b0[k*12:]
put16(b[0:], uint16(list[k].LeftSideBearing))
put16(b[2:], uint16(list[k].RightSideBearing))
put16(b[4:], uint16(list[k].CharacterWidth))
put16(b[6:], uint16(list[k].Ascent))
put16(b[8:], uint16(list[k].Descent))
put16(b[10:], list[k].Attributes)
}
c.sendBytes(b0)
}
func (c *Conn) QueryFontRequest(Font Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 47
put32(b[4:], uint32(Font))
return c.sendRequest(b)
}
func (c *Conn) QueryFont(Font Id) (*QueryFontReply, os.Error) {
return c.QueryFontReply(c.QueryFontRequest(Font))
}
type QueryFontReply struct {
MinBounds Charinfo
MaxBounds Charinfo
MinCharOrByte2 uint16
MaxCharOrByte2 uint16
DefaultChar uint16
PropertiesLen uint16
DrawDirection byte
MinByte1 byte
MaxByte1 byte
AllCharsExist byte
FontAscent int16
FontDescent int16
CharInfosLen uint32
Properties []Fontprop
CharInfos []Charinfo
}
func (c *Conn) QueryFontReply(cookie Cookie) (*QueryFontReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryFontReply)
getCharinfo(b[8:], &v.MinBounds)
getCharinfo(b[24:], &v.MaxBounds)
v.MinCharOrByte2 = get16(b[40:])
v.MaxCharOrByte2 = get16(b[42:])
v.DefaultChar = get16(b[44:])
v.PropertiesLen = get16(b[46:])
v.DrawDirection = b[48]
v.MinByte1 = b[49]
v.MaxByte1 = b[50]
v.AllCharsExist = b[51]
v.FontAscent = int16(get16(b[52:]))
v.FontDescent = int16(get16(b[54:]))
v.CharInfosLen = get32(b[56:])
offset := 60
v.Properties = make([]Fontprop, int(v.PropertiesLen))
for i := 0; i < int(v.PropertiesLen); i++ {
offset += getFontprop(b[offset:], &v.Properties[i])
}
offset = pad(offset)
v.CharInfos = make([]Charinfo, int(v.CharInfosLen))
for i := 0; i < int(v.CharInfosLen); i++ {
offset += getCharinfo(b[offset:], &v.CharInfos[i])
}
return v, nil
}
func (c *Conn) QueryTextExtentsRequest(Font Id, String []Char2b) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(String) * 2)
put16(b[2:], uint16(n/4))
b[0] = 48
b[1] = byte((len(String) & 1))
put32(b[4:], uint32(Font))
cookie := c.sendRequest(b)
c.sendChar2bList(String, len(String))
return cookie
}
func (c *Conn) QueryTextExtents(Font Id, String []Char2b) (*QueryTextExtentsReply, os.Error) {
return c.QueryTextExtentsReply(c.QueryTextExtentsRequest(Font, String))
}
type QueryTextExtentsReply struct {
DrawDirection byte
FontAscent int16
FontDescent int16
OverallAscent int16
OverallDescent int16
OverallWidth int32
OverallLeft int32
OverallRight int32
}
func (c *Conn) QueryTextExtentsReply(cookie Cookie) (*QueryTextExtentsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryTextExtentsReply)
v.DrawDirection = b[1]
v.FontAscent = int16(get16(b[8:]))
v.FontDescent = int16(get16(b[10:]))
v.OverallAscent = int16(get16(b[12:]))
v.OverallDescent = int16(get16(b[14:]))
v.OverallWidth = int32(get32(b[16:]))
v.OverallLeft = int32(get32(b[20:]))
v.OverallRight = int32(get32(b[24:]))
return v, nil
}
type Str struct {
NameLen byte
Name []byte
}
func getStr(b []byte, v *Str) int {
v.NameLen = b[0]
offset := 1
v.Name = make([]byte, int(v.NameLen))
copy(v.Name[0:len(v.Name)], b[offset:])
offset += len(v.Name) * 1
return offset
}
// omitting variable length sendStr
func (c *Conn) ListFontsRequest(MaxNames uint16, Pattern []byte) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(Pattern) * 1)
put16(b[2:], uint16(n/4))
b[0] = 49
put16(b[4:], MaxNames)
put16(b[6:], uint16(len(Pattern)))
cookie := c.sendRequest(b)
c.sendBytes(Pattern[0:len(Pattern)])
return cookie
}
func (c *Conn) ListFonts(MaxNames uint16, Pattern []byte) (*ListFontsReply, os.Error) {
return c.ListFontsReply(c.ListFontsRequest(MaxNames, Pattern))
}
type ListFontsReply struct {
NamesLen uint16
Names []Str
}
func (c *Conn) ListFontsReply(cookie Cookie) (*ListFontsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListFontsReply)
v.NamesLen = get16(b[8:])
offset := 32
v.Names = make([]Str, int(v.NamesLen))
for i := 0; i < int(v.NamesLen); i++ {
offset += getStr(b[offset:], &v.Names[i])
}
return v, nil
}
func (c *Conn) ListFontsWithInfoRequest(MaxNames uint16, Pattern []byte) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(Pattern) * 1)
put16(b[2:], uint16(n/4))
b[0] = 50
put16(b[4:], MaxNames)
put16(b[6:], uint16(len(Pattern)))
cookie := c.sendRequest(b)
c.sendBytes(Pattern[0:len(Pattern)])
return cookie
}
func (c *Conn) ListFontsWithInfo(MaxNames uint16, Pattern []byte) (*ListFontsWithInfoReply, os.Error) {
return c.ListFontsWithInfoReply(c.ListFontsWithInfoRequest(MaxNames, Pattern))
}
type ListFontsWithInfoReply struct {
NameLen byte
MinBounds Charinfo
MaxBounds Charinfo
MinCharOrByte2 uint16
MaxCharOrByte2 uint16
DefaultChar uint16
PropertiesLen uint16
DrawDirection byte
MinByte1 byte
MaxByte1 byte
AllCharsExist byte
FontAscent int16
FontDescent int16
RepliesHint uint32
Properties []Fontprop
Name []byte
}
func (c *Conn) ListFontsWithInfoReply(cookie Cookie) (*ListFontsWithInfoReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListFontsWithInfoReply)
v.NameLen = b[1]
getCharinfo(b[8:], &v.MinBounds)
getCharinfo(b[24:], &v.MaxBounds)
v.MinCharOrByte2 = get16(b[40:])
v.MaxCharOrByte2 = get16(b[42:])
v.DefaultChar = get16(b[44:])
v.PropertiesLen = get16(b[46:])
v.DrawDirection = b[48]
v.MinByte1 = b[49]
v.MaxByte1 = b[50]
v.AllCharsExist = b[51]
v.FontAscent = int16(get16(b[52:]))
v.FontDescent = int16(get16(b[54:]))
v.RepliesHint = get32(b[56:])
offset := 60
v.Properties = make([]Fontprop, int(v.PropertiesLen))
for i := 0; i < int(v.PropertiesLen); i++ {
offset += getFontprop(b[offset:], &v.Properties[i])
}
offset = pad(offset)
v.Name = make([]byte, int(v.NameLen))
copy(v.Name[0:len(v.Name)], b[offset:])
offset += len(v.Name) * 1
return v, nil
}
func (c *Conn) SetFontPath(FontQty uint16, Path []byte) {
b := c.scratch[0:6]
n := 6
n += pad(len(Path) * 1)
put16(b[2:], uint16(n/4))
b[0] = 51
put16(b[4:], FontQty)
c.sendRequest(b)
c.sendBytes(Path[0:len(Path)])
}
func (c *Conn) GetFontPathRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 52
return c.sendRequest(b)
}
func (c *Conn) GetFontPath() (*GetFontPathReply, os.Error) {
return c.GetFontPathReply(c.GetFontPathRequest())
}
type GetFontPathReply struct {
PathLen uint16
Path []Str
}
func (c *Conn) GetFontPathReply(cookie Cookie) (*GetFontPathReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetFontPathReply)
v.PathLen = get16(b[8:])
offset := 32
v.Path = make([]Str, int(v.PathLen))
for i := 0; i < int(v.PathLen); i++ {
offset += getStr(b[offset:], &v.Path[i])
}
return v, nil
}
func (c *Conn) CreatePixmap(Depth byte, Pid Id, Drawable Id, Width uint16, Height uint16) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 53
b[1] = Depth
put32(b[4:], uint32(Pid))
put32(b[8:], uint32(Drawable))
put16(b[12:], Width)
put16(b[14:], Height)
c.sendRequest(b)
}
func (c *Conn) FreePixmap(Pixmap Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 54
put32(b[4:], uint32(Pixmap))
c.sendRequest(b)
}
const (
GCFunction = 1
GCPlaneMask = 2
GCForeground = 4
GCBackground = 8
GCLineWidth = 16
GCLineStyle = 32
GCCapStyle = 64
GCJoinStyle = 128
GCFillStyle = 256
GCFillRule = 512
GCTile = 1024
GCStipple = 2048
GCTileStippleOriginX = 4096
GCTileStippleOriginY = 8192
GCFont = 16384
GCSubwindowMode = 32768
GCGraphicsExposures = 65536
GCClipOriginX = 131072
GCClipOriginY = 262144
GCClipMask = 524288
GCDashOffset = 1048576
GCDashList = 2097152
GCArcMode = 4194304
)
const (
GXClear = 0
GXAnd = 1
GXAndReverse = 2
GXCopy = 3
GXAndInverted = 4
GXNoop = 5
GXXor = 6
GXOr = 7
GXNor = 8
GXEquiv = 9
GXInvert = 10
GXOrReverse = 11
GXCopyInverted = 12
GXOrInverted = 13
GXNand = 14
GXSet = 15
)
const (
LineStyleSolid = 0
LineStyleOnOffDash = 1
LineStyleDoubleDash = 2
)
const (
CapStyleNotLast = 0
CapStyleButt = 1
CapStyleRound = 2
CapStyleProjecting = 3
)
const (
JoinStyleMiter = 0
JoinStyleRound = 1
JoinStyleBevel = 2
)
const (
FillStyleSolid = 0
FillStyleTiled = 1
FillStyleStippled = 2
FillStyleOpaqueStippled = 3
)
const (
FillRuleEvenOdd = 0
FillRuleWinding = 1
)
const (
SubwindowModeClipByChildren = 0
SubwindowModeIncludeInferiors = 1
)
const (
ArcModeChord = 0
ArcModePieSlice = 1
)
func (c *Conn) CreateGC(Cid Id, Drawable Id, ValueMask uint32, ValueList []uint32) {
b := c.scratch[0:16]
n := 16
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 55
put32(b[4:], uint32(Cid))
put32(b[8:], uint32(Drawable))
put32(b[12:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
func (c *Conn) ChangeGC(Gc Id, ValueMask uint32, ValueList []uint32) {
b := c.scratch[0:12]
n := 12
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 56
put32(b[4:], uint32(Gc))
put32(b[8:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
func (c *Conn) CopyGC(SrcGc Id, DstGc Id, ValueMask uint32) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 57
put32(b[4:], uint32(SrcGc))
put32(b[8:], uint32(DstGc))
put32(b[12:], ValueMask)
c.sendRequest(b)
}
func (c *Conn) SetDashes(Gc Id, DashOffset uint16, Dashes []byte) {
b := c.scratch[0:12]
n := 12
n += pad(len(Dashes) * 1)
put16(b[2:], uint16(n/4))
b[0] = 58
put32(b[4:], uint32(Gc))
put16(b[8:], DashOffset)
put16(b[10:], uint16(len(Dashes)))
c.sendRequest(b)
c.sendBytes(Dashes[0:len(Dashes)])
}
const (
ClipOrderingUnsorted = 0
ClipOrderingYSorted = 1
ClipOrderingYXSorted = 2
ClipOrderingYXBanded = 3
)
func (c *Conn) SetClipRectangles(Ordering byte, Gc Id, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) {
b := c.scratch[0:12]
n := 12
n += pad(len(Rectangles) * 8)
put16(b[2:], uint16(n/4))
b[0] = 59
b[1] = Ordering
put32(b[4:], uint32(Gc))
put16(b[8:], uint16(ClipXOrigin))
put16(b[10:], uint16(ClipYOrigin))
c.sendRequest(b)
c.sendRectangleList(Rectangles, len(Rectangles))
}
func (c *Conn) FreeGC(Gc Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 60
put32(b[4:], uint32(Gc))
c.sendRequest(b)
}
func (c *Conn) ClearArea(Exposures byte, Window Id, X int16, Y int16, Width uint16, Height uint16) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 61
b[1] = Exposures
put32(b[4:], uint32(Window))
put16(b[8:], uint16(X))
put16(b[10:], uint16(Y))
put16(b[12:], Width)
put16(b[14:], Height)
c.sendRequest(b)
}
func (c *Conn) CopyArea(SrcDrawable Id, DstDrawable Id, Gc Id, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) {
b := c.scratch[0:28]
put16(b[2:], 7)
b[0] = 62
put32(b[4:], uint32(SrcDrawable))
put32(b[8:], uint32(DstDrawable))
put32(b[12:], uint32(Gc))
put16(b[16:], uint16(SrcX))
put16(b[18:], uint16(SrcY))
put16(b[20:], uint16(DstX))
put16(b[22:], uint16(DstY))
put16(b[24:], Width)
put16(b[26:], Height)
c.sendRequest(b)
}
func (c *Conn) CopyPlane(SrcDrawable Id, DstDrawable Id, Gc Id, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16, BitPlane uint32) {
b := c.scratch[0:32]
put16(b[2:], 8)
b[0] = 63
put32(b[4:], uint32(SrcDrawable))
put32(b[8:], uint32(DstDrawable))
put32(b[12:], uint32(Gc))
put16(b[16:], uint16(SrcX))
put16(b[18:], uint16(SrcY))
put16(b[20:], uint16(DstX))
put16(b[22:], uint16(DstY))
put16(b[24:], Width)
put16(b[26:], Height)
put32(b[28:], BitPlane)
c.sendRequest(b)
}
const (
CoordModeOrigin = 0
CoordModePrevious = 1
)
func (c *Conn) PolyPoint(CoordinateMode byte, Drawable Id, Gc Id, Points []Point) {
b := c.scratch[0:12]
n := 12
n += pad(len(Points) * 4)
put16(b[2:], uint16(n/4))
b[0] = 64
b[1] = CoordinateMode
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendPointList(Points, len(Points))
}
func (c *Conn) PolyLine(CoordinateMode byte, Drawable Id, Gc Id, Points []Point) {
b := c.scratch[0:12]
n := 12
n += pad(len(Points) * 4)
put16(b[2:], uint16(n/4))
b[0] = 65
b[1] = CoordinateMode
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendPointList(Points, len(Points))
}
type Segment struct {
X1 int16
Y1 int16
X2 int16
Y2 int16
}
func getSegment(b []byte, v *Segment) int {
v.X1 = int16(get16(b[0:]))
v.Y1 = int16(get16(b[2:]))
v.X2 = int16(get16(b[4:]))
v.Y2 = int16(get16(b[6:]))
return 8
}
func (c *Conn) sendSegmentList(list []Segment, count int) {
b0 := make([]byte, 8*count)
for k := 0; k < count; k++ {
b := b0[k*8:]
put16(b[0:], uint16(list[k].X1))
put16(b[2:], uint16(list[k].Y1))
put16(b[4:], uint16(list[k].X2))
put16(b[6:], uint16(list[k].Y2))
}
c.sendBytes(b0)
}
func (c *Conn) PolySegment(Drawable Id, Gc Id, Segments []Segment) {
b := c.scratch[0:12]
n := 12
n += pad(len(Segments) * 8)
put16(b[2:], uint16(n/4))
b[0] = 66
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendSegmentList(Segments, len(Segments))
}
func (c *Conn) PolyRectangle(Drawable Id, Gc Id, Rectangles []Rectangle) {
b := c.scratch[0:12]
n := 12
n += pad(len(Rectangles) * 8)
put16(b[2:], uint16(n/4))
b[0] = 67
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendRectangleList(Rectangles, len(Rectangles))
}
func (c *Conn) PolyArc(Drawable Id, Gc Id, Arcs []Arc) {
b := c.scratch[0:12]
n := 12
n += pad(len(Arcs) * 12)
put16(b[2:], uint16(n/4))
b[0] = 68
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendArcList(Arcs, len(Arcs))
}
const (
PolyShapeComplex = 0
PolyShapeNonconvex = 1
PolyShapeConvex = 2
)
func (c *Conn) FillPoly(Drawable Id, Gc Id, Shape byte, CoordinateMode byte, Points []Point) {
b := c.scratch[0:16]
n := 16
n += pad(len(Points) * 4)
put16(b[2:], uint16(n/4))
b[0] = 69
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
b[12] = Shape
b[13] = CoordinateMode
c.sendRequest(b)
c.sendPointList(Points, len(Points))
}
func (c *Conn) PolyFillRectangle(Drawable Id, Gc Id, Rectangles []Rectangle) {
b := c.scratch[0:12]
n := 12
n += pad(len(Rectangles) * 8)
put16(b[2:], uint16(n/4))
b[0] = 70
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendRectangleList(Rectangles, len(Rectangles))
}
func (c *Conn) PolyFillArc(Drawable Id, Gc Id, Arcs []Arc) {
b := c.scratch[0:12]
n := 12
n += pad(len(Arcs) * 12)
put16(b[2:], uint16(n/4))
b[0] = 71
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
c.sendRequest(b)
c.sendArcList(Arcs, len(Arcs))
}
const (
ImageFormatXYBitmap = 0
ImageFormatXYPixmap = 1
ImageFormatZPixmap = 2
)
func (c *Conn) PutImage(Format byte, Drawable Id, Gc Id, Width uint16, Height uint16, DstX int16, DstY int16, LeftPad byte, Depth byte, Data []byte) {
b := c.scratch[0:24]
n := 24
n += pad(len(Data) * 1)
put16(b[2:], uint16(n/4))
b[0] = 72
b[1] = Format
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
put16(b[12:], Width)
put16(b[14:], Height)
put16(b[16:], uint16(DstX))
put16(b[18:], uint16(DstY))
b[20] = LeftPad
b[21] = Depth
c.sendRequest(b)
c.sendBytes(Data[0:len(Data)])
}
func (c *Conn) GetImageRequest(Format byte, Drawable Id, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) Cookie {
b := c.scratch[0:20]
put16(b[2:], 5)
b[0] = 73
b[1] = Format
put32(b[4:], uint32(Drawable))
put16(b[8:], uint16(X))
put16(b[10:], uint16(Y))
put16(b[12:], Width)
put16(b[14:], Height)
put32(b[16:], PlaneMask)
return c.sendRequest(b)
}
func (c *Conn) GetImage(Format byte, Drawable Id, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) (*GetImageReply, os.Error) {
return c.GetImageReply(c.GetImageRequest(Format, Drawable, X, Y, Width, Height, PlaneMask))
}
type GetImageReply struct {
Depth byte
Length uint32
Visual Id
Data []byte
}
func (c *Conn) GetImageReply(cookie Cookie) (*GetImageReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetImageReply)
v.Depth = b[1]
v.Length = get32(b[4:])
v.Visual = Id(get32(b[8:]))
offset := 32
v.Data = make([]byte, (int(v.Length) * 4))
copy(v.Data[0:len(v.Data)], b[offset:])
offset += len(v.Data) * 1
return v, nil
}
func (c *Conn) PolyText8(Drawable Id, Gc Id, X int16, Y int16, Items []byte) {
b := c.scratch[0:16]
n := 16
n += pad(len(Items) * 1)
put16(b[2:], uint16(n/4))
b[0] = 74
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
c.sendRequest(b)
c.sendBytes(Items[0:len(Items)])
}
func (c *Conn) PolyText16(Drawable Id, Gc Id, X int16, Y int16, Items []byte) {
b := c.scratch[0:16]
n := 16
n += pad(len(Items) * 1)
put16(b[2:], uint16(n/4))
b[0] = 75
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
c.sendRequest(b)
c.sendBytes(Items[0:len(Items)])
}
func (c *Conn) ImageText8(Drawable Id, Gc Id, X int16, Y int16, String []byte) {
b := c.scratch[0:16]
n := 16
n += pad(len(String) * 1)
put16(b[2:], uint16(n/4))
b[0] = 76
b[1] = byte(len(String))
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
c.sendRequest(b)
c.sendBytes(String[0:len(String)])
}
func (c *Conn) ImageText16(Drawable Id, Gc Id, X int16, Y int16, String []Char2b) {
b := c.scratch[0:16]
n := 16
n += pad(len(String) * 2)
put16(b[2:], uint16(n/4))
b[0] = 77
b[1] = byte(len(String))
put32(b[4:], uint32(Drawable))
put32(b[8:], uint32(Gc))
put16(b[12:], uint16(X))
put16(b[14:], uint16(Y))
c.sendRequest(b)
c.sendChar2bList(String, len(String))
}
const (
ColormapAllocNone = 0
ColormapAllocAll = 1
)
func (c *Conn) CreateColormap(Alloc byte, Mid Id, Window Id, Visual Id) {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 78
b[1] = Alloc
put32(b[4:], uint32(Mid))
put32(b[8:], uint32(Window))
put32(b[12:], uint32(Visual))
c.sendRequest(b)
}
func (c *Conn) FreeColormap(Cmap Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 79
put32(b[4:], uint32(Cmap))
c.sendRequest(b)
}
func (c *Conn) CopyColormapAndFree(Mid Id, SrcCmap Id) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 80
put32(b[4:], uint32(Mid))
put32(b[8:], uint32(SrcCmap))
c.sendRequest(b)
}
func (c *Conn) InstallColormap(Cmap Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 81
put32(b[4:], uint32(Cmap))
c.sendRequest(b)
}
func (c *Conn) UninstallColormap(Cmap Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 82
put32(b[4:], uint32(Cmap))
c.sendRequest(b)
}
func (c *Conn) ListInstalledColormapsRequest(Window Id) Cookie {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 83
put32(b[4:], uint32(Window))
return c.sendRequest(b)
}
func (c *Conn) ListInstalledColormaps(Window Id) (*ListInstalledColormapsReply, os.Error) {
return c.ListInstalledColormapsReply(c.ListInstalledColormapsRequest(Window))
}
type ListInstalledColormapsReply struct {
CmapsLen uint16
Cmaps []Id
}
func (c *Conn) ListInstalledColormapsReply(cookie Cookie) (*ListInstalledColormapsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListInstalledColormapsReply)
v.CmapsLen = get16(b[8:])
offset := 32
v.Cmaps = make([]Id, int(v.CmapsLen))
for i := 0; i < len(v.Cmaps); i++ {
v.Cmaps[i] = Id(get32(b[offset+i*4:]))
}
offset += len(v.Cmaps) * 4
return v, nil
}
func (c *Conn) AllocColorRequest(Cmap Id, Red uint16, Green uint16, Blue uint16) Cookie {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 84
put32(b[4:], uint32(Cmap))
put16(b[8:], Red)
put16(b[10:], Green)
put16(b[12:], Blue)
return c.sendRequest(b)
}
func (c *Conn) AllocColor(Cmap Id, Red uint16, Green uint16, Blue uint16) (*AllocColorReply, os.Error) {
return c.AllocColorReply(c.AllocColorRequest(Cmap, Red, Green, Blue))
}
type AllocColorReply struct {
Red uint16
Green uint16
Blue uint16
Pixel uint32
}
func (c *Conn) AllocColorReply(cookie Cookie) (*AllocColorReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(AllocColorReply)
v.Red = get16(b[8:])
v.Green = get16(b[10:])
v.Blue = get16(b[12:])
v.Pixel = get32(b[16:])
return v, nil
}
func (c *Conn) AllocNamedColorRequest(Cmap Id, Name string) Cookie {
b := c.scratch[0:12]
n := 12
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 85
put32(b[4:], uint32(Cmap))
put16(b[8:], uint16(len(Name)))
cookie := c.sendRequest(b)
c.sendString(Name)
return cookie
}
func (c *Conn) AllocNamedColor(Cmap Id, Name string) (*AllocNamedColorReply, os.Error) {
return c.AllocNamedColorReply(c.AllocNamedColorRequest(Cmap, Name))
}
type AllocNamedColorReply struct {
Pixel uint32
ExactRed uint16
ExactGreen uint16
ExactBlue uint16
VisualRed uint16
VisualGreen uint16
VisualBlue uint16
}
func (c *Conn) AllocNamedColorReply(cookie Cookie) (*AllocNamedColorReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(AllocNamedColorReply)
v.Pixel = get32(b[8:])
v.ExactRed = get16(b[12:])
v.ExactGreen = get16(b[14:])
v.ExactBlue = get16(b[16:])
v.VisualRed = get16(b[18:])
v.VisualGreen = get16(b[20:])
v.VisualBlue = get16(b[22:])
return v, nil
}
func (c *Conn) AllocColorCellsRequest(Contiguous byte, Cmap Id, Colors uint16, Planes uint16) Cookie {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 86
b[1] = Contiguous
put32(b[4:], uint32(Cmap))
put16(b[8:], Colors)
put16(b[10:], Planes)
return c.sendRequest(b)
}
func (c *Conn) AllocColorCells(Contiguous byte, Cmap Id, Colors uint16, Planes uint16) (*AllocColorCellsReply, os.Error) {
return c.AllocColorCellsReply(c.AllocColorCellsRequest(Contiguous, Cmap, Colors, Planes))
}
type AllocColorCellsReply struct {
PixelsLen uint16
MasksLen uint16
Pixels []uint32
Masks []uint32
}
func (c *Conn) AllocColorCellsReply(cookie Cookie) (*AllocColorCellsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(AllocColorCellsReply)
v.PixelsLen = get16(b[8:])
v.MasksLen = get16(b[10:])
offset := 32
v.Pixels = make([]uint32, int(v.PixelsLen))
for i := 0; i < len(v.Pixels); i++ {
v.Pixels[i] = get32(b[offset+i*4:])
}
offset += len(v.Pixels) * 4
offset = pad(offset)
v.Masks = make([]uint32, int(v.MasksLen))
for i := 0; i < len(v.Masks); i++ {
v.Masks[i] = get32(b[offset+i*4:])
}
offset += len(v.Masks) * 4
return v, nil
}
func (c *Conn) AllocColorPlanesRequest(Contiguous byte, Cmap Id, Colors uint16, Reds uint16, Greens uint16, Blues uint16) Cookie {
b := c.scratch[0:16]
put16(b[2:], 4)
b[0] = 87
b[1] = Contiguous
put32(b[4:], uint32(Cmap))
put16(b[8:], Colors)
put16(b[10:], Reds)
put16(b[12:], Greens)
put16(b[14:], Blues)
return c.sendRequest(b)
}
func (c *Conn) AllocColorPlanes(Contiguous byte, Cmap Id, Colors uint16, Reds uint16, Greens uint16, Blues uint16) (*AllocColorPlanesReply, os.Error) {
return c.AllocColorPlanesReply(c.AllocColorPlanesRequest(Contiguous, Cmap, Colors, Reds, Greens, Blues))
}
type AllocColorPlanesReply struct {
PixelsLen uint16
RedMask uint32
GreenMask uint32
BlueMask uint32
Pixels []uint32
}
func (c *Conn) AllocColorPlanesReply(cookie Cookie) (*AllocColorPlanesReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(AllocColorPlanesReply)
v.PixelsLen = get16(b[8:])
v.RedMask = get32(b[12:])
v.GreenMask = get32(b[16:])
v.BlueMask = get32(b[20:])
offset := 32
v.Pixels = make([]uint32, int(v.PixelsLen))
for i := 0; i < len(v.Pixels); i++ {
v.Pixels[i] = get32(b[offset+i*4:])
}
offset += len(v.Pixels) * 4
return v, nil
}
func (c *Conn) FreeColors(Cmap Id, PlaneMask uint32, Pixels []uint32) {
b := c.scratch[0:12]
n := 12
n += pad(len(Pixels) * 4)
put16(b[2:], uint16(n/4))
b[0] = 88
put32(b[4:], uint32(Cmap))
put32(b[8:], PlaneMask)
c.sendRequest(b)
c.sendUInt32List(Pixels[0:len(Pixels)])
}
const (
ColorFlagRed = 1
ColorFlagGreen = 2
ColorFlagBlue = 4
)
type Coloritem struct {
Pixel uint32
Red uint16
Green uint16
Blue uint16
Flags byte
}
func getColoritem(b []byte, v *Coloritem) int {
v.Pixel = get32(b[0:])
v.Red = get16(b[4:])
v.Green = get16(b[6:])
v.Blue = get16(b[8:])
v.Flags = b[10]
return 12
}
func (c *Conn) sendColoritemList(list []Coloritem, count int) {
b0 := make([]byte, 12*count)
for k := 0; k < count; k++ {
b := b0[k*12:]
put32(b[0:], list[k].Pixel)
put16(b[4:], list[k].Red)
put16(b[6:], list[k].Green)
put16(b[8:], list[k].Blue)
b[10] = list[k].Flags
}
c.sendBytes(b0)
}
func (c *Conn) StoreColors(Cmap Id, Items []Coloritem) {
b := c.scratch[0:8]
n := 8
n += pad(len(Items) * 12)
put16(b[2:], uint16(n/4))
b[0] = 89
put32(b[4:], uint32(Cmap))
c.sendRequest(b)
c.sendColoritemList(Items, len(Items))
}
func (c *Conn) StoreNamedColor(Flags byte, Cmap Id, Pixel uint32, Name string) {
b := c.scratch[0:16]
n := 16
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 90
b[1] = Flags
put32(b[4:], uint32(Cmap))
put32(b[8:], Pixel)
put16(b[12:], uint16(len(Name)))
c.sendRequest(b)
c.sendString(Name)
}
type Rgb struct {
Red uint16
Green uint16
Blue uint16
}
func getRgb(b []byte, v *Rgb) int {
v.Red = get16(b[0:])
v.Green = get16(b[2:])
v.Blue = get16(b[4:])
return 8
}
func (c *Conn) sendRgbList(list []Rgb, count int) {
b0 := make([]byte, 8*count)
for k := 0; k < count; k++ {
b := b0[k*8:]
put16(b[0:], list[k].Red)
put16(b[2:], list[k].Green)
put16(b[4:], list[k].Blue)
}
c.sendBytes(b0)
}
func (c *Conn) QueryColorsRequest(Cmap Id, Pixels []uint32) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(Pixels) * 4)
put16(b[2:], uint16(n/4))
b[0] = 91
put32(b[4:], uint32(Cmap))
cookie := c.sendRequest(b)
c.sendUInt32List(Pixels[0:len(Pixels)])
return cookie
}
func (c *Conn) QueryColors(Cmap Id, Pixels []uint32) (*QueryColorsReply, os.Error) {
return c.QueryColorsReply(c.QueryColorsRequest(Cmap, Pixels))
}
type QueryColorsReply struct {
ColorsLen uint16
Colors []Rgb
}
func (c *Conn) QueryColorsReply(cookie Cookie) (*QueryColorsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryColorsReply)
v.ColorsLen = get16(b[8:])
offset := 32
v.Colors = make([]Rgb, int(v.ColorsLen))
for i := 0; i < int(v.ColorsLen); i++ {
offset += getRgb(b[offset:], &v.Colors[i])
}
return v, nil
}
func (c *Conn) LookupColorRequest(Cmap Id, Name string) Cookie {
b := c.scratch[0:12]
n := 12
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 92
put32(b[4:], uint32(Cmap))
put16(b[8:], uint16(len(Name)))
cookie := c.sendRequest(b)
c.sendString(Name)
return cookie
}
func (c *Conn) LookupColor(Cmap Id, Name string) (*LookupColorReply, os.Error) {
return c.LookupColorReply(c.LookupColorRequest(Cmap, Name))
}
type LookupColorReply struct {
ExactRed uint16
ExactGreen uint16
ExactBlue uint16
VisualRed uint16
VisualGreen uint16
VisualBlue uint16
}
func (c *Conn) LookupColorReply(cookie Cookie) (*LookupColorReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(LookupColorReply)
v.ExactRed = get16(b[8:])
v.ExactGreen = get16(b[10:])
v.ExactBlue = get16(b[12:])
v.VisualRed = get16(b[14:])
v.VisualGreen = get16(b[16:])
v.VisualBlue = get16(b[18:])
return v, nil
}
const (
PixmapNone = 0
)
func (c *Conn) CreateCursor(Cid Id, Source Id, Mask Id, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16, X uint16, Y uint16) {
b := c.scratch[0:32]
put16(b[2:], 8)
b[0] = 93
put32(b[4:], uint32(Cid))
put32(b[8:], uint32(Source))
put32(b[12:], uint32(Mask))
put16(b[16:], ForeRed)
put16(b[18:], ForeGreen)
put16(b[20:], ForeBlue)
put16(b[22:], BackRed)
put16(b[24:], BackGreen)
put16(b[26:], BackBlue)
put16(b[28:], X)
put16(b[30:], Y)
c.sendRequest(b)
}
const (
FontNone = 0
)
func (c *Conn) CreateGlyphCursor(Cid Id, SourceFont Id, MaskFont Id, SourceChar uint16, MaskChar uint16, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) {
b := c.scratch[0:32]
put16(b[2:], 8)
b[0] = 94
put32(b[4:], uint32(Cid))
put32(b[8:], uint32(SourceFont))
put32(b[12:], uint32(MaskFont))
put16(b[16:], SourceChar)
put16(b[18:], MaskChar)
put16(b[20:], ForeRed)
put16(b[22:], ForeGreen)
put16(b[24:], ForeBlue)
put16(b[26:], BackRed)
put16(b[28:], BackGreen)
put16(b[30:], BackBlue)
c.sendRequest(b)
}
func (c *Conn) FreeCursor(Cursor Id) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 95
put32(b[4:], uint32(Cursor))
c.sendRequest(b)
}
func (c *Conn) RecolorCursor(Cursor Id, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) {
b := c.scratch[0:20]
put16(b[2:], 5)
b[0] = 96
put32(b[4:], uint32(Cursor))
put16(b[8:], ForeRed)
put16(b[10:], ForeGreen)
put16(b[12:], ForeBlue)
put16(b[14:], BackRed)
put16(b[16:], BackGreen)
put16(b[18:], BackBlue)
c.sendRequest(b)
}
const (
QueryShapeOfLargestCursor = 0
QueryShapeOfFastestTile = 1
QueryShapeOfFastestStipple = 2
)
func (c *Conn) QueryBestSizeRequest(Class byte, Drawable Id, Width uint16, Height uint16) Cookie {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 97
b[1] = Class
put32(b[4:], uint32(Drawable))
put16(b[8:], Width)
put16(b[10:], Height)
return c.sendRequest(b)
}
func (c *Conn) QueryBestSize(Class byte, Drawable Id, Width uint16, Height uint16) (*QueryBestSizeReply, os.Error) {
return c.QueryBestSizeReply(c.QueryBestSizeRequest(Class, Drawable, Width, Height))
}
type QueryBestSizeReply struct {
Width uint16
Height uint16
}
func (c *Conn) QueryBestSizeReply(cookie Cookie) (*QueryBestSizeReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryBestSizeReply)
v.Width = get16(b[8:])
v.Height = get16(b[10:])
return v, nil
}
func (c *Conn) QueryExtensionRequest(Name string) Cookie {
b := c.scratch[0:8]
n := 8
n += pad(len(Name) * 1)
put16(b[2:], uint16(n/4))
b[0] = 98
put16(b[4:], uint16(len(Name)))
cookie := c.sendRequest(b)
c.sendString(Name)
return cookie
}
func (c *Conn) QueryExtension(Name string) (*QueryExtensionReply, os.Error) {
return c.QueryExtensionReply(c.QueryExtensionRequest(Name))
}
type QueryExtensionReply struct {
Present byte
MajorOpcode byte
FirstEvent byte
FirstError byte
}
func (c *Conn) QueryExtensionReply(cookie Cookie) (*QueryExtensionReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(QueryExtensionReply)
v.Present = b[8]
v.MajorOpcode = b[9]
v.FirstEvent = b[10]
v.FirstError = b[11]
return v, nil
}
func (c *Conn) ListExtensionsRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 99
return c.sendRequest(b)
}
func (c *Conn) ListExtensions() (*ListExtensionsReply, os.Error) {
return c.ListExtensionsReply(c.ListExtensionsRequest())
}
type ListExtensionsReply struct {
NamesLen byte
Names []Str
}
func (c *Conn) ListExtensionsReply(cookie Cookie) (*ListExtensionsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListExtensionsReply)
v.NamesLen = b[1]
offset := 32
v.Names = make([]Str, int(v.NamesLen))
for i := 0; i < int(v.NamesLen); i++ {
offset += getStr(b[offset:], &v.Names[i])
}
return v, nil
}
func (c *Conn) ChangeKeyboardMapping(KeycodeCount byte, FirstKeycode byte, KeysymsPerKeycode byte, Keysyms []Keysym) {
b := c.scratch[0:6]
n := 6
n += pad((int(KeycodeCount) * int(KeysymsPerKeycode)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 100
b[1] = KeycodeCount
b[4] = FirstKeycode
b[5] = KeysymsPerKeycode
c.sendRequest(b)
c.sendKeysymList(Keysyms, (int(KeycodeCount) * int(KeysymsPerKeycode)))
}
func (c *Conn) GetKeyboardMappingRequest(FirstKeycode byte, Count byte) Cookie {
b := c.scratch[0:6]
put16(b[2:], 1)
b[0] = 101
b[4] = FirstKeycode
b[5] = Count
return c.sendRequest(b)
}
func (c *Conn) GetKeyboardMapping(FirstKeycode byte, Count byte) (*GetKeyboardMappingReply, os.Error) {
return c.GetKeyboardMappingReply(c.GetKeyboardMappingRequest(FirstKeycode, Count))
}
type GetKeyboardMappingReply struct {
KeysymsPerKeycode byte
Length uint32
Keysyms []Keysym
}
func (c *Conn) GetKeyboardMappingReply(cookie Cookie) (*GetKeyboardMappingReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetKeyboardMappingReply)
v.KeysymsPerKeycode = b[1]
v.Length = get32(b[4:])
offset := 32
v.Keysyms = make([]Keysym, int(v.Length))
for i := 0; i < len(v.Keysyms); i++ {
v.Keysyms[i] = Keysym(get32(b[offset+i*4:]))
}
offset += len(v.Keysyms) * 4
return v, nil
}
const (
KBKeyClickPercent = 1
KBBellPercent = 2
KBBellPitch = 4
KBBellDuration = 8
KBLed = 16
KBLedMode = 32
KBKey = 64
KBAutoRepeatMode = 128
)
const (
LedModeOff = 0
LedModeOn = 1
)
const (
AutoRepeatModeOff = 0
AutoRepeatModeOn = 1
AutoRepeatModeDefault = 2
)
func (c *Conn) ChangeKeyboardControl(ValueMask uint32, ValueList []uint32) {
b := c.scratch[0:8]
n := 8
n += pad(popCount(int(ValueMask)) * 4)
put16(b[2:], uint16(n/4))
b[0] = 102
put32(b[4:], ValueMask)
c.sendRequest(b)
c.sendUInt32List(ValueList[0:popCount(int(ValueMask))])
}
func (c *Conn) GetKeyboardControlRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 103
return c.sendRequest(b)
}
func (c *Conn) GetKeyboardControl() (*GetKeyboardControlReply, os.Error) {
return c.GetKeyboardControlReply(c.GetKeyboardControlRequest())
}
type GetKeyboardControlReply struct {
GlobalAutoRepeat byte
LedMask uint32
KeyClickPercent byte
BellPercent byte
BellPitch uint16
BellDuration uint16
AutoRepeats [32]byte
}
func (c *Conn) GetKeyboardControlReply(cookie Cookie) (*GetKeyboardControlReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetKeyboardControlReply)
v.GlobalAutoRepeat = b[1]
v.LedMask = get32(b[8:])
v.KeyClickPercent = b[12]
v.BellPercent = b[13]
v.BellPitch = get16(b[14:])
v.BellDuration = get16(b[16:])
copy(v.AutoRepeats[0:32], b[20:])
return v, nil
}
func (c *Conn) Bell(Percent int8) {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 104
b[1] = byte(Percent)
c.sendRequest(b)
}
func (c *Conn) ChangePointerControl(AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration byte, DoThreshold byte) {
b := c.scratch[0:12]
put16(b[2:], 3)
b[0] = 105
put16(b[4:], uint16(AccelerationNumerator))
put16(b[6:], uint16(AccelerationDenominator))
put16(b[8:], uint16(Threshold))
b[10] = DoAcceleration
b[11] = DoThreshold
c.sendRequest(b)
}
func (c *Conn) GetPointerControlRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 106
return c.sendRequest(b)
}
func (c *Conn) GetPointerControl() (*GetPointerControlReply, os.Error) {
return c.GetPointerControlReply(c.GetPointerControlRequest())
}
type GetPointerControlReply struct {
AccelerationNumerator uint16
AccelerationDenominator uint16
Threshold uint16
}
func (c *Conn) GetPointerControlReply(cookie Cookie) (*GetPointerControlReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetPointerControlReply)
v.AccelerationNumerator = get16(b[8:])
v.AccelerationDenominator = get16(b[10:])
v.Threshold = get16(b[12:])
return v, nil
}
const (
BlankingNotPreferred = 0
BlankingPreferred = 1
BlankingDefault = 2
)
const (
ExposuresNotAllowed = 0
ExposuresAllowed = 1
ExposuresDefault = 2
)
func (c *Conn) SetScreenSaver(Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) {
b := c.scratch[0:10]
put16(b[2:], 2)
b[0] = 107
put16(b[4:], uint16(Timeout))
put16(b[6:], uint16(Interval))
b[8] = PreferBlanking
b[9] = AllowExposures
c.sendRequest(b)
}
func (c *Conn) GetScreenSaverRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 108
return c.sendRequest(b)
}
func (c *Conn) GetScreenSaver() (*GetScreenSaverReply, os.Error) {
return c.GetScreenSaverReply(c.GetScreenSaverRequest())
}
type GetScreenSaverReply struct {
Timeout uint16
Interval uint16
PreferBlanking byte
AllowExposures byte
}
func (c *Conn) GetScreenSaverReply(cookie Cookie) (*GetScreenSaverReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetScreenSaverReply)
v.Timeout = get16(b[8:])
v.Interval = get16(b[10:])
v.PreferBlanking = b[12]
v.AllowExposures = b[13]
return v, nil
}
const (
HostModeInsert = 0
HostModeDelete = 1
)
const (
FamilyInternet = 0
FamilyDECnet = 1
FamilyChaos = 2
FamilyServerInterpreted = 5
FamilyInternet6 = 6
)
func (c *Conn) ChangeHosts(Mode byte, Family byte, Address []byte) {
b := c.scratch[0:8]
n := 8
n += pad(len(Address) * 1)
put16(b[2:], uint16(n/4))
b[0] = 109
b[1] = Mode
b[4] = Family
put16(b[6:], uint16(len(Address)))
c.sendRequest(b)
c.sendBytes(Address[0:len(Address)])
}
type Host struct {
Family byte
AddressLen uint16
Address []byte
}
func getHost(b []byte, v *Host) int {
v.Family = b[0]
v.AddressLen = get16(b[2:])
offset := 4
v.Address = make([]byte, int(v.AddressLen))
copy(v.Address[0:len(v.Address)], b[offset:])
offset += len(v.Address) * 1
return offset
}
// omitting variable length sendHost
func (c *Conn) ListHostsRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 110
return c.sendRequest(b)
}
func (c *Conn) ListHosts() (*ListHostsReply, os.Error) {
return c.ListHostsReply(c.ListHostsRequest())
}
type ListHostsReply struct {
Mode byte
HostsLen uint16
Hosts []Host
}
func (c *Conn) ListHostsReply(cookie Cookie) (*ListHostsReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(ListHostsReply)
v.Mode = b[1]
v.HostsLen = get16(b[8:])
offset := 32
v.Hosts = make([]Host, int(v.HostsLen))
for i := 0; i < int(v.HostsLen); i++ {
offset += getHost(b[offset:], &v.Hosts[i])
}
return v, nil
}
const (
AccessControlDisable = 0
AccessControlEnable = 1
)
func (c *Conn) SetAccessControl(Mode byte) {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 111
b[1] = Mode
c.sendRequest(b)
}
const (
CloseDownDestroyAll = 0
CloseDownRetainPermanent = 1
CloseDownRetainTemporary = 2
)
func (c *Conn) SetCloseDownMode(Mode byte) {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 112
b[1] = Mode
c.sendRequest(b)
}
const (
KillAllTemporary = 0
)
func (c *Conn) KillClient(Resource uint32) {
b := c.scratch[0:8]
put16(b[2:], 2)
b[0] = 113
put32(b[4:], Resource)
c.sendRequest(b)
}
func (c *Conn) RotateProperties(Window Id, Delta int16, Atoms []Id) {
b := c.scratch[0:12]
n := 12
n += pad(len(Atoms) * 4)
put16(b[2:], uint16(n/4))
b[0] = 114
put32(b[4:], uint32(Window))
put16(b[8:], uint16(len(Atoms)))
put16(b[10:], uint16(Delta))
c.sendRequest(b)
c.sendIdList(Atoms, len(Atoms))
}
const (
ScreenSaverReset = 0
ScreenSaverActive = 1
)
func (c *Conn) ForceScreenSaver(Mode byte) {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 115
b[1] = Mode
c.sendRequest(b)
}
const (
MappingStatusSuccess = 0
MappingStatusBusy = 1
MappingStatusFailure = 2
)
func (c *Conn) SetPointerMappingRequest(Map []byte) Cookie {
b := c.scratch[0:4]
n := 4
n += pad(len(Map) * 1)
put16(b[2:], uint16(n/4))
b[0] = 116
b[1] = byte(len(Map))
cookie := c.sendRequest(b)
c.sendBytes(Map[0:len(Map)])
return cookie
}
func (c *Conn) SetPointerMapping(Map []byte) (*SetPointerMappingReply, os.Error) {
return c.SetPointerMappingReply(c.SetPointerMappingRequest(Map))
}
type SetPointerMappingReply struct {
Status byte
}
func (c *Conn) SetPointerMappingReply(cookie Cookie) (*SetPointerMappingReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(SetPointerMappingReply)
v.Status = b[1]
return v, nil
}
func (c *Conn) GetPointerMappingRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 117
return c.sendRequest(b)
}
func (c *Conn) GetPointerMapping() (*GetPointerMappingReply, os.Error) {
return c.GetPointerMappingReply(c.GetPointerMappingRequest())
}
type GetPointerMappingReply struct {
MapLen byte
Map []byte
}
func (c *Conn) GetPointerMappingReply(cookie Cookie) (*GetPointerMappingReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetPointerMappingReply)
v.MapLen = b[1]
offset := 32
v.Map = make([]byte, int(v.MapLen))
copy(v.Map[0:len(v.Map)], b[offset:])
offset += len(v.Map) * 1
return v, nil
}
const (
MapIndexShift = 0
MapIndexLock = 1
MapIndexControl = 2
MapIndex1 = 3
MapIndex2 = 4
MapIndex3 = 5
MapIndex4 = 6
MapIndex5 = 7
)
func (c *Conn) SetModifierMappingRequest(KeycodesPerModifier byte, Keycodes []byte) Cookie {
b := c.scratch[0:4]
n := 4
n += pad((int(KeycodesPerModifier) * 8) * 1)
put16(b[2:], uint16(n/4))
b[0] = 118
b[1] = KeycodesPerModifier
cookie := c.sendRequest(b)
c.sendBytes(Keycodes[0:(int(KeycodesPerModifier) * 8)])
return cookie
}
func (c *Conn) SetModifierMapping(KeycodesPerModifier byte, Keycodes []byte) (*SetModifierMappingReply, os.Error) {
return c.SetModifierMappingReply(c.SetModifierMappingRequest(KeycodesPerModifier, Keycodes))
}
type SetModifierMappingReply struct {
Status byte
}
func (c *Conn) SetModifierMappingReply(cookie Cookie) (*SetModifierMappingReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(SetModifierMappingReply)
v.Status = b[1]
return v, nil
}
func (c *Conn) GetModifierMappingRequest() Cookie {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 119
return c.sendRequest(b)
}
func (c *Conn) GetModifierMapping() (*GetModifierMappingReply, os.Error) {
return c.GetModifierMappingReply(c.GetModifierMappingRequest())
}
type GetModifierMappingReply struct {
KeycodesPerModifier byte
Keycodes []byte
}
func (c *Conn) GetModifierMappingReply(cookie Cookie) (*GetModifierMappingReply, os.Error) {
b, error := c.waitForReply(cookie)
if error != nil {
return nil, error
}
v := new(GetModifierMappingReply)
v.KeycodesPerModifier = b[1]
offset := 32
v.Keycodes = make([]byte, (int(v.KeycodesPerModifier) * 8))
copy(v.Keycodes[0:len(v.Keycodes)], b[offset:])
offset += len(v.Keycodes) * 1
return v, nil
}
func (c *Conn) NoOperation() {
b := c.scratch[0:4]
put16(b[2:], 1)
b[0] = 127
c.sendRequest(b)
}
func parseEvent(buf []byte) (Event, os.Error) {
switch buf[0] {
case KeyPress:
return getKeyPressEvent(buf), nil
case KeyRelease:
return getKeyReleaseEvent(buf), nil
case ButtonPress:
return getButtonPressEvent(buf), nil
case ButtonRelease:
return getButtonReleaseEvent(buf), nil
case MotionNotify:
return getMotionNotifyEvent(buf), nil
case EnterNotify:
return getEnterNotifyEvent(buf), nil
case LeaveNotify:
return getLeaveNotifyEvent(buf), nil
case FocusIn:
return getFocusInEvent(buf), nil
case FocusOut:
return getFocusOutEvent(buf), nil
case KeymapNotify:
return getKeymapNotifyEvent(buf), nil
case Expose:
return getExposeEvent(buf), nil
case GraphicsExposure:
return getGraphicsExposureEvent(buf), nil
case NoExposure:
return getNoExposureEvent(buf), nil
case VisibilityNotify:
return getVisibilityNotifyEvent(buf), nil
case CreateNotify:
return getCreateNotifyEvent(buf), nil
case DestroyNotify:
return getDestroyNotifyEvent(buf), nil
case UnmapNotify:
return getUnmapNotifyEvent(buf), nil
case MapNotify:
return getMapNotifyEvent(buf), nil
case MapRequest:
return getMapRequestEvent(buf), nil
case ReparentNotify:
return getReparentNotifyEvent(buf), nil
case ConfigureNotify:
return getConfigureNotifyEvent(buf), nil
case ConfigureRequest:
return getConfigureRequestEvent(buf), nil
case GravityNotify:
return getGravityNotifyEvent(buf), nil
case ResizeRequest:
return getResizeRequestEvent(buf), nil
case CirculateNotify:
return getCirculateNotifyEvent(buf), nil
case CirculateRequest:
return getCirculateRequestEvent(buf), nil
case PropertyNotify:
return getPropertyNotifyEvent(buf), nil
case SelectionClear:
return getSelectionClearEvent(buf), nil
case SelectionRequest:
return getSelectionRequestEvent(buf), nil
case SelectionNotify:
return getSelectionNotifyEvent(buf), nil
case ColormapNotify:
return getColormapNotifyEvent(buf), nil
case ClientMessage:
return getClientMessageEvent(buf), nil
case MappingNotify:
return getMappingNotifyEvent(buf), nil
}
return nil, os.NewError("unknown event type")
}
var errorNames = map[byte]string{
BadRequest: "Request",
BadValue: "Value",
BadWindow: "Window",
BadPixmap: "Pixmap",
BadAtom: "Atom",
BadCursor: "Cursor",
BadFont: "Font",
BadMatch: "Match",
BadDrawable: "Drawable",
BadAccess: "Access",
BadAlloc: "Alloc",
BadColormap: "Colormap",
BadGContext: "GContext",
BadIDChoice: "IDChoice",
BadName: "Name",
BadLength: "Length",
BadImplementation: "Implementation",
}