From cc3a22465de69b652c9533e4d0f4532ca78648bd Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 31 Dec 2017 21:39:13 +0300 Subject: [PATCH] fixed #3039: Added "Insert image from screen" button to editor image menu --- .../Shapes/ShapeManager.cs | 63 ++++++++++++------- .../Shapes/ShapeManagerMenu.cs | 15 +++-- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs index d2836b7c9..0b826daec 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs @@ -29,6 +29,7 @@ You should have received a copy of the GNU General Public License using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; +using System.Threading; using System.Windows.Forms; namespace ShareX.ScreenCaptureLib @@ -1406,16 +1407,7 @@ private void PasteFromClipboard(bool insertMousePosition) { Image img = ClipboardHelpers.GetImage(); - if (img != null) - { - CurrentTool = ShapeType.DrawingImage; - ImageDrawingShape shape = (ImageDrawingShape)CreateShape(ShapeType.DrawingImage); - shape.Rectangle = new Rectangle(pos.X, pos.Y, 1, 1); - shape.SetImage(img, true); - shape.OnCreated(); - AddShape(shape); - SelectCurrentShape(); - } + InsertImage(img, pos); } else if (Clipboard.ContainsText()) { @@ -1529,7 +1521,7 @@ private void LoadImageFile(string filePath) } } - private void InsertImage() + private void InsertImageFile() { string filePath = ImageHelpers.OpenImageFileDialog(Form); @@ -1537,17 +1529,44 @@ private void InsertImage() { Image img = ImageHelpers.LoadImage(filePath); - if (img != null) - { - CurrentTool = ShapeType.DrawingImage; - ImageDrawingShape shape = (ImageDrawingShape)CreateShape(ShapeType.DrawingImage); - Point pos = Form.ClientArea.Center(); - shape.Rectangle = new Rectangle(pos.X, pos.Y, 1, 1); - shape.SetImage(img, true); - shape.OnCreated(); - AddShape(shape); - SelectCurrentShape(); - } + InsertImage(img, Form.ClientArea.Center()); + } + } + + private void InsertImageFromScreen() + { + Image img; + + try + { + Form.Pause(); + Form.Hide(); + menuForm.Hide(); + Thread.Sleep(250); + + img = RegionCaptureTasks.GetRegionImage(Options); + } + finally + { + Form.Show(); + menuForm.Show(); + Form.Resume(); + } + + InsertImage(img, Form.ClientArea.Center()); + } + + private void InsertImage(Image img, Point pos) + { + if (img != null) + { + CurrentTool = ShapeType.DrawingImage; + ImageDrawingShape shape = (ImageDrawingShape)CreateShape(ShapeType.DrawingImage); + shape.Rectangle = new Rectangle(pos.X, pos.Y, 1, 1); + shape.SetImage(img, true); + shape.OnCreated(); + AddShape(shape); + SelectCurrentShape(); } } diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs index a726245e8..476b8deb6 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs @@ -640,15 +640,20 @@ internal void CreateToolbar() }; tsddbImage.DropDownItems.Add(tsmiNewImage); - ToolStripMenuItem tsmiOpenImage = new ToolStripMenuItem("Open image..."); + ToolStripMenuItem tsmiOpenImage = new ToolStripMenuItem("Open image file..."); tsmiOpenImage.Image = Resources.folder_open_image; tsmiOpenImage.Click += (sender, e) => OpenImageFile(); tsddbImage.DropDownItems.Add(tsmiOpenImage); - ToolStripMenuItem tsmiInsertImage = new ToolStripMenuItem("Insert image..."); - tsmiInsertImage.Image = Resources.image__plus; - tsmiInsertImage.Click += (sender, e) => InsertImage(); - tsddbImage.DropDownItems.Add(tsmiInsertImage); + ToolStripMenuItem tsmiInsertImageFile = new ToolStripMenuItem("Insert image file..."); + tsmiInsertImageFile.Image = Resources.image__plus; + tsmiInsertImageFile.Click += (sender, e) => InsertImageFile(); + tsddbImage.DropDownItems.Add(tsmiInsertImageFile); + + ToolStripMenuItem tsmiInsertImageFromScreen = new ToolStripMenuItem("Insert image from screen..."); + tsmiInsertImageFromScreen.Image = Resources.camera; + tsmiInsertImageFromScreen.Click += (sender, e) => InsertImageFromScreen(); + tsddbImage.DropDownItems.Add(tsmiInsertImageFromScreen); tsddbImage.DropDownItems.Add(new ToolStripSeparator());