/
icon.go
47 lines (41 loc) · 926 Bytes
/
icon.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package xgb
import (
"bytes"
"image"
"image/gif"
"github.com/BurntSushi/xgbutil/ewmh"
)
var Gordon image.Image
func init() {
gordonGifData := gordon_gif()
var err error
Gordon, err = gif.Decode(bytes.NewReader(gordonGifData))
if err != nil {
panic(err)
}
}
func (w *Window) SetIconName(name string) {
err := ewmh.WmIconNameSet(w.xu, w.win.Id, name)
if err != nil {
println(err.Error())
}
}
func (w *Window) SetIcon(icon image.Image) {
width := icon.Bounds().Max.X - icon.Bounds().Min.X
height := icon.Bounds().Max.Y - icon.Bounds().Min.Y
data := make([]uint, width*height)
for x := 0; x < width; x++ {
for y := 0; y < height; y++ {
i := x + y*width
c := icon.At(x, y)
r, g, b, a := c.RGBA()
data[i] = uint(a + r<<8 + g<<16 + b<<24)
}
}
wmicon := ewmh.WmIcon{
Width: uint(width),
Height: uint(height),
Data: data,
}
ewmh.WmIconSet(w.xu, w.win.Id, []ewmh.WmIcon{wmicon})
}