!7 cmodule ProcessCPUTrayIcon > DynBigNumber { transient BufferedImage trayImage; transient TrayIcon trayIcon; switchable S color = "ADFF2F"; // green yellow switchable S backgroundColor = "228B22"; // forest green switchable int size = goodSystemTrayIconSize().x; switchable double interval = 1; transient double loadRelativeToAllCores, recentLoad; transient RollingAverage avg = new(5); // =10 seconds start { setDescription("STEFAN'S OS CPU %"); setToolTip("Percentage is per core (total: " + numberOfCores()*100 + "%)"); doEvery(interval, r actualUpdate); ownResource(tempTrayIcon(trayIcon = installTrayIcon( trayImage = newBufferedImage(size, size, colorFromHex(backgroundColor)), "Stefan's OS CPU", rThread dm_activateOSAndModule))); } void actualUpdate { recentLoad = processCPULoad(); avg.add(recentLoad); loadRelativeToAllCores = avg!; setValue(toIntPercent_ceil(loadRelativeToAllCores*numberOfCores()) + " %"); int w = trayImage.getWidth(), h = trayImage.getHeight(); copyImagePart(trayImage, 1, 0, trayImage, 0, 0, w-1, h); int y = iround((h-1)*(1 - loadRelativeToAllCores)); fillRect(trayImage, w-1, 0, 1, y, colorFromHex(backgroundColor)); fillRect(trayImage, w-1, y, 1, h-y, colorFromHex(color)); setTrayIconImage(trayIcon, trayImage); } }