From 525a603cf4e9321aa0cfa912ba357a10c77264ca Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 3 Dec 2017 13:46:19 +0300 Subject: [PATCH] Added canvas parameter to RegionCaptureForm constructor that way no need to use Prepare method --- .../Forms/RegionCaptureForm.cs | 21 +++++---- ShareX.ScreenCaptureLib/RegionCaptureTasks.cs | 8 +--- ShareX/CaptureHelpers/CaptureRegion.cs | 46 ++++++------------- 3 files changed, 25 insertions(+), 50 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs index 48c2a9fb7..8bce89d8d 100644 --- a/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs @@ -102,7 +102,7 @@ public Color CurrentColor private Bitmap bmpBackgroundImage; private Cursor defaultCursor; - public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options) + public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, Image canvas = null) { Mode = mode; Options = options; @@ -142,6 +142,8 @@ public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options) textInnerBorderPen = new Pen(Color.FromArgb(150, Color.FromArgb(0, 81, 145))); markerPen = new Pen(Color.FromArgb(200, Color.Red)); canvasBorderPen = new Pen(Color.FromArgb(30, Color.Black)); + + Prepare(canvas); } private void InitializeComponent() @@ -239,19 +241,18 @@ internal void UpdateTitle() Text = text; } - public void Prepare() + private void Prepare(Image canvas = null) { - Prepare(new Screenshot().CaptureFullscreen()); - } + if (canvas == null) + { + canvas = new Screenshot().CaptureFullscreen(); + } - // Must be called before show form - public void Prepare(Image img) - { ShapeManager = new ShapeManager(this); ShapeManager.WindowCaptureMode = !IsEditorMode && Options.DetectWindows; ShapeManager.IncludeControls = Options.DetectControls; - InitBackground(img); + InitBackground(canvas); if (Mode == RegionCaptureMode.OneClick || ShapeManager.WindowCaptureMode) { @@ -267,13 +268,13 @@ public void Prepare(Image img) } } - internal void InitBackground(Image img) + internal void InitBackground(Image canvas) { if (Canvas != null) Canvas.Dispose(); if (backgroundBrush != null) backgroundBrush.Dispose(); if (backgroundHighlightBrush != null) backgroundHighlightBrush.Dispose(); - Canvas = img; + Canvas = canvas; if (IsEditorMode) { diff --git a/ShareX.ScreenCaptureLib/RegionCaptureTasks.cs b/ShareX.ScreenCaptureLib/RegionCaptureTasks.cs index bd57142c0..3d22bc760 100644 --- a/ShareX.ScreenCaptureLib/RegionCaptureTasks.cs +++ b/ShareX.ScreenCaptureLib/RegionCaptureTasks.cs @@ -40,7 +40,6 @@ public static Image GetRegionImage(RegionCaptureOptions options) using (RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.Default, newOptions)) { - form.Prepare(); form.ShowDialog(); return form.GetResultImage(); @@ -54,7 +53,6 @@ public static bool GetRectangleRegion(out Rectangle rect, RegionCaptureOptions o using (RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.Default, newOptions)) { - form.Prepare(); form.ShowDialog(); if (form.Result == RegionResult.Region) @@ -101,7 +99,6 @@ public static PointInfo GetPointInfo(RegionCaptureOptions options) using (RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.ScreenColorPicker, newOptions)) { - form.Prepare(); form.ShowDialog(); if (form.Result == RegionResult.Region) @@ -125,7 +122,6 @@ public static SimpleWindowInfo GetWindowInfo(RegionCaptureOptions options) using (RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.OneClick, newOptions)) { - form.Prepare(); form.ShowDialog(); if (form.Result == RegionResult.Region) @@ -145,7 +141,6 @@ public static void ShowScreenRuler(RegionCaptureOptions options) using (RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.Ruler, newOptions)) { - form.Prepare(); form.ShowDialog(); } } @@ -160,10 +155,9 @@ public static Image AnnotateImage(Image img, string filePath, RegionCaptureOptio { RegionCaptureMode mode = taskMode ? RegionCaptureMode.TaskEditor : RegionCaptureMode.Editor; - using (RegionCaptureForm form = new RegionCaptureForm(mode, options)) + using (RegionCaptureForm form = new RegionCaptureForm(mode, options, img)) { form.ImageFilePath = filePath; - form.Prepare(img); form.ShowDialog(); switch (form.Result) diff --git a/ShareX/CaptureHelpers/CaptureRegion.cs b/ShareX/CaptureHelpers/CaptureRegion.cs index 3e7625d3a..5d3f909d8 100644 --- a/ShareX/CaptureHelpers/CaptureRegion.cs +++ b/ShareX/CaptureHelpers/CaptureRegion.cs @@ -74,36 +74,23 @@ protected ImageInfo ExecuteRegionCapture(TaskSettings taskSettings) mode = RegionCaptureMode.Annotation; } - RegionCaptureForm form = new RegionCaptureForm(mode, taskSettings.CaptureSettingsReference.SurfaceOptions); + Screenshot screenshot = TaskHelpers.GetScreenshot(taskSettings); + screenshot.CaptureCursor = false; + Image img = screenshot.CaptureFullscreen(); - try + CursorData cursorData = null; + + if (taskSettings.CaptureSettings.ShowCursor) { - Screenshot screenshot = TaskHelpers.GetScreenshot(taskSettings); - screenshot.CaptureCursor = false; - Image img = screenshot.CaptureFullscreen(); + cursorData = new CursorData(); + } - CursorData cursorData = null; - - try + using (RegionCaptureForm form = new RegionCaptureForm(mode, taskSettings.CaptureSettingsReference.SurfaceOptions, img)) + { + if (cursorData != null && cursorData.IsValid) { - if (taskSettings.CaptureSettings.ShowCursor) - { - cursorData = new CursorData(); - } - - form.Prepare(img); - - if (cursorData != null && cursorData.IsValid) - { - form.AddCursor(cursorData.Handle, cursorData.Position); - } - } - finally - { - if (cursorData != null) - { - cursorData.Dispose(); - } + form.AddCursor(cursorData.Handle, cursorData.Position); + cursorData.Dispose(); } form.ShowDialog(); @@ -126,13 +113,6 @@ protected ImageInfo ExecuteRegionCapture(TaskSettings taskSettings) lastRegionCaptureType = RegionCaptureType.Default; } } - finally - { - if (form != null) - { - form.Dispose(); - } - } return imageInfo; }