// 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();
}
|