diff --git a/ShareX.ScreenCaptureLib/Forms/BaseRegionForm.cs b/ShareX.ScreenCaptureLib/Forms/BaseRegionForm.cs index 195a5939e..e4e9d45ba 100644 --- a/ShareX.ScreenCaptureLib/Forms/BaseRegionForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/BaseRegionForm.cs @@ -107,10 +107,15 @@ private void InitializeComponent() ResumeLayout(false); } - /// Must be called before show form - public virtual void Prepare() + public void Prepare() { - backgroundImage = Screenshot.CaptureFullscreen(); + Prepare(new Screenshot()); + } + + /// Must be called before show form + public virtual void Prepare(Screenshot screenshot) + { + backgroundImage = screenshot.CaptureFullscreen(); if (Config.UseDimming) { diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegionAnnotateForm.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegionAnnotateForm.cs index 69396e15a..df7753683 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegionAnnotateForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegionAnnotateForm.cs @@ -72,11 +72,11 @@ public class RectangleRegionAnnotateForm : Form private Stopwatch penTimer; private Font infoFont; - public RectangleRegionAnnotateForm(RectangleAnnotateOptions options) + public RectangleRegionAnnotateForm(Screenshot screenshot, RectangleAnnotateOptions options) { Options = options; - backgroundImage = Screenshot.CaptureFullscreen(); + backgroundImage = screenshot.CaptureFullscreen(); borderDotPen = new Pen(Color.Black, 1); borderDotPen2 = new Pen(Color.White, 1); borderDotPen2.DashPattern = new float[] { 5, 5 }; diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegionForm.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegionForm.cs index 06615b663..feb18756b 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegionForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegionForm.cs @@ -122,9 +122,9 @@ private void CopyAreaInfo() ClipboardHelpers.CopyText(clipboardText); } - public override void Prepare() + public override void Prepare(Screenshot screenshot) { - base.Prepare(); + base.Prepare(screenshot); if (Config != null) { diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegionLightForm.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegionLightForm.cs index 8dddb44bd..36ce714ee 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegionLightForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegionLightForm.cs @@ -57,9 +57,9 @@ public class RectangleRegionLightForm : Form private bool isMouseDown; private Stopwatch penTimer; - public RectangleRegionLightForm() + public RectangleRegionLightForm(Screenshot screenshot) { - backgroundImage = Screenshot.CaptureFullscreen(); + backgroundImage = screenshot.CaptureFullscreen(); backgroundBrush = new TextureBrush(backgroundImage); borderDotPen = new Pen(Color.Black, 1); borderDotPen2 = new Pen(Color.White, 1); diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegionTransparentForm.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegionTransparentForm.cs index eded30ce6..f5247e2a4 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegionTransparentForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegionTransparentForm.cs @@ -158,13 +158,13 @@ private void RectangleTransparent_MouseUp(object sender, MouseEventArgs e) } } - public Image GetAreaImage() + public Image GetAreaImage(Screenshot screenshot) { Rectangle rect = SelectionRectangle0Based; if (rect.Width > 0 && rect.Height > 0) { - return Screenshot.CaptureRectangle(SelectionRectangle); + return screenshot.CaptureRectangle(SelectionRectangle); } return null; diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs index bc0949abf..a16f08638 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs @@ -313,8 +313,8 @@ private void captureTimer_Tick(object sender, EventArgs e) } } - Screenshot.CaptureCursor = false; - Image image = Screenshot.CaptureRectangle(selectedRectangle); + Screenshot screenshot = new Screenshot() { CaptureCursor = false }; + Image image = screenshot.CaptureRectangle(selectedRectangle); if (image != null) { diff --git a/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs b/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs index 18c7ded2d..74df3c720 100644 --- a/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs +++ b/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs @@ -96,12 +96,13 @@ private set private int fps, delay, frameCount, previousProgress; private float durationSeconds; + private Screenshot screenshot; private Rectangle captureRectangle; private ImageCache imgCache; private FFmpegHelper ffmpegCli; private bool stopRequest; - public ScreenRecorder(ScreenRecordOutput outputType, ScreencastOptions options, Rectangle captureRectangle) + public ScreenRecorder(ScreenRecordOutput outputType, ScreencastOptions options, Screenshot screenshot, Rectangle captureRectangle) { if (string.IsNullOrEmpty(options.OutputPath)) { @@ -127,6 +128,8 @@ public ScreenRecorder(ScreenRecordOutput outputType, ScreencastOptions options, imgCache = new HardDiskCache(Options); break; } + + this.screenshot = screenshot; } private void UpdateInfo() @@ -164,7 +167,7 @@ private void RecordUsingCache() { Stopwatch timer = Stopwatch.StartNew(); - Image img = Screenshot.CaptureRectangle(CaptureRectangle); + Image img = screenshot.CaptureRectangle(CaptureRectangle); //DebugHelper.WriteLine("Screen capture: " + (int)timer.ElapsedMilliseconds); imgCache.AddImageAsync(img); diff --git a/ShareX.ScreenCaptureLib/Screenshot.cs b/ShareX.ScreenCaptureLib/Screenshot.cs index 925f6af09..324f06d51 100644 --- a/ShareX.ScreenCaptureLib/Screenshot.cs +++ b/ShareX.ScreenCaptureLib/Screenshot.cs @@ -30,16 +30,16 @@ namespace ShareX.ScreenCaptureLib { - public static partial class Screenshot + public partial class Screenshot { - public static bool RemoveOutsideScreenArea = true; - public static bool CaptureCursor = false; - public static bool CaptureClientArea = false; - public static bool CaptureShadow = true; - public static int ShadowOffset = 20; - public static bool AutoHideTaskbar = false; + public bool CaptureCursor { get; set; } = false; + public bool CaptureClientArea { get; set; } = false; + public bool RemoveOutsideScreenArea { get; set; } = true; + public bool CaptureShadow { get; set; } = false; + public int ShadowOffset { get; set; } = 20; + public bool AutoHideTaskbar { get; set; } = false; - public static Image CaptureRectangle(Rectangle rect) + public Image CaptureRectangle(Rectangle rect) { if (RemoveOutsideScreenArea) { @@ -50,14 +50,14 @@ public static Image CaptureRectangle(Rectangle rect) return CaptureRectangleNative(rect, CaptureCursor); } - public static Image CaptureFullscreen() + public Image CaptureFullscreen() { Rectangle bounds = CaptureHelpers.GetScreenBounds(); return CaptureRectangle(bounds); } - public static Image CaptureWindow(IntPtr handle) + public Image CaptureWindow(IntPtr handle) { if (handle.ToInt32() > 0) { @@ -95,26 +95,26 @@ public static Image CaptureWindow(IntPtr handle) return null; } - public static Image CaptureActiveWindow() + public Image CaptureActiveWindow() { IntPtr handle = NativeMethods.GetForegroundWindow(); return CaptureWindow(handle); } - public static Image CaptureActiveMonitor() + public Image CaptureActiveMonitor() { Rectangle bounds = CaptureHelpers.GetActiveScreenBounds(); return CaptureRectangle(bounds); } - public static Image CaptureRectangleNative(Rectangle rect, bool captureCursor = false) + private Image CaptureRectangleNative(Rectangle rect, bool captureCursor = false) { return CaptureRectangleNative(NativeMethods.GetDesktopWindow(), rect, captureCursor); } - public static Image CaptureRectangleNative(IntPtr handle, Rectangle rect, bool captureCursor = false) + private Image CaptureRectangleNative(IntPtr handle, Rectangle rect, bool captureCursor = false) { if (rect.Width == 0 || rect.Height == 0) { @@ -153,7 +153,7 @@ public static Image CaptureRectangleNative(IntPtr handle, Rectangle rect, bool c return img; } - public static Image CaptureRectangleManaged(Rectangle rect) + private Image CaptureRectangleManaged(Rectangle rect) { if (rect.Width == 0 || rect.Height == 0) { diff --git a/ShareX.ScreenCaptureLib/Screenshot_Transparent.cs b/ShareX.ScreenCaptureLib/Screenshot_Transparent.cs index 3cb22cc44..db31e67d3 100644 --- a/ShareX.ScreenCaptureLib/Screenshot_Transparent.cs +++ b/ShareX.ScreenCaptureLib/Screenshot_Transparent.cs @@ -32,9 +32,9 @@ namespace ShareX.ScreenCaptureLib { - public static partial class Screenshot + public partial class Screenshot { - public static Image CaptureWindowTransparent(IntPtr handle) + public Image CaptureWindowTransparent(IntPtr handle) { if (handle.ToInt32() > 0) { @@ -154,14 +154,14 @@ public static Image CaptureWindowTransparent(IntPtr handle) return null; } - public static Image CaptureActiveWindowTransparent() + public Image CaptureActiveWindowTransparent() { IntPtr handle = NativeMethods.GetForegroundWindow(); return CaptureWindowTransparent(handle); } - private static Bitmap CreateTransparentImage(Bitmap whiteBackground, Bitmap blackBackground) + private Bitmap CreateTransparentImage(Bitmap whiteBackground, Bitmap blackBackground) { if (whiteBackground != null && blackBackground != null && whiteBackground.Size == blackBackground.Size) { @@ -202,7 +202,7 @@ private static Bitmap CreateTransparentImage(Bitmap whiteBackground, Bitmap blac return whiteBackground; } - private static Bitmap TrimTransparent(Bitmap bitmap) + private Bitmap TrimTransparent(Bitmap bitmap) { Rectangle source = new Rectangle(0, 0, bitmap.Width, bitmap.Height); Rectangle rect = source; @@ -229,7 +229,7 @@ private static Bitmap TrimTransparent(Bitmap bitmap) return bitmap; } - private static Rectangle TrimTransparentFindX(UnsafeBitmap unsafeBitmap, Rectangle rect) + private Rectangle TrimTransparentFindX(UnsafeBitmap unsafeBitmap, Rectangle rect) { for (int x = rect.X; x < rect.Width; x++) { @@ -246,7 +246,7 @@ private static Rectangle TrimTransparentFindX(UnsafeBitmap unsafeBitmap, Rectang return rect; } - private static Rectangle TrimTransparentFindY(UnsafeBitmap unsafeBitmap, Rectangle rect) + private Rectangle TrimTransparentFindY(UnsafeBitmap unsafeBitmap, Rectangle rect) { for (int y = rect.Y; y < rect.Height; y++) { @@ -263,7 +263,7 @@ private static Rectangle TrimTransparentFindY(UnsafeBitmap unsafeBitmap, Rectang return rect; } - private static Rectangle TrimTransparentFindWidth(UnsafeBitmap unsafeBitmap, Rectangle rect) + private Rectangle TrimTransparentFindWidth(UnsafeBitmap unsafeBitmap, Rectangle rect) { for (int x = rect.Width - 1; x >= rect.X; x--) { @@ -280,7 +280,7 @@ private static Rectangle TrimTransparentFindWidth(UnsafeBitmap unsafeBitmap, Rec return rect; } - private static Rectangle TrimTransparentFindHeight(UnsafeBitmap unsafeBitmap, Rectangle rect) + private Rectangle TrimTransparentFindHeight(UnsafeBitmap unsafeBitmap, Rectangle rect) { for (int y = rect.Height - 1; y >= rect.Y; y--) { @@ -297,7 +297,7 @@ private static Rectangle TrimTransparentFindHeight(UnsafeBitmap unsafeBitmap, Re return rect; } - private static Bitmap QuickTrimTransparent(Bitmap bitmap) + private Bitmap QuickTrimTransparent(Bitmap bitmap) { Rectangle source = new Rectangle(0, 0, bitmap.Width, bitmap.Height); Rectangle rect = source; @@ -356,7 +356,7 @@ private static Bitmap QuickTrimTransparent(Bitmap bitmap) return bitmap; } - private static void TrimShadow(Bitmap bitmap) + private void TrimShadow(Bitmap bitmap) { int sizeLimit = 10; int alphaLimit = 200; @@ -427,7 +427,7 @@ private static void TrimShadow(Bitmap bitmap) #region Not in use - private static byte[,] windows7Corner = new byte[,] + private byte[,] windows7Corner = new byte[,] { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, @@ -436,7 +436,7 @@ private static void TrimShadow(Bitmap bitmap) { 0, 4 } }; - private static byte[,] windowsVistaCorner = new byte[,] + private byte[,] windowsVistaCorner = new byte[,] { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 0, 1 }, { 1, 1 }, @@ -444,7 +444,7 @@ private static void TrimShadow(Bitmap bitmap) { 0, 3 } }; - private static Bitmap RemoveCorners(Image img) + private Bitmap RemoveCorners(Image img) { byte[,] corner; @@ -464,7 +464,7 @@ private static Bitmap RemoveCorners(Image img) return RemoveCorners(img, corner); } - private static Bitmap RemoveCorners(Image img, byte[,] cornerData) + private Bitmap RemoveCorners(Image img, byte[,] cornerData) { Bitmap bmp = new Bitmap(img); diff --git a/ShareX/Forms/ApplicationSettingsForm.cs b/ShareX/Forms/ApplicationSettingsForm.cs index c5bc3fe7e..dd295ced9 100644 --- a/ShareX/Forms/ApplicationSettingsForm.cs +++ b/ShareX/Forms/ApplicationSettingsForm.cs @@ -744,7 +744,7 @@ private void cbDontShowPrintSettingDialog_CheckedChanged(object sender, EventArg private void btnShowImagePrintSettings_Click(object sender, EventArgs e) { - using (Image testImage = Screenshot.CaptureActiveMonitor()) + using (Image testImage = TaskHelpers.GetScreenshot().CaptureActiveMonitor()) using (PrintForm printForm = new PrintForm(testImage, Program.Settings.PrintSettings, true)) { printForm.ShowDialog(); diff --git a/ShareX/Forms/AutoCaptureForm.cs b/ShareX/Forms/AutoCaptureForm.cs index ac3ca1494..51f180cd8 100644 --- a/ShareX/Forms/AutoCaptureForm.cs +++ b/ShareX/Forms/AutoCaptureForm.cs @@ -107,11 +107,12 @@ private void TakeScreenshot() if (!rect.IsEmpty) { - Image img = Screenshot.CaptureRectangle(rect); + TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings(); + + Image img = TaskHelpers.GetScreenshot(taskSettings).CaptureRectangle(rect); if (img != null) { - TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings(); taskSettings.UseDefaultAfterCaptureJob = false; taskSettings.AfterCaptureJob = taskSettings.AfterCaptureJob.Remove(AfterCaptureTasks.AnnotateImage); taskSettings.UseDefaultAdvancedSettings = false; diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index a25aefdb4..875d311e0 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -1964,13 +1964,13 @@ public void CaptureScreenshot(CaptureType captureType, TaskSettings taskSettings switch (captureType) { case CaptureType.Screen: - DoCapture(Screenshot.CaptureFullscreen, CaptureType.Screen, taskSettings, autoHideForm); + DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen, CaptureType.Screen, taskSettings, autoHideForm); break; case CaptureType.ActiveWindow: CaptureActiveWindow(taskSettings, autoHideForm); break; case CaptureType.ActiveMonitor: - DoCapture(Screenshot.CaptureActiveMonitor, CaptureType.ActiveMonitor, taskSettings, autoHideForm); + DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureActiveMonitor, CaptureType.ActiveMonitor, taskSettings, autoHideForm); break; case CaptureType.Rectangle: case CaptureType.Polygon: @@ -2020,12 +2020,6 @@ private void DoCaptureWork(ScreenCaptureDelegate capture, CaptureType captureTyp try { - Screenshot.CaptureCursor = taskSettings.CaptureSettings.ShowCursor; - Screenshot.CaptureShadow = taskSettings.CaptureSettings.CaptureShadow; - Screenshot.ShadowOffset = taskSettings.CaptureSettings.CaptureShadowOffset; - Screenshot.CaptureClientArea = taskSettings.CaptureSettings.CaptureClientArea; - Screenshot.AutoHideTaskbar = taskSettings.CaptureSettings.CaptureAutoHideTaskbar; - img = capture(); } catch (Exception ex) @@ -2084,11 +2078,11 @@ private void CaptureActiveWindow(TaskSettings taskSettings, bool autoHideForm = if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea) { - img = Screenshot.CaptureActiveWindowTransparent(); + img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindowTransparent(); } else { - img = Screenshot.CaptureActiveWindow(); + img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindow(); } img.Tag = new ImageTag @@ -2106,7 +2100,7 @@ private void CaptureCustomRegion(TaskSettings taskSettings, bool autoHideForm) DoCapture(() => { Rectangle regionBounds = taskSettings.CaptureSettings.CaptureCustomRegion; - Image img = Screenshot.CaptureRectangle(regionBounds); + Image img = TaskHelpers.GetScreenshot(taskSettings).CaptureRectangle(regionBounds); return img; }, CaptureType.CustomRegion, taskSettings, autoHideForm); @@ -2130,10 +2124,10 @@ private void CaptureWindow(IntPtr handle, TaskSettings taskSettings = null, bool if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea) { - return Screenshot.CaptureWindowTransparent(handle); + return TaskHelpers.GetScreenshot(taskSettings).CaptureWindowTransparent(handle); } - return Screenshot.CaptureWindow(handle); + return TaskHelpers.GetScreenshot(taskSettings).CaptureWindow(handle); }, CaptureType.Window, taskSettings, autoHideForm); } @@ -2162,7 +2156,7 @@ private void CaptureRegion(CaptureType captureType, TaskSettings taskSettings, b try { form.Config = taskSettings.CaptureSettingsReference.SurfaceOptions; - form.Prepare(); + form.Prepare(TaskHelpers.GetScreenshot(taskSettings)); form.ShowDialog(); img = form.GetResultImage(); @@ -2206,7 +2200,7 @@ private void CaptureRectangleLight(TaskSettings taskSettings = null, bool autoHi { Image img = null; - using (RectangleRegionLightForm rectangleLight = new RectangleRegionLightForm()) + using (RectangleRegionLightForm rectangleLight = new RectangleRegionLightForm(TaskHelpers.GetScreenshot(taskSettings))) { if (rectangleLight.ShowDialog() == DialogResult.OK) { @@ -2235,7 +2229,7 @@ private void CaptureRectangleTransparent(TaskSettings taskSettings = null, bool { if (rectangleTransparent.ShowDialog() == DialogResult.OK) { - img = rectangleTransparent.GetAreaImage(); + img = rectangleTransparent.GetAreaImage(TaskHelpers.GetScreenshot(taskSettings)); if (img != null) { @@ -2256,7 +2250,8 @@ private void CaptureRectangleAnnotate(TaskSettings taskSettings = null, bool aut { Image img = null; - using (RectangleRegionAnnotateForm rectangleAnnotate = new RectangleRegionAnnotateForm(taskSettings.CaptureSettingsReference.RectangleAnnotateOptions)) + using (RectangleRegionAnnotateForm rectangleAnnotate = new RectangleRegionAnnotateForm(TaskHelpers.GetScreenshot(taskSettings), + taskSettings.CaptureSettingsReference.RectangleAnnotateOptions)) { if (rectangleAnnotate.ShowDialog() == DialogResult.OK) { @@ -2282,7 +2277,7 @@ private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = tr { DoCapture(() => { - using (Image screenshot = Screenshot.CaptureFullscreen()) + using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen()) { return RegionCaptureHelpers.ApplyRegionPathToImage(screenshot, BaseRegionForm.LastRegionFillPath, taskSettings.CaptureSettings.SurfaceOptions); } @@ -2298,7 +2293,7 @@ private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = tr { DoCapture(() => { - using (Image screenshot = Screenshot.CaptureFullscreen()) + using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen()) { return ImageHelpers.CropImage(screenshot, RectangleRegionLightForm.LastSelectionRectangle0Based); } @@ -2314,7 +2309,7 @@ private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = tr { DoCapture(() => { - using (Image screenshot = Screenshot.CaptureFullscreen()) + using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen()) { return ImageHelpers.CropImage(screenshot, RectangleRegionTransparentForm.LastSelectionRectangle0Based); } @@ -2330,7 +2325,7 @@ private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = tr { DoCapture(() => { - using (Image screenshot = Screenshot.CaptureFullscreen()) + using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen()) { return ImageHelpers.CropImage(screenshot, RectangleRegionAnnotateForm.LastSelectionRectangle0Based); } @@ -2429,7 +2424,7 @@ private void tsmiMonitorItems_Click(object sender, EventArgs e) Rectangle rectangle = (Rectangle)tsi.Tag; if (!rectangle.IsEmpty) { - DoCapture(() => Screenshot.CaptureRectangle(rectangle), CaptureType.Monitor); + DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor); } } @@ -2502,7 +2497,7 @@ private void tsmiTrayMonitorItems_Click(object sender, EventArgs e) Rectangle rectangle = (Rectangle)tsi.Tag; if (!rectangle.IsEmpty) { - DoCapture(() => Screenshot.CaptureRectangle(rectangle), CaptureType.Monitor, null, false); + DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor, null, false); } } diff --git a/ShareX/ScreenRecordManager.cs b/ShareX/ScreenRecordManager.cs index cb17fd03a..41550285f 100644 --- a/ShareX/ScreenRecordManager.cs +++ b/ShareX/ScreenRecordManager.cs @@ -157,8 +157,6 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t IsRecording = true; - Screenshot.CaptureCursor = taskSettings.CaptureSettings.ScreenRecordShowCursor; - string path = ""; bool abortRequested = false; @@ -181,17 +179,6 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t path = Program.ScreenRecorderCacheFilePath; } - ScreencastOptions options = new ScreencastOptions() - { - FFmpeg = taskSettings.CaptureSettings.FFmpegOptions, - ScreenRecordFPS = taskSettings.CaptureSettings.ScreenRecordFPS, - GIFFPS = taskSettings.CaptureSettings.GIFFPS, - Duration = duration, - OutputPath = path, - CaptureArea = captureRectangle, - DrawCursor = taskSettings.CaptureSettings.ScreenRecordShowCursor - }; - recordForm.ChangeState(ScreenRecordState.BeforeStart); if (taskSettings.CaptureSettings.ScreenRecordAutoStart) @@ -217,7 +204,21 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t if (!abortRequested) { - screenRecorder = new ScreenRecorder(outputType, options, captureRectangle); + ScreencastOptions options = new ScreencastOptions() + { + FFmpeg = taskSettings.CaptureSettings.FFmpegOptions, + ScreenRecordFPS = taskSettings.CaptureSettings.ScreenRecordFPS, + GIFFPS = taskSettings.CaptureSettings.GIFFPS, + Duration = duration, + OutputPath = path, + CaptureArea = captureRectangle, + DrawCursor = taskSettings.CaptureSettings.ScreenRecordShowCursor + }; + + Screenshot screenshot = TaskHelpers.GetScreenshot(taskSettings); + screenshot.CaptureCursor = taskSettings.CaptureSettings.ScreenRecordShowCursor; + + screenRecorder = new ScreenRecorder(outputType, options, screenshot, captureRectangle); screenRecorder.RecordingStarted += () => recordForm.ChangeState(ScreenRecordState.AfterRecordingStart); recordForm.ChangeState(ScreenRecordState.AfterStart); screenRecorder.StartRecording(); diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index f6997561e..d2b9b3088 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -989,5 +989,22 @@ public static Image FindMenuIcon(int index) return null; } + + public static Screenshot GetScreenshot(TaskSettings taskSettings = null) + { + if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings(); + + Screenshot screenshot = new Screenshot() + { + CaptureCursor = taskSettings.CaptureSettings.ShowCursor, + CaptureClientArea = taskSettings.CaptureSettings.CaptureClientArea, + RemoveOutsideScreenArea = true, + CaptureShadow = taskSettings.CaptureSettings.CaptureShadow, + ShadowOffset = taskSettings.CaptureSettings.CaptureShadowOffset, + AutoHideTaskbar = taskSettings.CaptureSettings.CaptureAutoHideTaskbar + }; + + return screenshot; + } } } \ No newline at end of file