aboutsummaryrefslogtreecommitdiff
path: root/idea
diff options
context:
space:
mode:
authorDmitry Batrak <Dmitry.Batrak@jetbrains.com>2016-12-19 12:05:46 +0300
committerDmitry Batrak <Dmitry.Batrak@jetbrains.com>2016-12-19 12:05:46 +0300
commit72bc1fbce6b2f90862c7effbceb41aed66a8c19b (patch)
treeb66f46aa7d64c6af0903a22cf5b5bf1cf0401a1b /idea
parent87c7039e870453d7862343e7fc30cedb914f0d17 (diff)
downloadjdk8u_jdk-72bc1fbce6b2f90862c7effbceb41aed66a8c19b.tar.gz
utility to capture result of on-screen paintingjb8u112-b622
Diffstat (limited to 'idea')
-rw-r--r--idea/java/tests/src/ScreenPaintingCaptor.java47
1 files changed, 47 insertions, 0 deletions
diff --git a/idea/java/tests/src/ScreenPaintingCaptor.java b/idea/java/tests/src/ScreenPaintingCaptor.java
new file mode 100644
index 0000000000..26347a3b43
--- /dev/null
+++ b/idea/java/tests/src/ScreenPaintingCaptor.java
@@ -0,0 +1,47 @@
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.function.Consumer;
+import javax.swing.*;
+
+public class ScreenPaintingCaptor {
+ public static BufferedImage capture(int width, int height, Consumer<Graphics2D> painter) throws Exception {
+ JFrame[] f = new JFrame[1];
+ Point[] p = new Point[1];
+ SwingUtilities.invokeAndWait(() -> {
+ f[0] = new JFrame();
+ JComponent c = new MyComponent(painter);
+ f[0].add(c);
+ c.setSize(width + 2, height + 2);
+ f[0].setSize(width + 100, height + 100); // giving some space for frame border effects, e.g. rounded frame
+ c.setLocation(50, 50);
+ f[0].setVisible(true);
+ p[0]= c.getLocationOnScreen();
+ });
+ Robot r = new Robot();
+ while (!Color.black.equals(r.getPixelColor(p[0].x, p[0].y))) {
+ Thread.sleep(100);
+ }
+ BufferedImage i = r.createScreenCapture(new Rectangle(p[0].x + 1, p[0].y + 1, width, height));
+ SwingUtilities.invokeAndWait(f[0]::dispose);
+ return i;
+ }
+
+ private static class MyComponent extends JComponent {
+ private final Consumer<Graphics2D> painter;
+
+ private MyComponent(Consumer<Graphics2D> painter) {
+ this.painter = painter;
+ }
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ g.translate(1, 1);
+ Shape savedClip = g.getClip();
+ g.clipRect(0, 0, getWidth() - 2, getHeight() - 2);
+ painter.accept((Graphics2D)g);
+ g.setClip(savedClip);
+ g.setColor(Color.black);
+ g.drawRect(-1, -1, getWidth() - 1, getHeight() - 1);
+ }
+ }
+}