00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.commands;
00023
00024 import com.realtime.crossfire.jxclient.gui.commands.ScreenshotFiles;
00025 import com.realtime.crossfire.jxclient.gui.label.JXCWindowRenderer;
00026 import com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection;
00027 import java.awt.Color;
00028 import java.awt.Graphics;
00029 import java.awt.image.BufferedImage;
00030 import java.io.File;
00031 import java.io.IOException;
00032 import javax.imageio.ImageIO;
00033 import org.jetbrains.annotations.NotNull;
00034
00040 public class ScreenshotCommand extends AbstractCommand {
00041
00045 @NotNull
00046 private final JXCWindowRenderer windowRenderer;
00047
00051 @NotNull
00052 private final ScreenshotFiles screenshotFiles;
00053
00061 public ScreenshotCommand(@NotNull final JXCWindowRenderer windowRenderer, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final ScreenshotFiles screenshotFiles) {
00062 super("screenshot", crossfireServerConnection);
00063 this.windowRenderer = windowRenderer;
00064 this.screenshotFiles = screenshotFiles;
00065 }
00066
00070 @Override
00071 public boolean allArguments() {
00072 return true;
00073 }
00074
00078 @Override
00079 public void execute(@NotNull final String args) {
00080 final File file;
00081 if (args.length() == 0) {
00082 try {
00083 file = screenshotFiles.getFile();
00084 } catch (final IOException ex) {
00085 drawInfoError("Failed to create screenshot filename: "+ex.getMessage());
00086 return;
00087 }
00088 } else {
00089 file = new File(args);
00090 }
00091
00092 final BufferedImage image = new BufferedImage(windowRenderer.getWindowWidth(), windowRenderer.getWindowHeight(), BufferedImage.TYPE_INT_RGB);
00093 final Graphics g = image.createGraphics();
00094 try {
00095 g.setColor(Color.black);
00096 g.fillRect(0, 0, windowRenderer.getWindowWidth(), windowRenderer.getWindowHeight());
00097 windowRenderer.redraw(g);
00098 } finally {
00099 g.dispose();
00100 }
00101 try {
00102 ImageIO.write(image, "png", file);
00103 } catch (final IOException ex) {
00104 drawInfoError("Cannot write screenshot "+file.getPath()+": "+ex.getMessage());
00105 return;
00106 } catch (final NullPointerException ignored) {
00107 drawInfoError("Cannot write screenshot "+file.getPath());
00108 return;
00109 }
00110
00111 drawInfo("Saved screenshot to "+file.getPath());
00112 }
00113
00114 }