diff --git a/MainWindow.cs b/MainWindow.cs --- a/MainWindow.cs +++ b/MainWindow.cs @@ -29,22 +29,15 @@ using DesertPaintLab; public partial class MainWindow : Gtk.Window { - const string APP_VERSION = "1.1.10"; + const string APP_VERSION = "1.7.11"; bool unsavedData = false; bool shouldShutDown = false; - string appDataPath; List profileList = new List(); PlayerProfile profile = null; PaintColor expectedColor = new PaintColor(); PaintColor reactedColor = new PaintColor(); - int screenWidth = 0; - int screenHeight = 0; - int pixelMultiplier = 1; - - bool enableDebugMenu = false; - Gdk.Window rootWindow = null; Gdk.Pixbuf screenBuffer = null; @@ -62,10 +55,7 @@ public partial class MainWindow : Gtk.Wi public MainWindow () : base(Gtk.WindowType.Toplevel) { - appDataPath = System.IO.Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), - "DesertPaintLab"); - + string appDataPath = FileUtils.AppDataPath; if (!System.IO.Directory.Exists(appDataPath)) { System.IO.Directory.CreateDirectory(appDataPath); @@ -130,27 +120,36 @@ public partial class MainWindow : Gtk.Wi rootWindow = Gdk.Global.DefaultRootWindow; // get its width and height + int screenWidth; + int screenHeight; rootWindow.GetSize(out screenWidth, out screenHeight); + int pixelMultiplier = 1; - string settingsPath = System.IO.Path.Combine(appDataPath, "settings"); - if (System.IO.File.Exists(settingsPath)) + if ( DesertPaintLab.Settings.Load() == true ) { - LoadSettings(settingsPath); + DesertPaintLab.Settings.Get("ScreenWidth", out screenWidth); + DesertPaintLab.Settings.Get("ScreenHeight", out screenHeight); + DesertPaintLab.Settings.Get("PixelMultiplier", out pixelMultiplier); } + bool enableDebugMenu; + DesertPaintLab.Settings.Get("EnableDebugMenu", out enableDebugMenu); this.DebugAction.Visible = enableDebugMenu; ScreenCheckDialog screenCheckDialog = new ScreenCheckDialog(); screenCheckDialog.ScreenWidth = screenWidth; screenCheckDialog.ScreenHeight = screenHeight; - screenCheckDialog.GamePixelWidth = pixelMultiplier; + screenCheckDialog.GamePixelWidth = pixelMultiplier; ResponseType resp = (ResponseType)screenCheckDialog.Run(); - screenWidth = screenCheckDialog.ScreenWidth; - screenHeight = screenCheckDialog.ScreenHeight; - pixelMultiplier = screenCheckDialog.GamePixelWidth; + screenWidth = screenCheckDialog.ScreenWidth; + screenHeight = screenCheckDialog.ScreenHeight; + pixelMultiplier = screenCheckDialog.GamePixelWidth; screenCheckDialog.Destroy(); - SaveSettings(settingsPath); + DesertPaintLab.Settings.Set("ScreenWidth", screenWidth); + DesertPaintLab.Settings.Set("ScreenHeight", screenHeight); + DesertPaintLab.Settings.Set("PixelMultiplier", pixelMultiplier); + DesertPaintLab.Settings.Save(); screenBuffer = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, false, 8, screenWidth, screenHeight); @@ -162,83 +161,6 @@ public partial class MainWindow : Gtk.Wi } } - static Regex optionEntry = new Regex(@"(?[^#=][^=]*)=(?.*)$"); - void LoadSettings(string file) - { - string line; - Match match; - using (StreamReader reader = new StreamReader(file)) - { - while ((line = reader.ReadLine()) != null) - { - match = optionEntry.Match(line); - if (match.Success) - { - String optName = match.Groups["opt"].Value.ToLower(); - String optVal = match.Groups["optval"].Value.Trim(); - switch (optName) - { - case "screenwidth": - try { - int val = Int32.Parse(optVal); - if (val > 0) - { - screenWidth = val; - } - } catch (FormatException) { - // ignore - } - break; - case "screenheight": - try { - int val = Int32.Parse(optVal); - if (val > 0) - { - screenHeight = val; - } - } catch (FormatException) { - // ignore - } - break; - case "pixelmultiplier": - try { - int val = Int32.Parse(optVal); - if (val > 0) - { - pixelMultiplier = val; - } - } catch (FormatException) { - // ignore - } - break; - case "debug": - try { - bool val = Boolean.Parse(optVal.ToLower()); - enableDebugMenu = val; - } catch (FormatException) { - // ignore - } - break; - default: - // ignore - break; - } - } - } - } - } - - void SaveSettings(string file) - { - using (StreamWriter writer = new StreamWriter(file)) - { - writer.WriteLine("screenwidth={0}", screenWidth); - writer.WriteLine("screenheight={0}", screenHeight); - writer.WriteLine("pixelmultiplier={0}", pixelMultiplier); - writer.WriteLine("debug={0}", enableDebugMenu); - } - } - bool ConfirmedExit() { if (unsavedData) @@ -259,7 +181,7 @@ public partial class MainWindow : Gtk.Wi void SetProfileName(string name) { profile = new PlayerProfile(name, - System.IO.Path.Combine(appDataPath, name)); + System.IO.Path.Combine(FileUtils.AppDataPath, name)); statusBar.Push(0, name); } @@ -571,7 +493,14 @@ public partial class MainWindow : Gtk.Wi unsafe bool CaptureReactionColor() { // Take a screenshot. - Gdk.Image rootImage = rootWindow.GetImage(0, 0, screenWidth, screenHeight); + int screenWidth, screenHeight; + bool debugScreenshot = false; + bool enableDebugMenu = false; + DesertPaintLab.Settings.Get("ScreenWidth", out screenWidth); + DesertPaintLab.Settings.Get("ScreenHeight", out screenHeight); + DesertPaintLab.Settings.Get("EnableDebugMenu", out enableDebugMenu); + DesertPaintLab.Settings.Get("DebugScreenshot", out debugScreenshot); + Gdk.Image rootImage = rootWindow.GetImage(0, 0, screenWidth, screenHeight); screenBuffer.GetFromImage(rootImage, rootImage.Colormap, 0, 0, 0, 0, screenWidth, screenHeight); //screenBuffer.GetFromDrawable(rootWindow, // rootWindow.Colormap, 0, 0, 0, 0, screenWidth, screenHeight); @@ -580,7 +509,7 @@ public partial class MainWindow : Gtk.Wi int redPixelStart = -1; bool wasCaptured = ReactionRecorder.CaptureReaction(pixBytes, screenWidth, screenHeight, stride, ref reactedColor, ref redPixelStart); - if (!wasCaptured && enableDebugMenu) + if (!wasCaptured && enableDebugMenu && debugScreenshot) { // write out the screenshot string screenshotDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); @@ -608,7 +537,7 @@ public partial class MainWindow : Gtk.Wi filename = System.IO.Path.Combine(screenshotDir, String.Format("DesertPaintLab_Colormatch{0}.png", i)); } while (System.IO.File.Exists(filename)); int captureAreaWidth = Math.Min(64, screenWidth - redPixelStartX + 64); - int captureAreaHeight = Math.Min(64, screenWidth - redPixelStartY + 64); + int captureAreaHeight = Math.Min(64, screenHeight - redPixelStartY + 64); Gdk.Pixbuf outPixBuf = new Gdk.Pixbuf(screenBuffer, Math.Max(0, redPixelStartX - 16), Math.Max(0, redPixelStartY - 16), captureAreaWidth, captureAreaHeight); //screenBuffer.Save(filename, "png"); outPixBuf.Save(filename, "png"); @@ -620,6 +549,9 @@ public partial class MainWindow : Gtk.Wi protected virtual void OnDebugScreenshot(object sender, System.EventArgs e) { + int screenWidth, screenHeight; + DesertPaintLab.Settings.Get("ScreenWidth", out screenWidth); + DesertPaintLab.Settings.Get("ScreenHeight", out screenHeight); Gdk.Image rootImage = rootWindow.GetImage(0, 0, screenWidth, screenHeight); screenBuffer.GetFromImage(rootImage, rootImage.Colormap, 0, 0, 0, 0, screenWidth, screenHeight); string screenshotDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);