Skip to content

Commit

Permalink
Support displaying memory usage in top widget
Browse files Browse the repository at this point in the history
  • Loading branch information
muesli committed Aug 8, 2019
1 parent 49f95d4 commit 45976f2
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 10 deletions.
20 changes: 17 additions & 3 deletions widget.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,31 @@ func NewWidget(index uint8, id string, action *ActionConfig, config map[string]s

switch id {
case "button":
return &ButtonWidget{BaseWidget: bw, icon: config["icon"], label: config["label"]}
return &ButtonWidget{
BaseWidget: bw,
icon: config["icon"],
label: config["label"],
}

case "clock":
return &ClockWidget{bw}

case "recentWindow":
i, err := strconv.ParseUint(config["window"], 10, 64)
if err != nil {
log.Fatal(err)
}
return &RecentWindowWidget{BaseWidget: bw, window: uint8(i)}
return &RecentWindowWidget{
BaseWidget: bw,
window: uint8(i),
}

case "top":
return &TopWidget{bw}
return &TopWidget{
BaseWidget: bw,
mode: config["mode"],
fillColor: config["fillColor"],
}
}

panic(id)
Expand Down
53 changes: 46 additions & 7 deletions widget_top.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,67 @@ import (
"strconv"

"github.com/golang/freetype"
colorful "github.com/lucasb-eyer/go-colorful"
"github.com/muesli/streamdeck"
"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/mem"
)

type TopWidget struct {
BaseWidget
mode string
fillColor string
}

func (w *TopWidget) Update(dev *streamdeck.Device) {
img := image.NewRGBA(image.Rect(0, 0, 72, 72))

cpuUsage, err := cpu.Percent(0, false)
var value float64
var label string
var fill colorful.Color

fill, err := colorful.Hex(w.fillColor)
if err != nil {
log.Fatal(err)
panic("Invalid color: " + w.fillColor)
}

switch w.mode {
case "cpu":
cpuUsage, err := cpu.Percent(0, false)
if err != nil {
log.Fatal(err)
}

value = cpuUsage[0]
label = "CPU"

case "memory":
mem, err := mem.VirtualMemory()
if err != nil {
log.Fatal(err)
}
value = mem.UsedPercent
label = "MEM"

default:
panic("Unknown widget mode: " + w.mode)
}

draw.Draw(img, image.Rect(12, 6, 60, 54), &image.Uniform{color.RGBA{255, 255, 255, 255}}, image.ZP, draw.Src)
draw.Draw(img, image.Rect(13, 7, 59, 53), &image.Uniform{color.RGBA{0, 0, 0, 255}}, image.ZP, draw.Src)
draw.Draw(img, image.Rect(14, 7+int(46*(1-cpuUsage[0]/100)), 58, 53), &image.Uniform{color.RGBA{215, 158, 147, 255}}, image.ZP, draw.Src)
draw.Draw(img,
image.Rect(12, 6, 60, 54),
&image.Uniform{color.RGBA{255, 255, 255, 255}},
image.ZP, draw.Src)
draw.Draw(img,
image.Rect(13, 7, 59, 53),
&image.Uniform{color.RGBA{0, 0, 0, 255}},
image.ZP, draw.Src)
draw.Draw(img,
image.Rect(14, 7+int(46*(1-value/100)), 58, 53),
&image.Uniform{fill},
image.ZP, draw.Src)

drawString(img, ttfFont, strconv.FormatInt(int64(cpuUsage[0]), 10), 12, freetype.Pt(-1, -1))
drawString(img, ttfFont, "% CPU", 7, freetype.Pt(-1, img.Bounds().Dx()-4))
drawString(img, ttfFont, strconv.FormatInt(int64(value), 10), 12, freetype.Pt(-1, -1))
drawString(img, ttfFont, "% "+label, 7, freetype.Pt(-1, img.Bounds().Dx()-4))

err = dev.SetImage(w.key, img)
if err != nil {
Expand Down

0 comments on commit 45976f2

Please sign in to comment.