blob: 1c5ad7505448e16fa4eb1bebf727e373f52a7e5d [file] [log] [blame]
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"fmt"
"os"
"xgb"
)
func main() {
c, err := xgb.Dial(os.Getenv("DISPLAY"))
if err != nil {
fmt.Printf("cannot connect: %v\n", err)
os.Exit(1)
}
fmt.Printf("vendor = '%s'\n", string(c.Setup.Vendor))
win := c.NewId()
gc := c.NewId()
c.CreateWindow(0, win, c.DefaultScreen().Root, 150, 150, 200, 200, 0, 0, 0, 0, nil)
c.ChangeWindowAttributes(win, xgb.CWEventMask,
[]uint32{xgb.EventMaskExposure | xgb.EventMaskKeyRelease})
c.CreateGC(gc, win, 0, nil)
c.MapWindow(win)
atom, _ := c.InternAtom(0, "HELLO")
fmt.Printf("atom = %d\n", atom.Atom)
points := make([]xgb.Point, 2)
points[1] = xgb.Point{5, 5}
points[1] = xgb.Point{100, 120}
hosts, _ := c.ListHosts()
fmt.Printf("hosts = %+v\n", hosts)
ecookie := c.ListExtensionsRequest()
exts, _ := c.ListExtensionsReply(ecookie)
for _, name := range exts.Names {
fmt.Printf("exts = '%s'\n", name.Name)
}
for {
reply, err := c.WaitForEvent()
if err != nil {
fmt.Printf("error: %v\n", err)
os.Exit(1)
}
fmt.Printf("event %T\n", reply)
switch event := reply.(type) {
case xgb.ExposeEvent:
c.PolyLine(xgb.CoordModeOrigin, win, gc, points)
case xgb.KeyReleaseEvent:
fmt.Printf("key release!\n")
points[0].X = event.EventX
points[0].Y = event.EventY
c.PolyLine(xgb.CoordModeOrigin, win, gc, points)
c.Bell(75)
}
}
c.Close()
}