diff --git a/source/Dtos/SavedOptions.cs b/source/Dtos/SavedOptions.cs index bf34976..5908c73 100644 --- a/source/Dtos/SavedOptions.cs +++ b/source/Dtos/SavedOptions.cs @@ -4,6 +4,11 @@ { public int Version { get; set; } = 1; + public string Format { get; set; } = "suzumagnifier"; + + public bool ReadOnly { get; set; } = false; + + public bool AutoStart { get; set; } public bool HighQuality { get; set; } @@ -16,10 +21,9 @@ public int CrosshairSize { get; set; } - public Color CrosshairColour { get; set; } + public string? CrosshairColour { get; set; } public bool ShowAlwaysOnTop { get; set; } - } } diff --git a/source/Form1.Designer.cs b/source/Form1.Designer.cs index c8d7973..d165d64 100644 --- a/source/Form1.Designer.cs +++ b/source/Form1.Designer.cs @@ -44,8 +44,6 @@ toolStripSeparator3 = new ToolStripSeparator(); resetToolStripMenuItem = new ToolStripMenuItem(); toolStripMenuItem9 = new ToolStripMenuItem(); - showToolStripMenuItem = new ToolStripMenuItem(); - toolStripSeparator5 = new ToolStripSeparator(); sizeToolStripMenuItem = new ToolStripMenuItem(); smallToolStripMenuItem = new ToolStripMenuItem(); mediumToolStripMenuItem = new ToolStripMenuItem(); @@ -67,6 +65,8 @@ aboutToolStripMenuItem = new ToolStripMenuItem(); toolStripSeparator6 = new ToolStripSeparator(); exitiToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem11 = new ToolStripMenuItem(); + toolStripSeparator7 = new ToolStripSeparator(); contextMenuStrip1.SuspendLayout(); SuspendLayout(); // @@ -115,14 +115,14 @@ // fasterToolStripMenuItem // fasterToolStripMenuItem.Name = "fasterToolStripMenuItem"; - fasterToolStripMenuItem.Size = new Size(180, 22); + fasterToolStripMenuItem.Size = new Size(100, 22); fasterToolStripMenuItem.Text = "&Fast"; fasterToolStripMenuItem.Click += fastToolStripMenuItem_Click; // // highToolStripMenuItem // highToolStripMenuItem.Name = "highToolStripMenuItem"; - highToolStripMenuItem.Size = new Size(180, 22); + highToolStripMenuItem.Size = new Size(100, 22); highToolStripMenuItem.Text = "&High"; highToolStripMenuItem.Click += highToolStripMenuItem_Click; // @@ -165,27 +165,15 @@ // // toolStripMenuItem9 // - toolStripMenuItem9.DropDownItems.AddRange(new ToolStripItem[] { showToolStripMenuItem, toolStripSeparator5, sizeToolStripMenuItem, colourToolStripMenuItem }); + toolStripMenuItem9.DropDownItems.AddRange(new ToolStripItem[] { sizeToolStripMenuItem, colourToolStripMenuItem }); toolStripMenuItem9.Image = Resource1.crosshair; toolStripMenuItem9.Name = "toolStripMenuItem9"; toolStripMenuItem9.Size = new Size(204, 22); toolStripMenuItem9.Text = "Crosshair"; // - // showToolStripMenuItem - // - showToolStripMenuItem.Name = "showToolStripMenuItem"; - showToolStripMenuItem.Size = new Size(180, 22); - showToolStripMenuItem.Text = "Show"; - showToolStripMenuItem.Click += showToolStripMenuItem_Click; - // - // toolStripSeparator5 - // - toolStripSeparator5.Name = "toolStripSeparator5"; - toolStripSeparator5.Size = new Size(177, 6); - // // sizeToolStripMenuItem // - sizeToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { smallToolStripMenuItem, mediumToolStripMenuItem, largeToolStripMenuItem }); + sizeToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem11, toolStripSeparator7, smallToolStripMenuItem, mediumToolStripMenuItem, largeToolStripMenuItem }); sizeToolStripMenuItem.Name = "sizeToolStripMenuItem"; sizeToolStripMenuItem.Size = new Size(180, 22); sizeToolStripMenuItem.Text = "Size"; @@ -329,6 +317,18 @@ exitiToolStripMenuItem.Text = "E&xit"; exitiToolStripMenuItem.Click += exitiToolStripMenuItem_Click; // + // toolStripMenuItem11 + // + toolStripMenuItem11.Name = "toolStripMenuItem11"; + toolStripMenuItem11.Size = new Size(180, 22); + toolStripMenuItem11.Text = "None"; + toolStripMenuItem11.Click += toolStripMenuItem11_Click; + // + // toolStripSeparator7 + // + toolStripSeparator7.Name = "toolStripSeparator7"; + toolStripSeparator7.Size = new Size(177, 6); + // // Form1 // AutoScaleDimensions = new SizeF(96F, 96F); @@ -364,10 +364,8 @@ private ToolStripMenuItem resetToolStripMenuItem; private ToolStripSeparator toolStripSeparator4; private ToolStripMenuItem toolStripMenuItem9; - private ToolStripMenuItem showToolStripMenuItem; private ToolStripMenuItem sizeToolStripMenuItem; private ToolStripMenuItem colourToolStripMenuItem; - private ToolStripSeparator toolStripSeparator5; private ToolStripMenuItem smallToolStripMenuItem; private ToolStripMenuItem mediumToolStripMenuItem; private ToolStripMenuItem largeToolStripMenuItem; @@ -382,5 +380,7 @@ private ToolStripMenuItem viewHelpToolStripMenuItem; private ToolStripMenuItem aboutToolStripMenuItem; private ToolStripSeparator toolStripSeparator6; + private ToolStripMenuItem toolStripMenuItem11; + private ToolStripSeparator toolStripSeparator7; } } diff --git a/source/Form1.cs b/source/Form1.cs index 9461cac..e871a05 100644 --- a/source/Form1.cs +++ b/source/Form1.cs @@ -28,7 +28,7 @@ namespace SuzuMagnifier private readonly System.Windows.Forms.Timer _timer = new(); private Bitmap? _bitmap; - private string jsonfigFilename; + private string _jsonfigFilename; public Form1() @@ -53,27 +53,31 @@ namespace SuzuMagnifier var args = GetCommandLine()!; - jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault(); - if (string.IsNullOrWhiteSpace(jsonfigFilename)) + _jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(_jsonfigFilename)) { - jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig"); + _jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig"); } - if (System.IO.File.Exists(jsonfigFilename)) + if (System.IO.File.Exists(_jsonfigFilename)) { - var newSettings = await LoadSettings(jsonfigFilename); - if (newSettings == null) + this.SavedOptions = await LoadSettings(_jsonfigFilename); + + this.TopMost = this.SavedOptions!.ShowAlwaysOnTop; + this.HighQuality = this.SavedOptions.HighQuality; + this.ZoomFactor = this.SavedOptions.ZoomFactor; + this.UpdateFrequency = this.SavedOptions.UpdateFrequency; + this.CrosshairSize = this.SavedOptions.CrosshairSize; + + if (!string.IsNullOrWhiteSpace(this.SavedOptions.CrosshairColour)) { - newSettings = new SavedOptions(); + this.CrosshairColour = ColorTranslator.FromHtml(this.SavedOptions!.CrosshairColour); } - this.TopMost = newSettings.ShowAlwaysOnTop; - this.HighQuality = newSettings.HighQuality; - this.ZoomFactor = newSettings.ZoomFactor; - //this.UpdateFrequency = newSettings.UpdateFrequency; - this.ShowCrosshair = newSettings.ShowCrosshair; - this.CrosshairSize = newSettings.CrosshairSize; - this.CrosshairColour = newSettings.CrosshairColour; + if (this.SavedOptions!.AutoStart) + { + _timer.Start(); + } } } @@ -116,7 +120,7 @@ namespace SuzuMagnifier g.DrawImage(_bitmap, this.ClientRectangle); // Draw center crosshair - if (this.ShowCrosshair) + if (this.CrosshairSize > 0) { var cx = Divide(this.Width, 2); var cy = Divide(this.Height, 2); @@ -181,10 +185,15 @@ namespace SuzuMagnifier { base.OnFormClosing(e); + if (this.SavedOptions.ReadOnly) + { + return; + } + var result = MessageBox.Show("Do you want to save settings to file?", "Save Settings?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.Yes) { - var result2 = await SaveSettings(jsonfigFilename); + var result2 = await SaveSettings(_jsonfigFilename); if (result2) { return; @@ -205,58 +214,20 @@ namespace SuzuMagnifier } + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public SavedOptions SavedOptions { get => field ?? new SavedOptions(); private set => field = value; } + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool HighQuality { get; set; } = false; [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int ZoomFactor - { - get => field; - set - { - if (value < 0) - { - field = 1; - return; - } - - if (value > 20) - { - field = 20; - return; - } - - field = value; - } - } = 2; + public int ZoomFactor { get => field; set => field = Math.Clamp(value, 1, 20); } = 2; [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int UpdateFrequency { get; set; } = 33; [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool ShowCrosshair { get; set; } = true; - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int CrosshairSize - { - get => field; - set - { - if (value < 5) - { - field = 5; - return; - } - - if (value > 200) - { - field = 200; - return; - } - - field = value; - } - } = 20; + public int CrosshairSize { get => field; set => field = Math.Clamp(value, 0, 200); } = 20; [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Color CrosshairColour { get; set; } = Color.FromArgb(255, 255, 0); @@ -269,18 +240,20 @@ namespace SuzuMagnifier toolStripMenuItem5.Checked = this.TopMost; - showToolStripMenuItem.Checked = this.ShowCrosshair; + toolStripMenuItem11.Checked = (this.CrosshairSize == 0); smallToolStripMenuItem.Checked = (this.CrosshairSize == 10); mediumToolStripMenuItem.Checked = (this.CrosshairSize == 20); largeToolStripMenuItem.Checked = (this.CrosshairSize == 50); - agentaToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 255); - cyanToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 255); - yellowToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 0); - greenToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 0); - redToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 0); - blackToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 0, 0); - whiteToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 255); + resetToolStripMenuItem.Checked = (this.ZoomFactor == 1); + + agentaToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 0, 255)); + cyanToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 255, 255)); + yellowToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 255, 0)); + greenToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 255, 0)); + redToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 0, 0)); + blackToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 0, 0)); + whiteToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 255, 255)); fasterToolStripMenuItem.Checked = !this.HighQuality; fasterToolStripMenuItem.Enabled = this.HighQuality; @@ -525,17 +498,17 @@ namespace SuzuMagnifier } /// - /// Crosshair, toggle + /// Crosshair, size, off /// /// /// - private void showToolStripMenuItem_Click(object sender, EventArgs e) + private void toolStripMenuItem11_Click(object sender, EventArgs e) { - this.ShowCrosshair = !this.ShowCrosshair; + this.CrosshairSize = 0; } /// - /// Croisshair, size, small + /// Crosshair, size, small /// /// /// @@ -545,7 +518,7 @@ namespace SuzuMagnifier } /// - /// Croisshair, size, medium + /// Crosshair, size, medium /// /// /// @@ -555,7 +528,7 @@ namespace SuzuMagnifier } /// - /// Croisshair, size, large + /// Crosshair, size, large /// /// /// @@ -662,32 +635,38 @@ namespace SuzuMagnifier return null; } + SavedOptions response; try { - return System.Text.Json.JsonSerializer.Deserialize(sourceCode); + response = System.Text.Json.JsonSerializer.Deserialize(sourceCode); } catch (Exception) { return null; } + + if (!response!.Format.Equals(Resource1.FileFormat, StringComparison.CurrentCultureIgnoreCase)) + { + return null; + } + + return response; } private async Task SaveSettings(string filename) { - var result = new SavedOptions(); - result.AutoStart = false; - result.HighQuality = this.HighQuality; - result.ZoomFactor = this.ZoomFactor; - result.UpdateFrequency = this.UpdateFrequency; - result.ShowCrosshair = this.ShowCrosshair; - result.CrosshairSize = this.CrosshairSize; - result.CrosshairColour = this.CrosshairColour; - result.ShowAlwaysOnTop = this.TopMost; + //_savedOptions.AutoStart = false; + this.SavedOptions.HighQuality = this.HighQuality; + this.SavedOptions.ZoomFactor = this.ZoomFactor; + this.SavedOptions.UpdateFrequency = this.UpdateFrequency; + this.SavedOptions.CrosshairSize = this.CrosshairSize; + this.SavedOptions.CrosshairColour = $"#{this.CrosshairColour.R:X2}{this.CrosshairColour.G:X2}{this.CrosshairColour.B:X2}"; + this.SavedOptions.ShowAlwaysOnTop = this.TopMost; string sourceCode = ""; try { - sourceCode = System.Text.Json.JsonSerializer.Serialize(result); + sourceCode = System.Text.Json.JsonSerializer.Serialize(this.SavedOptions); } catch (Exception) { diff --git a/source/Resource1.Designer.cs b/source/Resource1.Designer.cs index fb877ce..0334797 100644 --- a/source/Resource1.Designer.cs +++ b/source/Resource1.Designer.cs @@ -79,6 +79,15 @@ namespace SuzuMagnifier { } } + /// + /// Looks up a localized string similar to suzumagnifier. + /// + internal static string FileFormat { + get { + return ResourceManager.GetString("FileFormat", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/source/Resource1.resx b/source/Resource1.resx index ef1aff2..2a8eef4 100644 --- a/source/Resource1.resx +++ b/source/Resource1.resx @@ -124,6 +124,9 @@ Resources\crosshair.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + suzumagnifier + Resources\fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/source/SuzuMagnifier.csproj b/source/SuzuMagnifier.csproj index ee25419..75a2d69 100644 --- a/source/SuzuMagnifier.csproj +++ b/source/SuzuMagnifier.csproj @@ -6,7 +6,7 @@ true enable Suzu Magnifier - 0.1.0.148 + 0.1.0.202 Suzu Magnifier Hi, I'm Ray Ray Lam @@ -15,11 +15,11 @@ true - none + full - none + full