RosettaCodeData/Task/Window-creation-X11/Go/window-creation-x11.go
Ingy döt Net 68f8f3e56b all tasks
2013-04-11 01:07:29 -07:00

60 lines
1.5 KiB
Go

package main
import (
"code.google.com/p/x-go-binding/xgb"
"fmt"
)
func main() {
c, err := xgb.Dial("")
if err != nil {
fmt.Println(err)
return
}
defer c.Close()
strBytes := []byte("Hello XGB!")
rectangles := []xgb.Rectangle{{40, 40, 20, 20}}
// get the first screen
s := c.DefaultScreen()
// root window
win := s.Root
// create black (foreground) graphic context
fg := c.NewId()
mask := uint32(xgb.GCForeground | xgb.GCGraphicsExposures)
values := []uint32{s.BlackPixel, 0}
c.CreateGC(fg, win, mask, values)
// create white (background) graphic context
bg := c.NewId()
mask = uint32(xgb.GCBackground | xgb.GCGraphicsExposures)
values[0] = s.WhitePixel // (values[1] still 0)
c.CreateGC(bg, win, mask, values)
// create the window
win = c.NewId()
mask = xgb.CWBackPixel | xgb.CWEventMask
// values[0] still s.WhitePixel
values[1] = xgb.EventMaskExposure | xgb.EventMaskKeyPress
c.CreateWindow(0, win, s.Root, 0, 0, 150, 150, 10,
xgb.WindowClassInputOutput, s.RootVisual, mask, values)
c.MapWindow(win)
for {
event, err := c.WaitForEvent()
if err != nil {
fmt.Println(err)
return
}
switch event.(type) {
case xgb.ExposeEvent:
c.PolyRectangle(win, fg, rectangles)
c.ImageText8(win, bg, 20, 20, strBytes)
case xgb.KeyPressEvent:
return
}
}
}