1
0
mirror of https://github.com/golang/go synced 2024-11-20 08:34:41 -07:00
go/src/pkg/xgb/xproto.go
Tor Andersson 598f3e284e A first stab at porting the XCB X11 protocol bindings to go.
The python script needs a checkout of xcb/proto to generate
an xproto.go file, which together with xgb.go provide functions
to access all of the core X11 protocol requests. I have included the
generated file.

Extensions and authentication methods are not implemented.

R=r, rsc, nigeltao_golang
https://golang.org/cl/162053
2009-11-30 14:25:50 -08:00

4154 lines
91 KiB
Go

// 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",
}