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