60 lines
1.5 KiB
Go
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
|
|
}
|
|
}
|
|
}
|