aboutsummaryrefslogtreecommitdiff
path: root/nexgb/damage/damage.go
diff options
context:
space:
mode:
authorPřemysl Janouch <p@janouch.name>2018-09-08 16:54:17 +0200
committerPřemysl Janouch <p@janouch.name>2018-09-08 16:54:17 +0200
commit3173202cc1e08762c6e156a8fffd23269a5ddb2b (patch)
tree95c4a06f8384d41b15e9c22afac0a387de79dc51 /nexgb/damage/damage.go
parent632b3ae494d45755525644fe5d04475c95aae364 (diff)
parent3906399e7c2a40fbaf355de572cf50a314083f64 (diff)
downloadhaven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.tar.gz
haven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.tar.xz
haven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.zip
Merge aarzilli/xgb, branch xcb1.12 as nexgb
History has been linearized and rewritten to stay under the new subdirectory. I want to make changes incompatible to BurntSushi/xgb. The history begs for being thrown away entirely because of its quality and because it doesn't cover the Google period but it is still useful for copyright tracking.
Diffstat (limited to 'nexgb/damage/damage.go')
-rw-r--r--nexgb/damage/damage.go592
1 files changed, 592 insertions, 0 deletions
diff --git a/nexgb/damage/damage.go b/nexgb/damage/damage.go
new file mode 100644
index 0000000..26eca04
--- /dev/null
+++ b/nexgb/damage/damage.go
@@ -0,0 +1,592 @@
+// Package damage is the X client API for the DAMAGE extension.
+package damage
+
+// This file is automatically generated from damage.xml. Edit at your peril!
+
+import (
+ "github.com/BurntSushi/xgb"
+
+ "github.com/BurntSushi/xgb/xfixes"
+ "github.com/BurntSushi/xgb/xproto"
+)
+
+// Init must be called before using the DAMAGE extension.
+func Init(c *xgb.Conn) error {
+ reply, err := xproto.QueryExtension(c, 6, "DAMAGE").Reply()
+ switch {
+ case err != nil:
+ return err
+ case !reply.Present:
+ return xgb.Errorf("No extension named DAMAGE could be found on on the server.")
+ }
+
+ c.ExtLock.Lock()
+ c.Extensions["DAMAGE"] = reply.MajorOpcode
+ c.ExtLock.Unlock()
+ for evNum, fun := range xgb.NewExtEventFuncs["DAMAGE"] {
+ xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun
+ }
+ for errNum, fun := range xgb.NewExtErrorFuncs["DAMAGE"] {
+ xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun
+ }
+ return nil
+}
+
+func init() {
+ xgb.NewExtEventFuncs["DAMAGE"] = make(map[int]xgb.NewEventFun)
+ xgb.NewExtErrorFuncs["DAMAGE"] = make(map[int]xgb.NewErrorFun)
+}
+
+// BadBadDamage is the error number for a BadBadDamage.
+const BadBadDamage = 0
+
+type BadDamageError struct {
+ Sequence uint16
+ NiceName string
+}
+
+// BadDamageErrorNew constructs a BadDamageError value that implements xgb.Error from a byte slice.
+func BadDamageErrorNew(buf []byte) xgb.Error {
+ v := BadDamageError{}
+ v.NiceName = "BadDamage"
+
+ b := 1 // skip error determinant
+ b += 1 // don't read error number
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// SequenceId returns the sequence id attached to the BadBadDamage error.
+// This is mostly used internally.
+func (err BadDamageError) SequenceId() uint16 {
+ return err.Sequence
+}
+
+// BadId returns the 'BadValue' number if one exists for the BadBadDamage error. If no bad value exists, 0 is returned.
+func (err BadDamageError) BadId() uint32 {
+ return 0
+}
+
+// Error returns a rudimentary string representation of the BadBadDamage error.
+
+func (err BadDamageError) Error() string {
+ fieldVals := make([]string, 0, 0)
+ fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+ return "BadBadDamage {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtErrorFuncs["DAMAGE"][0] = BadDamageErrorNew
+}
+
+type Damage uint32
+
+func NewDamageId(c *xgb.Conn) (Damage, error) {
+ id, err := c.NewId()
+ if err != nil {
+ return 0, err
+ }
+ return Damage(id), nil
+}
+
+// Notify is the event number for a NotifyEvent.
+const Notify = 0
+
+type NotifyEvent struct {
+ Sequence uint16
+ Level byte
+ Drawable xproto.Drawable
+ Damage Damage
+ Timestamp xproto.Timestamp
+ Area xproto.Rectangle
+ Geometry xproto.Rectangle
+}
+
+// NotifyEventNew constructs a NotifyEvent value that implements xgb.Event from a byte slice.
+func NotifyEventNew(buf []byte) xgb.Event {
+ v := NotifyEvent{}
+ b := 1 // don't read event number
+
+ v.Level = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Drawable = xproto.Drawable(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Damage = Damage(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Area = xproto.Rectangle{}
+ b += xproto.RectangleRead(buf[b:], &v.Area)
+
+ v.Geometry = xproto.Rectangle{}
+ b += xproto.RectangleRead(buf[b:], &v.Geometry)
+
+ return v
+}
+
+// Bytes writes a NotifyEvent value to a byte slice.
+func (v NotifyEvent) Bytes() []byte {
+ buf := make([]byte, 32)
+ b := 0
+
+ // write event number
+ buf[b] = 0
+ b += 1
+
+ buf[b] = v.Level
+ b += 1
+
+ b += 2 // skip sequence number
+
+ xgb.Put32(buf[b:], uint32(v.Drawable))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Damage))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ {
+ structBytes := v.Area.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ {
+ structBytes := v.Geometry.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ return buf
+}
+
+// SequenceId returns the sequence id attached to the Notify event.
+// Events without a sequence number (KeymapNotify) return 0.
+// This is mostly used internally.
+func (v NotifyEvent) SequenceId() uint16 {
+ return v.Sequence
+}
+
+// String is a rudimentary string representation of NotifyEvent.
+func (v NotifyEvent) String() string {
+ fieldVals := make([]string, 0, 6)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+ fieldVals = append(fieldVals, xgb.Sprintf("Level: %d", v.Level))
+ fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
+ fieldVals = append(fieldVals, xgb.Sprintf("Damage: %d", v.Damage))
+ fieldVals = append(fieldVals, xgb.Sprintf("Timestamp: %d", v.Timestamp))
+ return "Notify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtEventFuncs["DAMAGE"][0] = NotifyEventNew
+}
+
+const (
+ ReportLevelRawRectangles = 0
+ ReportLevelDeltaRectangles = 1
+ ReportLevelBoundingBox = 2
+ ReportLevelNonEmpty = 3
+)
+
+// Skipping definition for base type 'Bool'
+
+// Skipping definition for base type 'Byte'
+
+// Skipping definition for base type 'Card8'
+
+// Skipping definition for base type 'Char'
+
+// Skipping definition for base type 'Void'
+
+// Skipping definition for base type 'Double'
+
+// Skipping definition for base type 'Float'
+
+// Skipping definition for base type 'Int16'
+
+// Skipping definition for base type 'Int32'
+
+// Skipping definition for base type 'Int8'
+
+// Skipping definition for base type 'Card16'
+
+// Skipping definition for base type 'Card32'
+
+// AddCookie is a cookie used only for Add requests.
+type AddCookie struct {
+ *xgb.Cookie
+}
+
+// Add sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func Add(c *xgb.Conn, Drawable xproto.Drawable, Region xfixes.Region) AddCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Add' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(addRequest(c, Drawable, Region), cookie)
+ return AddCookie{cookie}
+}
+
+// AddChecked sends a checked request.
+// If an error occurs, it can be retrieved using AddCookie.Check()
+func AddChecked(c *xgb.Conn, Drawable xproto.Drawable, Region xfixes.Region) AddCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Add' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(addRequest(c, Drawable, Region), cookie)
+ return AddCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook AddCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for Add
+// addRequest writes a Add request to a byte slice.
+func addRequest(c *xgb.Conn, Drawable xproto.Drawable, Region xfixes.Region) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["DAMAGE"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 4 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Drawable))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Region))
+ b += 4
+
+ return buf
+}
+
+// CreateCookie is a cookie used only for Create requests.
+type CreateCookie struct {
+ *xgb.Cookie
+}
+
+// Create sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func Create(c *xgb.Conn, Damage Damage, Drawable xproto.Drawable, Level byte) CreateCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Create' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(createRequest(c, Damage, Drawable, Level), cookie)
+ return CreateCookie{cookie}
+}
+
+// CreateChecked sends a checked request.
+// If an error occurs, it can be retrieved using CreateCookie.Check()
+func CreateChecked(c *xgb.Conn, Damage Damage, Drawable xproto.Drawable, Level byte) CreateCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Create' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(createRequest(c, Damage, Drawable, Level), cookie)
+ return CreateCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook CreateCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for Create
+// createRequest writes a Create request to a byte slice.
+func createRequest(c *xgb.Conn, Damage Damage, Drawable xproto.Drawable, Level byte) []byte {
+ size := 16
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["DAMAGE"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 1 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Damage))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Drawable))
+ b += 4
+
+ buf[b] = Level
+ b += 1
+
+ b += 3 // padding
+
+ return buf
+}
+
+// DestroyCookie is a cookie used only for Destroy requests.
+type DestroyCookie struct {
+ *xgb.Cookie
+}
+
+// Destroy sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func Destroy(c *xgb.Conn, Damage Damage) DestroyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Destroy' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(destroyRequest(c, Damage), cookie)
+ return DestroyCookie{cookie}
+}
+
+// DestroyChecked sends a checked request.
+// If an error occurs, it can be retrieved using DestroyCookie.Check()
+func DestroyChecked(c *xgb.Conn, Damage Damage) DestroyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Destroy' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(destroyRequest(c, Damage), cookie)
+ return DestroyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DestroyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for Destroy
+// destroyRequest writes a Destroy request to a byte slice.
+func destroyRequest(c *xgb.Conn, Damage Damage) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["DAMAGE"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 2 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Damage))
+ b += 4
+
+ return buf
+}
+
+// QueryVersionCookie is a cookie used only for QueryVersion requests.
+type QueryVersionCookie struct {
+ *xgb.Cookie
+}
+
+// QueryVersion sends a checked request.
+// If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply()
+func QueryVersion(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uint32) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie)
+ return QueryVersionCookie{cookie}
+}
+
+// QueryVersionUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func QueryVersionUnchecked(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uint32) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie)
+ return QueryVersionCookie{cookie}
+}
+
+// QueryVersionReply represents the data returned from a QueryVersion request.
+type QueryVersionReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ MajorVersion uint32
+ MinorVersion uint32
+ // padding: 16 bytes
+}
+
+// Reply blocks and returns the reply data for a QueryVersion request.
+func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return queryVersionReply(buf), nil
+}
+
+// queryVersionReply reads a byte slice into a QueryVersionReply value.
+func queryVersionReply(buf []byte) *QueryVersionReply {
+ v := new(QueryVersionReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.MajorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ v.MinorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 16 // padding
+
+ return v
+}
+
+// Write request to wire for QueryVersion
+// queryVersionRequest writes a QueryVersion request to a byte slice.
+func queryVersionRequest(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["DAMAGE"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 0 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], ClientMajorVersion)
+ b += 4
+
+ xgb.Put32(buf[b:], ClientMinorVersion)
+ b += 4
+
+ return buf
+}
+
+// SubtractCookie is a cookie used only for Subtract requests.
+type SubtractCookie struct {
+ *xgb.Cookie
+}
+
+// Subtract sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func Subtract(c *xgb.Conn, Damage Damage, Repair xfixes.Region, Parts xfixes.Region) SubtractCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Subtract' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(subtractRequest(c, Damage, Repair, Parts), cookie)
+ return SubtractCookie{cookie}
+}
+
+// SubtractChecked sends a checked request.
+// If an error occurs, it can be retrieved using SubtractCookie.Check()
+func SubtractChecked(c *xgb.Conn, Damage Damage, Repair xfixes.Region, Parts xfixes.Region) SubtractCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["DAMAGE"]; !ok {
+ panic("Cannot issue request 'Subtract' using the uninitialized extension 'DAMAGE'. damage.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(subtractRequest(c, Damage, Repair, Parts), cookie)
+ return SubtractCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SubtractCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for Subtract
+// subtractRequest writes a Subtract request to a byte slice.
+func subtractRequest(c *xgb.Conn, Damage Damage, Repair xfixes.Region, Parts xfixes.Region) []byte {
+ size := 16
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["DAMAGE"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 3 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Damage))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Repair))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Parts))
+ b += 4
+
+ return buf
+}