!752 concepts. !include #1005393 // Marked Screenshot Classes static ImageSurface imageSurface; static JButton btnMark; static JFrame frame; static BufferedImage img; static BWImage bwImage; static Screenshot screenshot; static JTextField tfDesc; svoid makeScreenshot { img = shootScreen2(); screenshot = new Screenshot(img); bwImage = new BWImage(img); } p { concepts(); screenshot = last(list(Screenshot)); if (screenshot != null) { // keep working with last screenshot img = loadImage2(screenshot.pngFile()); bwImage = new BWImage(img); } else // make new one makeScreenshot(); imageSurface = new ImageSurface(img) { public void setSelection(Rectangle r) { super.setSelection(r); btnMark.setEnabled(r != null); } }; JPanel buttons = jcenteredline( jMinWidth(300, onEnter(tfDesc = new JTextField, "mark")), btnMark = jbutton("Mark", "mark"), jbutton("Shoot again", r { hideFrame(frame); swingLater(5000, r { makeScreenshot(); imageSurface.setImage(img); makeFrameVisible(imageSurface); maximizeFrame(imageSurface); }); }) ); frame = showMaximizedFrame(centerAndSouth( new JScrollPane(imageSurface), buttons)); } svoid mark { Rectangle r = imageSurface.getSelection(); if (r == null) ret; S desc = tfDesc.getText().trim(); cnew(MarkedClip, +screenshot, positionInScreenshot := new Rect(r), img := bwImage.clip(r), description := desc); showAnimation("#1005392", quote(desc), 1); print("Marked clip! " + quote(desc) + " (" + r + ")"); tfDesc.selectAll(); tfDesc.requestFocus(); }