From c2480351b83ba7d8dc5397b5bd2e7a424268070f Mon Sep 17 00:00:00 2001 From: Jaex Date: Tue, 13 Jun 2023 09:57:36 +0300 Subject: [PATCH] Added QR code size option --- ShareX/Forms/QRCodeForm.Designer.cs | 84 +++++++++++++------ ShareX/Forms/QRCodeForm.cs | 30 +++++-- ShareX/Forms/QRCodeForm.resx | 126 ++++++++++++++++++++++------ ShareX/TaskHelpers.cs | 16 ++-- 4 files changed, 194 insertions(+), 62 deletions(-) diff --git a/ShareX/Forms/QRCodeForm.Designer.cs b/ShareX/Forms/QRCodeForm.Designer.cs index 3e2676491..21b77a8bc 100644 --- a/ShareX/Forms/QRCodeForm.Designer.cs +++ b/ShareX/Forms/QRCodeForm.Designer.cs @@ -37,19 +37,22 @@ private void InitializeComponent() this.tss1 = new System.Windows.Forms.ToolStripSeparator(); this.tsmiDecode = new System.Windows.Forms.ToolStripMenuItem(); this.txtQRCode = new System.Windows.Forms.TextBox(); - this.pbQRCode = new System.Windows.Forms.PictureBox(); this.tcMain = new System.Windows.Forms.TabControl(); this.tpEncode = new System.Windows.Forms.TabPage(); + this.nudQRCodeSize = new System.Windows.Forms.NumericUpDown(); this.tpDecode = new System.Windows.Forms.TabPage(); + this.pDecodeResult = new System.Windows.Forms.Panel(); + this.rtbDecodeResult = new System.Windows.Forms.RichTextBox(); this.btnDecodeFromFile = new System.Windows.Forms.Button(); this.lblDecodeResult = new System.Windows.Forms.Label(); this.btnDecodeFromScreen = new System.Windows.Forms.Button(); - this.rtbDecodeResult = new System.Windows.Forms.RichTextBox(); - this.pDecodeResult = new System.Windows.Forms.Panel(); + this.pbQRCode = new ShareX.HelpersLib.MyPictureBox(); + this.lblQRCodeSize = new System.Windows.Forms.Label(); + this.lblQRCodeSizeHint = new System.Windows.Forms.Label(); this.cmsQR.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbQRCode)).BeginInit(); this.tcMain.SuspendLayout(); this.tpEncode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudQRCodeSize)).BeginInit(); this.tpDecode.SuspendLayout(); this.pDecodeResult.SuspendLayout(); this.SuspendLayout(); @@ -102,13 +105,6 @@ private void InitializeComponent() this.txtQRCode.Name = "txtQRCode"; this.txtQRCode.TextChanged += new System.EventHandler(this.txtQRCode_TextChanged); // - // pbQRCode - // - resources.ApplyResources(this.pbQRCode, "pbQRCode"); - this.pbQRCode.ContextMenuStrip = this.cmsQR; - this.pbQRCode.Name = "pbQRCode"; - this.pbQRCode.TabStop = false; - // // tcMain // this.tcMain.Controls.Add(this.tpEncode); @@ -120,11 +116,30 @@ private void InitializeComponent() // tpEncode // this.tpEncode.BackColor = System.Drawing.SystemColors.Window; - this.tpEncode.Controls.Add(this.txtQRCode); + this.tpEncode.Controls.Add(this.lblQRCodeSizeHint); + this.tpEncode.Controls.Add(this.lblQRCodeSize); + this.tpEncode.Controls.Add(this.nudQRCodeSize); this.tpEncode.Controls.Add(this.pbQRCode); + this.tpEncode.Controls.Add(this.txtQRCode); resources.ApplyResources(this.tpEncode, "tpEncode"); this.tpEncode.Name = "tpEncode"; // + // nudQRCodeSize + // + this.nudQRCodeSize.Increment = new decimal(new int[] { + 64, + 0, + 0, + 0}); + resources.ApplyResources(this.nudQRCodeSize, "nudQRCodeSize"); + this.nudQRCodeSize.Maximum = new decimal(new int[] { + 2048, + 0, + 0, + 0}); + this.nudQRCodeSize.Name = "nudQRCodeSize"; + this.nudQRCodeSize.ValueChanged += new System.EventHandler(this.nudQRCodeSize_ValueChanged); + // // tpDecode // this.tpDecode.BackColor = System.Drawing.SystemColors.Window; @@ -135,6 +150,20 @@ private void InitializeComponent() resources.ApplyResources(this.tpDecode, "tpDecode"); this.tpDecode.Name = "tpDecode"; // + // pDecodeResult + // + resources.ApplyResources(this.pDecodeResult, "pDecodeResult"); + this.pDecodeResult.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pDecodeResult.Controls.Add(this.rtbDecodeResult); + this.pDecodeResult.Name = "pDecodeResult"; + // + // rtbDecodeResult + // + this.rtbDecodeResult.BorderStyle = System.Windows.Forms.BorderStyle.None; + resources.ApplyResources(this.rtbDecodeResult, "rtbDecodeResult"); + this.rtbDecodeResult.Name = "rtbDecodeResult"; + this.rtbDecodeResult.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.rtbDecodeResult_LinkClicked); + // // btnDecodeFromFile // resources.ApplyResources(this.btnDecodeFromFile, "btnDecodeFromFile"); @@ -154,19 +183,23 @@ private void InitializeComponent() this.btnDecodeFromScreen.UseVisualStyleBackColor = true; this.btnDecodeFromScreen.Click += new System.EventHandler(this.btnDecodeFromScreen_Click); // - // rtbDecodeResult + // pbQRCode // - this.rtbDecodeResult.BorderStyle = System.Windows.Forms.BorderStyle.None; - resources.ApplyResources(this.rtbDecodeResult, "rtbDecodeResult"); - this.rtbDecodeResult.Name = "rtbDecodeResult"; - this.rtbDecodeResult.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.rtbDecodeResult_LinkClicked); + resources.ApplyResources(this.pbQRCode, "pbQRCode"); + this.pbQRCode.BackColor = System.Drawing.SystemColors.Window; + this.pbQRCode.ContextMenuStrip = this.cmsQR; + this.pbQRCode.Name = "pbQRCode"; + this.pbQRCode.PictureBoxBackColor = System.Drawing.SystemColors.Window; // - // pDecodeResult + // lblQRCodeSize // - resources.ApplyResources(this.pDecodeResult, "pDecodeResult"); - this.pDecodeResult.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pDecodeResult.Controls.Add(this.rtbDecodeResult); - this.pDecodeResult.Name = "pDecodeResult"; + resources.ApplyResources(this.lblQRCodeSize, "lblQRCodeSize"); + this.lblQRCodeSize.Name = "lblQRCodeSize"; + // + // lblQRCodeSizeHint + // + resources.ApplyResources(this.lblQRCodeSizeHint, "lblQRCodeSizeHint"); + this.lblQRCodeSizeHint.Name = "lblQRCodeSizeHint"; // // QRCodeForm // @@ -178,10 +211,10 @@ private void InitializeComponent() this.Shown += new System.EventHandler(this.QRCodeForm_Shown); this.Resize += new System.EventHandler(this.QRCodeForm_Resize); this.cmsQR.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pbQRCode)).EndInit(); this.tcMain.ResumeLayout(false); this.tpEncode.ResumeLayout(false); this.tpEncode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudQRCodeSize)).EndInit(); this.tpDecode.ResumeLayout(false); this.tpDecode.PerformLayout(); this.pDecodeResult.ResumeLayout(false); @@ -195,7 +228,6 @@ private void InitializeComponent() private System.Windows.Forms.ContextMenuStrip cmsQR; private System.Windows.Forms.ToolStripMenuItem tsmiCopy; private System.Windows.Forms.ToolStripMenuItem tsmiSaveAs; - private System.Windows.Forms.PictureBox pbQRCode; private System.Windows.Forms.TabControl tcMain; private System.Windows.Forms.TabPage tpEncode; private System.Windows.Forms.TabPage tpDecode; @@ -207,5 +239,9 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripSeparator tss1; private System.Windows.Forms.RichTextBox rtbDecodeResult; private System.Windows.Forms.Panel pDecodeResult; + private System.Windows.Forms.NumericUpDown nudQRCodeSize; + private HelpersLib.MyPictureBox pbQRCode; + private System.Windows.Forms.Label lblQRCodeSize; + private System.Windows.Forms.Label lblQRCodeSizeHint; } } \ No newline at end of file diff --git a/ShareX/Forms/QRCodeForm.cs b/ShareX/Forms/QRCodeForm.cs index c4f2201f0..d44dcb572 100644 --- a/ShareX/Forms/QRCodeForm.cs +++ b/ShareX/Forms/QRCodeForm.cs @@ -111,7 +111,7 @@ private void ClearQRCode() if (pbQRCode.Image != null) { Image temp = pbQRCode.Image; - pbQRCode.Image = null; + pbQRCode.Reset(); temp.Dispose(); } } @@ -122,9 +122,21 @@ private void EncodeText(string text) { ClearQRCode(); - int size = Math.Min(pbQRCode.Width, pbQRCode.Height); - pbQRCode.Image = TaskHelpers.CreateQRCode(text, size); - pbQRCode.BackColor = Color.White; + int size; + + if (nudQRCodeSize.Value > 0) + { + size = (int)nudQRCodeSize.Value; + } + else + { + size = Math.Min(pbQRCode.Width, pbQRCode.Height); + } + + size = Math.Max(size, 64); + + Image qrCode = TaskHelpers.CreateQRCode(text, size); + pbQRCode.LoadImage(qrCode); } } @@ -184,7 +196,10 @@ private void DecodeFromScreen() private void QRCodeForm_Resize(object sender, EventArgs e) { - EncodeText(txtQRCode.Text); + if (nudQRCodeSize.Value == 0) + { + EncodeText(txtQRCode.Text); + } } private void txtQRCode_TextChanged(object sender, EventArgs e) @@ -192,6 +207,11 @@ private void txtQRCode_TextChanged(object sender, EventArgs e) EncodeText(txtQRCode.Text); } + private void nudQRCodeSize_ValueChanged(object sender, EventArgs e) + { + EncodeText(txtQRCode.Text); + } + private void tsmiCopy_Click(object sender, EventArgs e) { if (pbQRCode.Image != null) diff --git a/ShareX/Forms/QRCodeForm.resx b/ShareX/Forms/QRCodeForm.resx index 9272a9059..fea3ea86b 100644 --- a/ShareX/Forms/QRCodeForm.resx +++ b/ShareX/Forms/QRCodeForm.resx @@ -121,15 +121,6 @@ 17, 17 - - 181, 98 - - - cmsQR - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 180, 22 @@ -157,6 +148,15 @@ Decode + + 181, 98 + + + cmsQR + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Top, Left, Right @@ -172,7 +172,7 @@ Both - 460, 56 + 560, 56 0 @@ -187,34 +187,109 @@ tpEncode + 4 + + + True + + + 221, 72 + + + 18, 13 + + + 5 + + + px + + + lblQRCodeSizeHint + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpEncode + + 0 + + True + + + 5, 72 + + + 74, 13 + + + 4 + + + QR code size: + + + lblQRCodeSize + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpEncode + + + 1 + + + 136, 68 + + + 80, 20 + + + 2 + + + Center + + + nudQRCodeSize + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpEncode + + + 2 + Top, Bottom, Left, Right - 8, 72 + 8, 96 - 460, 404 - - - CenterImage + 560, 430 - 1 + 3 pbQRCode - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ShareX.HelpersLib.MyPictureBox, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null tpEncode - 1 + 3 4, 22 @@ -223,7 +298,7 @@ 5, 5, 5, 5 - 476, 485 + 576, 535 0 @@ -253,11 +328,14 @@ 2, 2 - 454, 406 + 554, 456 0 + + + rtbDecodeResult @@ -277,7 +355,7 @@ 2, 2, 2, 2 - 460, 412 + 560, 462 3 @@ -376,7 +454,7 @@ 3, 3, 3, 3 - 476, 485 + 576, 535 1 @@ -403,7 +481,7 @@ 0, 0 - 484, 511 + 584, 561 2 @@ -427,7 +505,7 @@ 6, 13 - 484, 511 + 584, 561 300, 300 diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index 629119fd4..76c57941f 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -1985,7 +1985,7 @@ public static async Task DownloadAppVeyorBuild() UpdateMessageBox.Start(updateChecker); } - public static Image CreateQRCode(string text, int width, int height) + public static Image CreateQRCode(string text, int size) { if (CheckQRCodeContent(text)) { @@ -1996,9 +1996,12 @@ public static Image CreateQRCode(string text, int width, int height) Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { - Width = width, - Height = height, - CharacterSet = "UTF-8" + Width = size, + Height = size, + CharacterSet = "UTF-8", + PureBarcode = true, + NoPadding = false, + Margin = 1 }, Renderer = new BitmapRenderer() }; @@ -2014,11 +2017,6 @@ public static Image CreateQRCode(string text, int width, int height) return null; } - public static Image CreateQRCode(string text, int size) - { - return CreateQRCode(text, size, size); - } - public static string[] BarcodeScan(Bitmap bmp, bool scanQRCodeOnly = false) { try