From 1e6df97a8571dbdb31b654b9a498c94d6c2a8c52 Mon Sep 17 00:00:00 2001 From: Jaex Date: Wed, 6 May 2015 00:33:19 +0300 Subject: [PATCH] When rectangle capture is open if you press 1, 2, 3 ... 0 then it will capture monitor with that index (0 means 10. monitor) --- ShareX.HelpersLib/Helpers/ImageHelpers.cs | 6 ++---- ShareX.ScreenCaptureLib/Enums.cs | 3 ++- ShareX.ScreenCaptureLib/Forms/Surface.cs | 18 ++++++++++++++++++ ShareX/Forms/MainForm.cs | 23 +++++++++++++++++++++-- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/ImageHelpers.cs b/ShareX.HelpersLib/Helpers/ImageHelpers.cs index fdc8858a6..ab8d457fb 100644 --- a/ShareX.HelpersLib/Helpers/ImageHelpers.cs +++ b/ShareX.HelpersLib/Helpers/ImageHelpers.cs @@ -206,8 +206,7 @@ public static Image ResizeImageLimit(Image img, int maxPixels) public static Image CropImage(Image img, Rectangle rect) { - if (img != null && rect.X >= 0 && rect.Y >= 0 && rect.Width > 0 && rect.Height > 0 && - new Rectangle(0, 0, img.Width, img.Height).Contains(rect)) + if (img != null && rect.X >= 0 && rect.Y >= 0 && rect.Width > 0 && rect.Height > 0 && new Rectangle(0, 0, img.Width, img.Height).Contains(rect)) { using (Bitmap bmp = new Bitmap(img)) { @@ -220,8 +219,7 @@ public static Image CropImage(Image img, Rectangle rect) public static Bitmap CropBitmap(Bitmap bmp, Rectangle rect) { - if (bmp != null && rect.X >= 0 && rect.Y >= 0 && rect.Width > 0 && rect.Height > 0 && - new Rectangle(0, 0, bmp.Width, bmp.Height).Contains(rect)) + if (bmp != null && rect.X >= 0 && rect.Y >= 0 && rect.Width > 0 && rect.Height > 0 && new Rectangle(0, 0, bmp.Width, bmp.Height).Contains(rect)) { return bmp.Clone(rect, bmp.PixelFormat); } diff --git a/ShareX.ScreenCaptureLib/Enums.cs b/ShareX.ScreenCaptureLib/Enums.cs index 6992fdf6d..b4f827b61 100644 --- a/ShareX.ScreenCaptureLib/Enums.cs +++ b/ShareX.ScreenCaptureLib/Enums.cs @@ -40,7 +40,8 @@ public enum SurfaceResult None, Close, Region, - Fullscreen + Fullscreen, + Monitor } internal enum NodePosition diff --git a/ShareX.ScreenCaptureLib/Forms/Surface.cs b/ShareX.ScreenCaptureLib/Forms/Surface.cs index 910c8350c..c9bd468c1 100644 --- a/ShareX.ScreenCaptureLib/Forms/Surface.cs +++ b/ShareX.ScreenCaptureLib/Forms/Surface.cs @@ -45,6 +45,7 @@ public class Surface : Form public Rectangle ScreenRectangle { get; private set; } public Rectangle ScreenRectangle0Based { get; private set; } public SurfaceResult Result { get; private set; } + public int MonitorIndex { get; private set; } protected List DrawableObjects { get; set; } @@ -132,6 +133,23 @@ private void Surface_Shown(object sender, EventArgs e) private void Surface_KeyUp(object sender, KeyEventArgs e) { + if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) + { + int index = e.KeyCode - Keys.D0; + + if (index == 0) + { + index = 10; + } + + index--; + + MonitorIndex = index; + + Close(SurfaceResult.Monitor); + return; + } + switch (e.KeyCode) { case Keys.Escape: diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index 5e05d32c7..787d09aca 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -1851,13 +1851,32 @@ private void CaptureRegion(CaptureType captureType, TaskSettings taskSettings, b if (surface.Result == SurfaceResult.Region) { - img = surface.GetRegionImage(); - screenshot.Dispose(); + using (screenshot) + { + img = surface.GetRegionImage(); + } } else if (surface.Result == SurfaceResult.Fullscreen) { img = screenshot; } + else if (surface.Result == SurfaceResult.Monitor) + { + int index = surface.MonitorIndex; + + Screen[] screens = Screen.AllScreens; + + if (index < screens.Length) + { + Screen screen = screens[index]; + Rectangle screenRect = CaptureHelpers.ScreenToClient(screen.Bounds); + + using (screenshot) + { + img = ImageHelpers.CropImage(screenshot, screenRect); + } + } + } if (img != null) {