Renaming and tidying region capture codes

This commit is contained in:
Jaex 2016-05-15 10:12:53 +03:00
parent a57be07c66
commit 8ddf91f57c
13 changed files with 172 additions and 182 deletions

View file

@ -45,7 +45,7 @@ public enum ScreenRecordGIFEncoding // Localized
OctreeQuantizer
}
public enum SurfaceResult
public enum RegionResult
{
None,
Close,

View file

@ -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();

View file

@ -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))

View file

@ -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);
}
}
}

View file

@ -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;
}
}
}

View file

@ -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);
}
}
}

View file

@ -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;
}

View file

@ -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)
{

View file

@ -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;
}
}
}

View file

@ -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
{

View file

@ -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" />

View file

@ -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);
}

View file

@ -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;