Code refactoring

This commit is contained in:
Jaex 2022-02-15 11:01:29 +03:00
parent cd499d73d5
commit 1ea1dacb0f
6 changed files with 84 additions and 97 deletions

View file

@ -166,11 +166,8 @@ public static Rectangle Offset(this Rectangle rect, int offset)
public static Rectangle Scale(this Rectangle rect, float scaleFactor)
{
return new Rectangle(
(int)Math.Round(rect.X * scaleFactor),
(int)Math.Round(rect.Y * scaleFactor),
(int)Math.Round(rect.Width * scaleFactor),
(int)Math.Round(rect.Height * scaleFactor));
return new Rectangle((int)Math.Round(rect.X * scaleFactor), (int)Math.Round(rect.Y * scaleFactor),
(int)Math.Round(rect.Width * scaleFactor), (int)Math.Round(rect.Height * scaleFactor));
}
public static Rectangle LocationOffset(this Rectangle rect, int x, int y)

View file

@ -37,13 +37,7 @@ public class GraphicsQualityManager : IDisposable
private PixelOffsetMode previousPixelOffsetMode;
private Graphics g;
public enum Quality
{
Low,
High,
}
public GraphicsQualityManager(Graphics g, Quality? quality = Quality.High)
public GraphicsQualityManager(Graphics g, bool highQuality)
{
this.g = g;
@ -52,15 +46,11 @@ public GraphicsQualityManager(Graphics g, Quality? quality = Quality.High)
previousSmoothingMode = g.SmoothingMode;
previousPixelOffsetMode = g.PixelOffsetMode;
if (!quality.HasValue)
{
return;
}
if (quality.Value == Quality.High)
if (highQuality)
{
SetHighQuality();
}
else if (quality.Value == Quality.Low)
else
{
SetLowQuality();
}
@ -80,10 +70,10 @@ public void SetLowQuality()
{
if (g != null)
{
g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.SmoothingMode = SmoothingMode.HighSpeed;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
}
}

View file

@ -68,6 +68,24 @@ public sealed class RegionCaptureForm : Form
public Vector2 CanvasCenterOffset { get; set; } = new Vector2(0f, 0f);
public float ZoomFactor
{
get
{
return zoomFactor;
}
set
{
zoomFactor = value.Clamp(0.2f, 6f);
}
}
public bool IsZoomed => Math.Round(ZoomFactor * 100) != 100;
internal Point ScaledClientMousePosition => InputManager.ClientMousePosition.Scale(1 / ZoomFactor);
internal Point ScaledClientMouseVelocity => InputManager.MouseVelocity.Scale(1 / ZoomFactor);
internal Point ScaledClientCenter => new Point((int)Math.Round(ClientArea.Width / 2f / ZoomFactor), (int)Math.Round(ClientArea.Height / 2f / ZoomFactor));
internal ShapeManager ShapeManager { get; private set; }
internal bool IsClosing { get; private set; }
internal FPSManager FPSManager { get; private set; }
@ -90,21 +108,6 @@ public sealed class RegionCaptureForm : Form
private Color canvasBackgroundColor, canvasBorderColor, textColor, textShadowColor, textBackgroundColor, textOuterBorderColor, textInnerBorderColor;
private float zoomFactor = 1;
public float ZoomFactor
{
get { return zoomFactor; }
set { zoomFactor = Math.Max(0.2F, Math.Min(6F, value)); } // constrain range from 20% - 600%
}
public void ZoomTransform(Graphics g, bool invertZoom = false)
{
if (Math.Round(ZoomFactor * 100) != 100)
{
float scale = invertZoom ? 1 / ZoomFactor : ZoomFactor;
g.ScaleTransform(scale, scale);
}
}
public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, Bitmap canvas = null)
{
Mode = mode;
@ -179,9 +182,6 @@ public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, B
InitializeComponent();
}
public Point ScaledClientMousePosition => InputManager.ClientMousePosition.Scale(1 / ZoomFactor);
public Point ScaledClientMouseVelocity => InputManager.MouseVelocity.Scale(1 / ZoomFactor);
private void InitializeComponent()
{
SuspendLayout();
@ -270,7 +270,7 @@ internal void UpdateTitle()
{
if (forceClose) return;
var title = new StringBuilder();
StringBuilder title = new StringBuilder();
if (IsEditorMode)
{
@ -281,6 +281,12 @@ internal void UpdateTitle()
title.AppendFormat(" - {0}x{1}", Canvas.Width, Canvas.Height);
}
if (IsZoomed)
{
int zoomPercentage = (int)Math.Round(ZoomFactor * 100);
title.AppendFormat(" ({0}%)", zoomPercentage);
}
string fileName = Helpers.GetFileNameSafe(ImageFilePath);
if (!string.IsNullOrEmpty(fileName))
@ -292,12 +298,6 @@ internal void UpdateTitle()
{
title.AppendFormat(" - FPS: {0}", FPSManager.FPS.ToString());
}
double zoomPercentage = Math.Round(ZoomFactor * 100);
if (zoomPercentage != 100)
{
title.AppendFormat(" - ZOOM: {0}%", zoomPercentage);
}
}
else
{
@ -436,7 +436,10 @@ private void Pan(int deltaX, int deltaY, bool usePanningStretch = true)
Rectangle limitRectangle = new Rectangle(ClientArea.X + panLimitSize.Width, ClientArea.Y + panLimitSize.Height,
ClientArea.Width - (panLimitSize.Width * 2), ClientArea.Height - (panLimitSize.Height * 2));
limitRectangle = limitRectangle.Scale(1 / ZoomFactor);
if (IsZoomed)
{
limitRectangle = limitRectangle.Scale(1 / ZoomFactor);
}
deltaX = Math.Max(deltaX, limitRectangle.Left - CanvasRectangle.Right);
deltaX = Math.Min(deltaX, limitRectangle.Right - CanvasRectangle.Left);
@ -477,7 +480,7 @@ private void AutomaticPan(Vector2 centerOffset)
if (IsEditorMode)
{
Rectangle canvas = CanvasRectangle.Scale(ZoomFactor);
float x = ClientArea.Width / 2 + centerOffset.X;
float x = ClientArea.Width / 2 + centerOffset.X;
float y = ClientArea.Height / 2 + centerOffset.Y;
float newX = x - canvas.Width / 2;
float newY = y - canvas.Height / 2;
@ -504,6 +507,15 @@ public void CenterCanvas()
AutomaticPan();
}
public void ZoomTransform(Graphics g, bool invertZoom = false)
{
if (IsZoomed)
{
float scale = invertZoom ? 1 / ZoomFactor : ZoomFactor;
g.ScaleTransform(scale, scale);
}
}
public void SetDefaultCursor()
{
if (Cursor != defaultCursor)
@ -551,6 +563,7 @@ private void RegionCaptureForm_Shown(object sender, EventArgs e)
{
editorPanTipAnimation.Start();
}
if (Options.ZoomToFitOnOpen)
{
ZoomToFit();
@ -694,12 +707,10 @@ private void RegionCaptureForm_MouseDown(object sender, MouseEventArgs e)
private void RegionCaptureForm_MouseWheel(object sender, MouseEventArgs e)
{
if (!IsEditorMode || !ModifierKeys.HasFlag(Keys.Control))
if (IsEditorMode && ModifierKeys == Keys.Control)
{
return;
Zoom(e.Delta > 0);
}
Zoom(e.Delta > 0);
}
private void Zoom(bool closer, bool atMouse = true)
@ -718,18 +729,9 @@ private void Zoom(bool closer, bool atMouse = true)
private void ZoomToFit()
{
ZoomFactor = Math.Min((float)ClientArea.Width/CanvasRectangle.Width, (float)ClientArea.Height/CanvasRectangle.Height);
CenterCanvas();
}
ZoomFactor = Math.Min((float)ClientArea.Width / CanvasRectangle.Width, (float)ClientArea.Height / CanvasRectangle.Height);
private Point ScaledClientCenter
{
get
{
return new Point(
(int)Math.Round(ClientArea.Width / 2f / ZoomFactor),
(int)Math.Round(ClientArea.Height / 2f / ZoomFactor));
}
CenterCanvas();
}
private void MonitorKey(int index)
@ -868,14 +870,11 @@ protected override void OnPaint(PaintEventArgs e)
{
Invalidate();
}
g.PixelOffsetMode = PixelOffsetMode.Default;
g.InterpolationMode = InterpolationMode.Default;
}
private void DrawBackground(Graphics g)
{
using (GraphicsQualityManager quality = new GraphicsQualityManager(g, GraphicsQualityManager.Quality.Low))
using (GraphicsQualityManager quality = new GraphicsQualityManager(g, false))
{
g.CompositingMode = CompositingMode.SourceCopy;
g.DrawImage(backgroundBrush.Image, CanvasRectangle);
@ -1309,7 +1308,7 @@ private void DrawCursorGraphics(Graphics g)
}
else
{
using (GraphicsQualityManager quality = new GraphicsQualityManager(g))
using (GraphicsQualityManager quality = new GraphicsQualityManager(g, true))
using (TextureBrush brush = new TextureBrush(magnifier))
{
brush.TranslateTransform(x, y + magnifierPosition);

View file

@ -90,8 +90,8 @@ public class RegionCaptureOptions
// Image editor
public ImageEditorStartMode ImageEditorStartMode = ImageEditorStartMode.AutoSize;
public bool ZoomToFitOnOpen = false;
public WindowState ImageEditorWindowState = new WindowState();
public bool ZoomToFitOnOpen = false;
public bool EditorAutoCopyImage = false;
public bool AutoCloseEditorOnTask = false;
public bool ShowEditorPanTip = true;

View file

@ -60,13 +60,13 @@ public void Update()
if (Orientation == Orientation.Horizontal)
{
isScrollbarNeeded = form.CanvasRectangle.Left < form.ClientArea.Left
|| (form.CanvasRectangle.Right * form.ZoomFactor) > form.ClientArea.Right;
isScrollbarNeeded = form.CanvasRectangle.Left < form.ClientArea.Left ||
(form.CanvasRectangle.Right * form.ZoomFactor) > form.ClientArea.Right;
}
else
{
isScrollbarNeeded = form.CanvasRectangle.Top < form.ClientArea.Top
|| (form.CanvasRectangle.Bottom * form.ZoomFactor) > form.ClientArea.Bottom;
isScrollbarNeeded = form.CanvasRectangle.Top < form.ClientArea.Top ||
(form.CanvasRectangle.Bottom * form.ZoomFactor) > form.ClientArea.Bottom;
}
Visible = isScrollbarNeeded || IsDragging;
@ -147,8 +147,9 @@ public override void OnDraw(Graphics g)
using (Brush trackBrush = new SolidBrush(TrackColor))
using (Brush thumbBrush = new SolidBrush(thumbColor))
{
var savedTransform = g.Transform;
Matrix savedTransform = g.Transform;
form.ZoomTransform(g, true);
if (IsCapsule)
{
g.SmoothingMode = SmoothingMode.HighQuality;
@ -165,6 +166,7 @@ public override void OnDraw(Graphics g)
g.FillRectangle(trackBrush, Rectangle);
g.FillRectangle(thumbBrush, ThumbRectangle);
}
g.Transform = savedTransform;
}
}

View file

@ -501,36 +501,35 @@ private void form_MouseDoubleClick(object sender, MouseEventArgs e)
private void form_MouseWheel(object sender, MouseEventArgs e)
{
if ((Control.ModifierKeys & Keys.Control) != 0)
if (Control.ModifierKeys == Keys.None)
{
return;
}
if (e.Delta > 0)
{
if (Options.ShowMagnifier)
if (e.Delta > 0)
{
Options.MagnifierPixelCount = Math.Min(Options.MagnifierPixelCount + 2, RegionCaptureOptions.MagnifierPixelCountMaximum);
if (Options.ShowMagnifier)
{
Options.MagnifierPixelCount = Math.Min(Options.MagnifierPixelCount + 2, RegionCaptureOptions.MagnifierPixelCountMaximum);
}
else
{
Options.ShowMagnifier = true;
}
}
else
else if (e.Delta < 0)
{
Options.ShowMagnifier = true;
int magnifierPixelCount = Options.MagnifierPixelCount - 2;
if (magnifierPixelCount < RegionCaptureOptions.MagnifierPixelCountMinimum)
{
magnifierPixelCount = RegionCaptureOptions.MagnifierPixelCountMinimum;
Options.ShowMagnifier = false;
}
Options.MagnifierPixelCount = magnifierPixelCount;
}
}
else if (e.Delta < 0)
{
int magnifierPixelCount = Options.MagnifierPixelCount - 2;
if (magnifierPixelCount < RegionCaptureOptions.MagnifierPixelCountMinimum)
{
magnifierPixelCount = RegionCaptureOptions.MagnifierPixelCountMinimum;
Options.ShowMagnifier = false;
}
Options.MagnifierPixelCount = magnifierPixelCount;
}
if (Form.IsAnnotationMode)
{
tsmiShowMagnifier.Checked = Options.ShowMagnifier;
tslnudMagnifierPixelCount.Content.Value = Options.MagnifierPixelCount;
if (Form.IsAnnotationMode)
{
tsmiShowMagnifier.Checked = Options.ShowMagnifier;
tslnudMagnifierPixelCount.Content.Value = Options.MagnifierPixelCount;
}
}
}