!7 cm ContinuousScreenshots > DynImageSurface { bool enabled, runInBackground = true; int width = 64; double videoInterval = 1; start { doEvery(videoInterval, r grab); } visualize { JComponent c = super.visualize(); enableDoubleBuffering(); imageSurface_pixelated(imageSurface); ret northAndCenterWithMargins( centerAndEastWithMargin(withLabel("Resize to width (pixels):", jLiveValueIntTextField(dm_fieldLiveValue('width))), dm_fieldCheckBox('enabled)), c); } bool actuallyEnabled() { ret enabled && (runInBackground || dm_isVisible()); } void grab enter { if (!actuallyEnabled()) ret; time "Get Screenshot" { setImage(scaledDownScreenshot(width)); } } enhanceFrame { dm_doubleFieldMenuItem(f, 'videoInterval, formTitle := "Update image every n seconds", onSet := rThread dm_reload); } }