mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
Renaming and tidying region capture codes
This commit is contained in:
parent
a57be07c66
commit
8ddf91f57c
13 changed files with 172 additions and 182 deletions
|
@ -45,7 +45,7 @@ public enum ScreenRecordGIFEncoding // Localized
|
|||
OctreeQuantizer
|
||||
}
|
||||
|
||||
public enum SurfaceResult
|
||||
public enum RegionResult
|
||||
{
|
||||
None,
|
||||
Close,
|
||||
|
|
|
@ -37,7 +37,7 @@ You should have received a copy of the GNU General Public License
|
|||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
public abstract class SurfaceForm : Form
|
||||
public abstract class BaseRegionForm : Form
|
||||
{
|
||||
public static GraphicsPath LastRegionFillPath { get; protected set; }
|
||||
public static GraphicsPath LastRegionDrawPath { get; protected set; }
|
||||
|
@ -46,7 +46,7 @@ public abstract class SurfaceForm : Form
|
|||
public int FPS { get; private set; }
|
||||
public Rectangle ScreenRectangle { get; private set; }
|
||||
public Rectangle ScreenRectangle0Based { get; private set; }
|
||||
public SurfaceResult Result { get; private set; }
|
||||
public RegionResult Result { get; private set; }
|
||||
public int MonitorIndex { get; set; }
|
||||
|
||||
protected Image backgroundImage;
|
||||
|
@ -60,7 +60,7 @@ public abstract class SurfaceForm : Form
|
|||
protected bool pause, isKeyAllowed;
|
||||
protected List<DrawableObject> drawableObjects;
|
||||
|
||||
public SurfaceForm()
|
||||
public BaseRegionForm()
|
||||
{
|
||||
ScreenRectangle = CaptureHelpers.GetScreenBounds();
|
||||
ScreenRectangle0Based = CaptureHelpers.ScreenToClient(ScreenRectangle);
|
||||
|
@ -107,9 +107,9 @@ private void InitializeComponent()
|
|||
#if !DEBUG
|
||||
TopMost = true;
|
||||
#endif
|
||||
Shown += Surface_Shown;
|
||||
KeyUp += Surface_KeyUp;
|
||||
MouseDoubleClick += Surface_MouseDoubleClick;
|
||||
Shown += BaseRegionForm_Shown;
|
||||
KeyUp += BaseRegionForm_KeyUp;
|
||||
MouseDoubleClick += BaseRegionForm_MouseDoubleClick;
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
|
@ -120,18 +120,6 @@ public virtual void Prepare()
|
|||
|
||||
if (Config.UseDimming)
|
||||
{
|
||||
/*
|
||||
using (Image darkSurfaceImage = ColorMatrixManager.Contrast(0.9f).Apply(SurfaceImage))
|
||||
{
|
||||
darkBackgroundBrush = new TextureBrush(darkSurfaceImage) { WrapMode = WrapMode.Clamp };
|
||||
}
|
||||
|
||||
using (Image lightSurfaceImage = ColorMatrixManager.Contrast(1.1f).Apply(SurfaceImage))
|
||||
{
|
||||
lightBackgroundBrush = new TextureBrush(lightSurfaceImage) { WrapMode = WrapMode.Clamp };
|
||||
}
|
||||
*/
|
||||
|
||||
using (Bitmap darkBackground = (Bitmap)backgroundImage.Clone())
|
||||
using (Graphics g = Graphics.FromImage(darkBackground))
|
||||
{
|
||||
|
@ -150,12 +138,12 @@ public virtual void Prepare()
|
|||
}
|
||||
}
|
||||
|
||||
private void Surface_Shown(object sender, EventArgs e)
|
||||
private void BaseRegionForm_Shown(object sender, EventArgs e)
|
||||
{
|
||||
this.ForceActivate();
|
||||
}
|
||||
|
||||
private void Surface_KeyUp(object sender, KeyEventArgs e)
|
||||
private void BaseRegionForm_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (!isKeyAllowed && timerStart.ElapsedMilliseconds < 1000)
|
||||
{
|
||||
|
@ -179,16 +167,16 @@ private void Surface_KeyUp(object sender, KeyEventArgs e)
|
|||
switch (e.KeyData)
|
||||
{
|
||||
case Keys.Escape:
|
||||
Close(SurfaceResult.Close);
|
||||
Close(RegionResult.Close);
|
||||
break;
|
||||
case Keys.Space:
|
||||
Close(SurfaceResult.Fullscreen);
|
||||
Close(RegionResult.Fullscreen);
|
||||
break;
|
||||
case Keys.Enter:
|
||||
Close(SurfaceResult.Region);
|
||||
Close(RegionResult.Region);
|
||||
break;
|
||||
case Keys.Oemtilde:
|
||||
Close(SurfaceResult.ActiveMonitor);
|
||||
Close(RegionResult.ActiveMonitor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -204,14 +192,14 @@ private void MonitorKey(int index)
|
|||
|
||||
MonitorIndex = index;
|
||||
|
||||
Close(SurfaceResult.Monitor);
|
||||
Close(RegionResult.Monitor);
|
||||
}
|
||||
|
||||
private void Surface_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
private void BaseRegionForm_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
Close(SurfaceResult.Region);
|
||||
Close(RegionResult.Region);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -256,18 +244,18 @@ protected override void OnPaint(PaintEventArgs e)
|
|||
|
||||
public virtual Image GetResultImage()
|
||||
{
|
||||
if (Result == SurfaceResult.Region)
|
||||
if (Result == RegionResult.Region)
|
||||
{
|
||||
using (Image img = GetOutputImage())
|
||||
{
|
||||
return ShapeCaptureHelpers.GetRegionImage(img, regionFillPath, regionDrawPath, Config);
|
||||
return RegionCaptureHelpers.GetRegionImage(img, regionFillPath, regionDrawPath, Config);
|
||||
}
|
||||
}
|
||||
else if (Result == SurfaceResult.Fullscreen)
|
||||
else if (Result == RegionResult.Fullscreen)
|
||||
{
|
||||
return GetOutputImage();
|
||||
}
|
||||
else if (Result == SurfaceResult.Monitor)
|
||||
else if (Result == RegionResult.Monitor)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
|
||||
|
@ -282,7 +270,7 @@ public virtual Image GetResultImage()
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (Result == SurfaceResult.ActiveMonitor)
|
||||
else if (Result == RegionResult.ActiveMonitor)
|
||||
{
|
||||
Rectangle activeScreenRect = CaptureHelpers.GetActiveScreenBounds0Based();
|
||||
|
||||
|
@ -305,7 +293,7 @@ public virtual WindowInfo GetWindowInfo()
|
|||
return null;
|
||||
}
|
||||
|
||||
public void Close(SurfaceResult result)
|
||||
public void Close(RegionResult result)
|
||||
{
|
||||
Result = result;
|
||||
Close();
|
|
@ -31,7 +31,7 @@ You should have received a copy of the GNU General Public License
|
|||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
public class FreeHandRegionForm : SurfaceForm
|
||||
public class FreeHandRegionForm : BaseRegionForm
|
||||
{
|
||||
private NodeObject lastNode;
|
||||
private List<Point> points;
|
||||
|
@ -61,13 +61,13 @@ protected override void Update()
|
|||
}
|
||||
else
|
||||
{
|
||||
Close(SurfaceResult.Close);
|
||||
Close(RegionResult.Close);
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.QuickCrop && isAreaCreated && InputManager.IsMouseReleased(MouseButtons.Left))
|
||||
{
|
||||
Close(SurfaceResult.Region);
|
||||
Close(RegionResult.Region);
|
||||
}
|
||||
|
||||
if (!isAreaCreated && InputManager.IsMouseDown(MouseButtons.Left))
|
||||
|
|
|
@ -32,7 +32,7 @@ You should have received a copy of the GNU General Public License
|
|||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
public class PolygonRegionForm : SurfaceForm
|
||||
public class PolygonRegionForm : BaseRegionForm
|
||||
{
|
||||
private List<NodeObject> nodes;
|
||||
private bool isAreaCreated;
|
||||
|
@ -41,10 +41,11 @@ public class PolygonRegionForm : SurfaceForm
|
|||
public PolygonRegionForm()
|
||||
{
|
||||
nodes = new List<NodeObject>();
|
||||
MouseDown += PolygonRegionSurface_MouseDown;
|
||||
|
||||
MouseDown += PolygonRegionForm_MouseDown;
|
||||
}
|
||||
|
||||
private void PolygonRegionSurface_MouseDown(object sender, MouseEventArgs e)
|
||||
private void PolygonRegionForm_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
|
@ -82,7 +83,7 @@ private void PolygonRegionSurface_MouseDown(object sender, MouseEventArgs e)
|
|||
}
|
||||
else
|
||||
{
|
||||
Close(SurfaceResult.Close);
|
||||
Close(RegionResult.Close);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ You should have received a copy of the GNU General Public License
|
|||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
public class RectangleRegionForm : SurfaceForm
|
||||
public class RectangleRegionForm : BaseRegionForm
|
||||
{
|
||||
public RectangleRegionMode Mode { get; private set; }
|
||||
|
||||
|
@ -47,11 +47,11 @@ public Color CurrentColor
|
|||
{
|
||||
get
|
||||
{
|
||||
if (bmpSurfaceImage != null && !CurrentPosition.IsEmpty)
|
||||
if (bmpBackgroundImage != null && !CurrentPosition.IsEmpty)
|
||||
{
|
||||
Point position = CaptureHelpers.ScreenToClient(CurrentPosition);
|
||||
|
||||
return bmpSurfaceImage.GetPixel(position.X, position.Y);
|
||||
return bmpBackgroundImage.GetPixel(position.X, position.Y);
|
||||
}
|
||||
|
||||
return Color.Empty;
|
||||
|
@ -61,7 +61,7 @@ public Color CurrentColor
|
|||
public SimpleWindowInfo SelectedWindow { get; private set; }
|
||||
|
||||
private ColorBlinkAnimation colorBlinkAnimation = new ColorBlinkAnimation();
|
||||
private Bitmap bmpSurfaceImage;
|
||||
private Bitmap bmpBackgroundImage;
|
||||
|
||||
public RectangleRegionForm(RectangleRegionMode mode)
|
||||
{
|
||||
|
@ -82,7 +82,7 @@ private void RectangleRegion_MouseDown(object sender, MouseEventArgs e)
|
|||
SelectedWindow = ShapeManager.FindSelectedWindow();
|
||||
}
|
||||
|
||||
Close(SurfaceResult.Region);
|
||||
Close(RegionResult.Region);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ public override void Prepare()
|
|||
|
||||
if (Config.UseCustomInfoText || Mode == RectangleRegionMode.ScreenColorPicker)
|
||||
{
|
||||
bmpSurfaceImage = new Bitmap(backgroundImage);
|
||||
bmpBackgroundImage = new Bitmap(backgroundImage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -690,63 +690,12 @@ protected override Image GetOutputImage()
|
|||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (bmpSurfaceImage != null)
|
||||
if (bmpBackgroundImage != null)
|
||||
{
|
||||
bmpSurfaceImage.Dispose();
|
||||
bmpBackgroundImage.Dispose();
|
||||
}
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect, SurfaceOptions options = null)
|
||||
{
|
||||
using (RectangleRegionForm form = new RectangleRegionForm(RectangleRegionMode.Default))
|
||||
{
|
||||
if (options != null)
|
||||
{
|
||||
form.Config = options;
|
||||
}
|
||||
|
||||
form.Config.DetectWindows = true;
|
||||
form.Config.QuickCrop = true;
|
||||
form.Config.ShowTips = false;
|
||||
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
{
|
||||
if (form.ShapeManager.IsCurrentRegionValid)
|
||||
{
|
||||
rect = CaptureHelpers.ClientToScreen(form.ShapeManager.CurrentRectangle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == SurfaceResult.Fullscreen)
|
||||
{
|
||||
rect = CaptureHelpers.GetScreenBounds();
|
||||
return true;
|
||||
}
|
||||
else if (form.Result == SurfaceResult.Monitor)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
|
||||
if (form.MonitorIndex < screens.Length)
|
||||
{
|
||||
Screen screen = screens[form.MonitorIndex];
|
||||
rect = screen.Bounds;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == SurfaceResult.ActiveMonitor)
|
||||
{
|
||||
rect = CaptureHelpers.GetActiveScreenBounds();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
rect = Rectangle.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -70,8 +70,8 @@ private Rectangle PreviousSelectionRectangle0Based
|
|||
}
|
||||
|
||||
private Timer timer;
|
||||
private Bitmap surface;
|
||||
private Graphics gSurface;
|
||||
private Bitmap backgroundImage;
|
||||
private Graphics gBackgroundImage;
|
||||
private Pen clearPen, borderDotPen, borderDotPen2;
|
||||
private Point currentPosition, positionOnClick;
|
||||
private bool isMouseDown;
|
||||
|
@ -86,13 +86,13 @@ public RectangleRegionTransparentForm()
|
|||
penTimer = Stopwatch.StartNew();
|
||||
ScreenRectangle = CaptureHelpers.GetScreenBounds();
|
||||
|
||||
surface = new Bitmap(ScreenRectangle.Width, ScreenRectangle.Height);
|
||||
gSurface = Graphics.FromImage(surface);
|
||||
gSurface.InterpolationMode = InterpolationMode.NearestNeighbor;
|
||||
gSurface.SmoothingMode = SmoothingMode.HighSpeed;
|
||||
gSurface.CompositingMode = CompositingMode.SourceCopy;
|
||||
gSurface.CompositingQuality = CompositingQuality.HighSpeed;
|
||||
gSurface.Clear(Color.FromArgb(1, 0, 0, 0));
|
||||
backgroundImage = new Bitmap(ScreenRectangle.Width, ScreenRectangle.Height);
|
||||
gBackgroundImage = Graphics.FromImage(backgroundImage);
|
||||
gBackgroundImage.InterpolationMode = InterpolationMode.NearestNeighbor;
|
||||
gBackgroundImage.SmoothingMode = SmoothingMode.HighSpeed;
|
||||
gBackgroundImage.CompositingMode = CompositingMode.SourceCopy;
|
||||
gBackgroundImage.CompositingQuality = CompositingQuality.HighSpeed;
|
||||
gBackgroundImage.Clear(Color.FromArgb(1, 0, 0, 0));
|
||||
|
||||
StartPosition = FormStartPosition.Manual;
|
||||
Bounds = ScreenRectangle;
|
||||
|
@ -119,8 +119,8 @@ protected override void Dispose(bool disposing)
|
|||
if (clearPen != null) clearPen.Dispose();
|
||||
if (borderDotPen != null) borderDotPen.Dispose();
|
||||
if (borderDotPen2 != null) borderDotPen2.Dispose();
|
||||
if (gSurface != null) gSurface.Dispose();
|
||||
if (surface != null) surface.Dispose();
|
||||
if (gBackgroundImage != null) gBackgroundImage.Dispose();
|
||||
if (backgroundImage != null) backgroundImage.Dispose();
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
@ -195,26 +195,27 @@ private void timer_Tick(object sender, EventArgs e)
|
|||
|
||||
try
|
||||
{
|
||||
RefreshSurface();
|
||||
UpdateBackgroundImage();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshSurface()
|
||||
private void UpdateBackgroundImage()
|
||||
{
|
||||
// Clear previous rectangle selection
|
||||
gSurface.DrawRectangleProper(clearPen, PreviousSelectionRectangle0Based);
|
||||
gBackgroundImage.DrawRectangleProper(clearPen, PreviousSelectionRectangle0Based);
|
||||
|
||||
if (isMouseDown)
|
||||
{
|
||||
borderDotPen2.DashOffset = (float)penTimer.Elapsed.TotalSeconds * -15;
|
||||
gSurface.DrawRectangleProper(borderDotPen, SelectionRectangle0Based);
|
||||
gSurface.DrawRectangleProper(borderDotPen2, SelectionRectangle0Based);
|
||||
|
||||
gBackgroundImage.DrawRectangleProper(borderDotPen, SelectionRectangle0Based);
|
||||
gBackgroundImage.DrawRectangleProper(borderDotPen2, SelectionRectangle0Based);
|
||||
}
|
||||
|
||||
SelectBitmap(surface);
|
||||
SelectBitmap(backgroundImage);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -161,7 +161,7 @@ private void SelectRectangle()
|
|||
|
||||
Rectangle rect;
|
||||
|
||||
if (RectangleRegionForm.SelectRegion(out rect))
|
||||
if (RegionCaptureHelpers.SelectRegion(out rect))
|
||||
{
|
||||
selectedRectangle = rect;
|
||||
lblSelectedRectangle.Text = selectedRectangle.ToString();
|
||||
|
@ -196,7 +196,7 @@ private SimpleWindowInfo GetWindowInfo()
|
|||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
if (form.Result == RegionResult.Region)
|
||||
{
|
||||
return form.SelectedWindow;
|
||||
}
|
||||
|
|
|
@ -89,21 +89,21 @@ public bool Visible
|
|||
private NodeObject[] nodes;
|
||||
private Rectangle tempRect;
|
||||
|
||||
public ResizeManager(SurfaceForm surface, ShapeManager shapeManager)
|
||||
public ResizeManager(BaseRegionForm form, ShapeManager shapeManager)
|
||||
{
|
||||
this.shapeManager = shapeManager;
|
||||
|
||||
MinMoveSpeed = surface.Config.MinMoveSpeed;
|
||||
MaxMoveSpeed = surface.Config.MaxMoveSpeed;
|
||||
MinMoveSpeed = form.Config.MinMoveSpeed;
|
||||
MaxMoveSpeed = form.Config.MaxMoveSpeed;
|
||||
|
||||
surface.KeyDown += surface_KeyDown;
|
||||
surface.KeyUp += surface_KeyUp;
|
||||
form.KeyDown += form_KeyDown;
|
||||
form.KeyUp += form_KeyUp;
|
||||
|
||||
nodes = new NodeObject[8];
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
nodes[i] = surface.MakeNode();
|
||||
nodes[i] = form.MakeNode();
|
||||
}
|
||||
|
||||
nodes[(int)NodePosition.BottomRight].Order = 10;
|
||||
|
@ -197,7 +197,7 @@ public void Update()
|
|||
}
|
||||
}
|
||||
|
||||
private void surface_KeyDown(object sender, KeyEventArgs e)
|
||||
private void form_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
|
@ -241,7 +241,7 @@ private void surface_KeyDown(object sender, KeyEventArgs e)
|
|||
}
|
||||
}
|
||||
|
||||
private void surface_KeyUp(object sender, KeyEventArgs e)
|
||||
private void form_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
|
|
|
@ -27,14 +27,15 @@ You should have received a copy of the GNU General Public License
|
|||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
public static class ShapeCaptureHelpers
|
||||
public static class RegionCaptureHelpers
|
||||
{
|
||||
public static Image GetRegionImage(Image surfaceImage, GraphicsPath regionFillPath, GraphicsPath regionDrawPath, SurfaceOptions options)
|
||||
public static Image GetRegionImage(Image backgroundImage, GraphicsPath regionFillPath, GraphicsPath regionDrawPath, SurfaceOptions options)
|
||||
{
|
||||
if (surfaceImage != null && regionFillPath != null)
|
||||
if (backgroundImage != null && regionFillPath != null)
|
||||
{
|
||||
Image img;
|
||||
|
||||
|
@ -45,7 +46,7 @@ public static Image GetRegionImage(Image surfaceImage, GraphicsPath regionFillPa
|
|||
using (GraphicsPath gp = (GraphicsPath)regionFillPath.Clone())
|
||||
{
|
||||
MoveGraphicsPath(gp, -Math.Max(0, regionArea.X), -Math.Max(0, regionArea.Y));
|
||||
img = ImageHelpers.CropImage(surfaceImage, newRegionArea, gp);
|
||||
img = ImageHelpers.CropImage(backgroundImage, newRegionArea, gp);
|
||||
|
||||
if (options.DrawBorder)
|
||||
{
|
||||
|
@ -74,5 +75,56 @@ private static void MoveGraphicsPath(GraphicsPath gp, int x, int y)
|
|||
gp.Transform(matrix);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect, SurfaceOptions options = null)
|
||||
{
|
||||
using (RectangleRegionForm form = new RectangleRegionForm(RectangleRegionMode.Default))
|
||||
{
|
||||
if (options != null)
|
||||
{
|
||||
form.Config = options;
|
||||
}
|
||||
|
||||
form.Config.DetectWindows = true;
|
||||
form.Config.QuickCrop = true;
|
||||
form.Config.ShowTips = false;
|
||||
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (form.Result == RegionResult.Region)
|
||||
{
|
||||
if (form.ShapeManager.IsCurrentRegionValid)
|
||||
{
|
||||
rect = CaptureHelpers.ClientToScreen(form.ShapeManager.CurrentRectangle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == RegionResult.Fullscreen)
|
||||
{
|
||||
rect = CaptureHelpers.GetScreenBounds();
|
||||
return true;
|
||||
}
|
||||
else if (form.Result == RegionResult.Monitor)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
|
||||
if (form.MonitorIndex < screens.Length)
|
||||
{
|
||||
Screen screen = screens[form.MonitorIndex];
|
||||
rect = screen.Bounds;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == RegionResult.ActiveMonitor)
|
||||
{
|
||||
rect = CaptureHelpers.GetActiveScreenBounds();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
rect = Rectangle.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -177,11 +177,11 @@ public ShapeManager(RectangleRegionForm form)
|
|||
|
||||
ResizeManager = new ResizeManager(form, this);
|
||||
|
||||
form.MouseDown += surface_MouseDown;
|
||||
form.MouseUp += surface_MouseUp;
|
||||
form.KeyDown += surface_KeyDown;
|
||||
form.KeyUp += surface_KeyUp;
|
||||
form.MouseWheel += surface_MouseWheel;
|
||||
form.MouseDown += form_MouseDown;
|
||||
form.MouseUp += form_MouseUp;
|
||||
form.KeyDown += form_KeyDown;
|
||||
form.KeyUp += form_KeyUp;
|
||||
form.MouseWheel += form_MouseWheel;
|
||||
|
||||
if (form.Mode == RectangleRegionMode.Annotation)
|
||||
{
|
||||
|
@ -189,20 +189,7 @@ public ShapeManager(RectangleRegionForm form)
|
|||
}
|
||||
|
||||
CurrentShape = null;
|
||||
//CurrentShapeType = config.CurrentShapeType;
|
||||
CurrentShapeType = ShapeType.RegionRectangle;
|
||||
}
|
||||
|
||||
private void surface_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Delta > 0)
|
||||
{
|
||||
CurrentShapeType = CurrentShapeType.Previous<ShapeType>();
|
||||
}
|
||||
else if (e.Delta < 0)
|
||||
{
|
||||
CurrentShapeType = CurrentShapeType.Next<ShapeType>();
|
||||
}
|
||||
CurrentShapeType = ShapeType.RegionRectangle; //config.CurrentShapeType;
|
||||
}
|
||||
|
||||
private void CreateContextMenu()
|
||||
|
@ -211,7 +198,7 @@ private void CreateContextMenu()
|
|||
|
||||
ToolStripMenuItem tsmiCancelCapture = new ToolStripMenuItem("Cancel capture");
|
||||
tsmiCancelCapture.Image = Resources.prohibition;
|
||||
tsmiCancelCapture.Click += (sender, e) => form.Close(SurfaceResult.Close);
|
||||
tsmiCancelCapture.Click += (sender, e) => form.Close(RegionResult.Close);
|
||||
cmsContextMenu.Items.Add(tsmiCancelCapture);
|
||||
|
||||
ToolStripMenuItem tsmiCloseMenu = new ToolStripMenuItem("Close menu");
|
||||
|
@ -408,12 +395,12 @@ private void CreateContextMenu()
|
|||
|
||||
ToolStripMenuItem tsmiFullscreenCapture = new ToolStripMenuItem("Capture fullscreen");
|
||||
tsmiFullscreenCapture.Image = Resources.layer_fullscreen;
|
||||
tsmiFullscreenCapture.Click += (sender, e) => form.Close(SurfaceResult.Fullscreen);
|
||||
tsmiFullscreenCapture.Click += (sender, e) => form.Close(RegionResult.Fullscreen);
|
||||
cmsContextMenu.Items.Add(tsmiFullscreenCapture);
|
||||
|
||||
ToolStripMenuItem tsmiActiveMonitorCapture = new ToolStripMenuItem("Capture active monitor");
|
||||
tsmiActiveMonitorCapture.Image = Resources.monitor;
|
||||
tsmiActiveMonitorCapture.Click += (sender, e) => form.Close(SurfaceResult.ActiveMonitor);
|
||||
tsmiActiveMonitorCapture.Click += (sender, e) => form.Close(RegionResult.ActiveMonitor);
|
||||
cmsContextMenu.Items.Add(tsmiActiveMonitorCapture);
|
||||
|
||||
ToolStripMenuItem tsmiMonitorCapture = new ToolStripMenuItem("Capture monitor");
|
||||
|
@ -433,7 +420,7 @@ private void CreateContextMenu()
|
|||
tsmi.Click += (sender, e) =>
|
||||
{
|
||||
form.MonitorIndex = index;
|
||||
form.Close(SurfaceResult.Monitor);
|
||||
form.Close(RegionResult.Monitor);
|
||||
};
|
||||
tsmiMonitorCapture.DropDownItems.Add(tsmi);
|
||||
}
|
||||
|
@ -567,7 +554,7 @@ private void CreateContextMenu()
|
|||
};
|
||||
}
|
||||
|
||||
private void surface_MouseDown(object sender, MouseEventArgs e)
|
||||
private void form_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
|
@ -578,7 +565,7 @@ private void surface_MouseDown(object sender, MouseEventArgs e)
|
|||
}
|
||||
}
|
||||
|
||||
private void surface_MouseUp(object sender, MouseEventArgs e)
|
||||
private void form_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
|
@ -601,12 +588,12 @@ private void surface_MouseUp(object sender, MouseEventArgs e)
|
|||
}
|
||||
else
|
||||
{
|
||||
form.Close(SurfaceResult.Close);
|
||||
form.Close(RegionResult.Close);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void surface_KeyDown(object sender, KeyEventArgs e)
|
||||
private void form_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
|
@ -664,7 +651,7 @@ private void surface_KeyDown(object sender, KeyEventArgs e)
|
|||
}
|
||||
}
|
||||
|
||||
private void surface_KeyUp(object sender, KeyEventArgs e)
|
||||
private void form_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
|
@ -685,6 +672,18 @@ private void surface_KeyUp(object sender, KeyEventArgs e)
|
|||
}
|
||||
}
|
||||
|
||||
private void form_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Delta > 0)
|
||||
{
|
||||
CurrentShapeType = CurrentShapeType.Previous<ShapeType>();
|
||||
}
|
||||
else if (e.Delta < 0)
|
||||
{
|
||||
CurrentShapeType = CurrentShapeType.Next<ShapeType>();
|
||||
}
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
BaseShape shape = CurrentShape;
|
||||
|
@ -850,7 +849,7 @@ private void EndRegionSelection()
|
|||
else if (config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(SurfaceResult.Region);
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -865,7 +864,7 @@ private void EndRegionSelection()
|
|||
if (config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(SurfaceResult.Region);
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
<Compile Include="Forms\RectangleRegionLightForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\SurfaceForm.cs">
|
||||
<Compile Include="Forms\BaseRegionForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Screencast\ImageCache.cs" />
|
||||
|
|
|
@ -1688,9 +1688,9 @@ private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e)
|
|||
|
||||
private delegate Image ScreenCaptureDelegate();
|
||||
|
||||
private enum LastRegionCaptureType { Surface, Light, Transparent }
|
||||
private enum LastRegionCaptureType { Default, Light, Transparent }
|
||||
|
||||
private LastRegionCaptureType lastRegionCaptureType = LastRegionCaptureType.Surface;
|
||||
private LastRegionCaptureType lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
|
||||
private void InitHotkeys()
|
||||
{
|
||||
|
@ -2091,20 +2091,20 @@ private void CaptureWindow(IntPtr handle, TaskSettings taskSettings = null, bool
|
|||
|
||||
private void CaptureRegion(CaptureType captureType, TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
SurfaceForm surface;
|
||||
BaseRegionForm form;
|
||||
|
||||
switch (captureType)
|
||||
{
|
||||
default:
|
||||
case CaptureType.Rectangle:
|
||||
RectangleRegionMode mode = taskSettings.CaptureSettings.SurfaceOptions.AnnotationEnabled ? RectangleRegionMode.Annotation : RectangleRegionMode.Default;
|
||||
surface = new RectangleRegionForm(mode);
|
||||
form = new RectangleRegionForm(mode);
|
||||
break;
|
||||
case CaptureType.Polygon:
|
||||
surface = new PolygonRegionForm();
|
||||
form = new PolygonRegionForm();
|
||||
break;
|
||||
case CaptureType.Freehand:
|
||||
surface = new FreeHandRegionForm();
|
||||
form = new FreeHandRegionForm();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2114,17 +2114,17 @@ private void CaptureRegion(CaptureType captureType, TaskSettings taskSettings, b
|
|||
|
||||
try
|
||||
{
|
||||
surface.Config = taskSettings.CaptureSettingsReference.SurfaceOptions;
|
||||
surface.Prepare();
|
||||
surface.ShowDialog();
|
||||
form.Config = taskSettings.CaptureSettingsReference.SurfaceOptions;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
img = surface.GetResultImage();
|
||||
img = form.GetResultImage();
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
if (surface.Result == SurfaceResult.Region && taskSettings.UploadSettings.RegionCaptureUseWindowPattern)
|
||||
if (form.Result == RegionResult.Region && taskSettings.UploadSettings.RegionCaptureUseWindowPattern)
|
||||
{
|
||||
WindowInfo windowInfo = surface.GetWindowInfo();
|
||||
WindowInfo windowInfo = form.GetWindowInfo();
|
||||
|
||||
if (windowInfo != null)
|
||||
{
|
||||
|
@ -2136,14 +2136,14 @@ private void CaptureRegion(CaptureType captureType, TaskSettings taskSettings, b
|
|||
}
|
||||
}
|
||||
|
||||
lastRegionCaptureType = LastRegionCaptureType.Surface;
|
||||
lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (surface != null)
|
||||
if (form != null)
|
||||
{
|
||||
surface.Dispose();
|
||||
form.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2205,14 +2205,14 @@ private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = tr
|
|||
{
|
||||
switch (lastRegionCaptureType)
|
||||
{
|
||||
case LastRegionCaptureType.Surface:
|
||||
if (SurfaceForm.LastRegionFillPath != null)
|
||||
case LastRegionCaptureType.Default:
|
||||
if (BaseRegionForm.LastRegionFillPath != null)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = Screenshot.CaptureFullscreen())
|
||||
{
|
||||
return ShapeCaptureHelpers.GetRegionImage(screenshot, SurfaceForm.LastRegionFillPath, SurfaceForm.LastRegionDrawPath, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
return RegionCaptureHelpers.GetRegionImage(screenshot, BaseRegionForm.LastRegionFillPath, BaseRegionForm.LastRegionDrawPath, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
|
|
|
@ -313,7 +313,7 @@ private static void AddExternalProgramFromRegistry(TaskSettings taskSettings, st
|
|||
|
||||
public static bool SelectRegion(out Rectangle rect, TaskSettings taskSettings)
|
||||
{
|
||||
return RectangleRegionForm.SelectRegion(out rect, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
return RegionCaptureHelpers.SelectRegion(out rect, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
}
|
||||
|
||||
public static PointInfo SelectPointColor()
|
||||
|
@ -327,7 +327,7 @@ public static PointInfo SelectPointColor()
|
|||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
if (form.Result == RegionResult.Region)
|
||||
{
|
||||
PointInfo pointInfo = new PointInfo();
|
||||
pointInfo.Position = form.CurrentPosition;
|
||||
|
|
Loading…
Reference in a new issue