diff --git a/src/itdelatrisu/opsu/Utils.java b/src/itdelatrisu/opsu/Utils.java index e1f6c968..7c3ec7d7 100644 --- a/src/itdelatrisu/opsu/Utils.java +++ b/src/itdelatrisu/opsu/Utils.java @@ -436,24 +436,23 @@ public class Utils { // TODO: should this be threaded? try { // create the screenshot directory - if (!Options.SCREENSHOT_DIR.isDirectory()) { - if (!Options.SCREENSHOT_DIR.mkdir()) + File dir = Options.getScreenshotDir(); + if (!dir.isDirectory()) { + if (!dir.mkdir()) return false; } // create file name SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd_HHmmss"); - String file = date.format(new Date()); + File file = new File(dir, String.format("screenshot_%s.%s", + date.format(new Date()), Options.getScreenshotFormat())); SoundController.playSound(SoundController.SOUND_SHUTTER); // copy the screen Image screen = new Image(container.getWidth(), container.getHeight()); container.getGraphics().copyArea(screen, 0, 0); - ImageOut.write(screen, String.format("%s%sscreenshot_%s.%s", - Options.SCREENSHOT_DIR.getName(), File.separator, - file, Options.getScreenshotFormat()), false - ); + ImageOut.write(screen, file.getAbsolutePath(), false); screen.destroy(); } catch (SlickException e) { Log.warn("Failed to take a screenshot.", e); diff --git a/src/itdelatrisu/opsu/states/Options.java b/src/itdelatrisu/opsu/states/Options.java index bdffbba0..671dc3d0 100644 --- a/src/itdelatrisu/opsu/states/Options.java +++ b/src/itdelatrisu/opsu/states/Options.java @@ -57,11 +57,6 @@ public class Options extends BasicGameState { * Temporary folder for file conversions, auto-deleted upon successful exit. */ public static final File TMP_DIR = new File(".opsu_tmp/"); - - /** - * Directory for screenshots (created when needed). - */ - public static final File SCREENSHOT_DIR = new File("Screenshots/"); /** * File for logging errors. @@ -92,6 +87,11 @@ public class Options extends BasicGameState { */ private static File oszDir; + /** + * The screenshot directory (created when needed). + */ + private static File screenshotDir; + /** * The current skin directory (for user skins). */ @@ -1186,7 +1186,7 @@ public class Options extends BasicGameState { /** * Returns the OSZ archive directory. - * If invalid, this will return the root directory. + * If invalid, this will create and return a "SongPacks" directory. * @return the OSZ archive directory */ public static File getOSZDir() { @@ -1198,6 +1198,19 @@ public class Options extends BasicGameState { return oszDir; } + /** + * Returns the screenshot directory. + * If invalid, this will return a "Screenshot" directory. + * @return the screenshot directory + */ + public static File getScreenshotDir() { + if (screenshotDir != null && screenshotDir.isDirectory()) + return screenshotDir; + + screenshotDir = new File("Screenshots/"); + return screenshotDir; + } + /** * Returns the current skin directory. * If invalid, this will create a "Skins" folder in the root directory. @@ -1242,6 +1255,9 @@ public class Options extends BasicGameState { case "OSZDirectory": oszDir = new File(value); break; + case "ScreenshotDirectory": + screenshotDir = new File(value); + break; case "Skin": skinDir = new File(value); break; @@ -1385,6 +1401,8 @@ public class Options extends BasicGameState { writer.newLine(); writer.write(String.format("OSZDirectory = %s", getOSZDir().getAbsolutePath())); writer.newLine(); + writer.write(String.format("ScreenshotDirectory = %s", getScreenshotDir().getAbsolutePath())); + writer.newLine(); writer.write(String.format("Skin = %s", getSkinDir().getAbsolutePath())); writer.newLine(); writer.write(String.format("Port = %d", port));