Improve performance of the code used to display active thumbnail's borders
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EveOPreview.UI
|
||||
@@ -8,12 +7,6 @@ namespace EveOPreview.UI
|
||||
{
|
||||
#region Private fields
|
||||
private readonly Action<object, MouseEventArgs> _areaClickAction;
|
||||
private bool _isHighlightEnabled;
|
||||
private Color _highlightColor;
|
||||
private int _highlightWidthLeft;
|
||||
private int _highlightWidthTop;
|
||||
private int _highlightWidthRight;
|
||||
private int _highlightWidthBottom;
|
||||
#endregion
|
||||
|
||||
public ThumbnailOverlay(Form owner, Action<object, MouseEventArgs> areaClickAction)
|
||||
@@ -21,9 +14,6 @@ namespace EveOPreview.UI
|
||||
this.Owner = owner;
|
||||
this._areaClickAction = areaClickAction;
|
||||
|
||||
this._isHighlightEnabled = false;
|
||||
this._highlightColor = Color.Red;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
@@ -42,27 +32,6 @@ namespace EveOPreview.UI
|
||||
this.OverlayLabel.Visible = enable;
|
||||
}
|
||||
|
||||
public void SetHighlightWidth(int left, int top, int right, int bottom)
|
||||
{
|
||||
this._highlightWidthLeft = left;
|
||||
this._highlightWidthTop = top;
|
||||
this._highlightWidthRight = right;
|
||||
this._highlightWidthBottom = bottom;
|
||||
}
|
||||
|
||||
public void EnableHighlight(bool enabled, Color color)
|
||||
{
|
||||
if (enabled == this._isHighlightEnabled)
|
||||
{
|
||||
// Nothing to do here
|
||||
return;
|
||||
}
|
||||
|
||||
this._isHighlightEnabled = enabled;
|
||||
this._highlightColor = color;
|
||||
this.Refresh();
|
||||
}
|
||||
|
||||
protected override CreateParams CreateParams
|
||||
{
|
||||
get
|
||||
@@ -72,19 +41,5 @@ namespace EveOPreview.UI
|
||||
return Params;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
|
||||
if (this._isHighlightEnabled)
|
||||
{
|
||||
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle,
|
||||
this._highlightColor, this._highlightWidthLeft, ButtonBorderStyle.Solid,
|
||||
this._highlightColor, this._highlightWidthTop, ButtonBorderStyle.Solid,
|
||||
this._highlightColor, this._highlightWidthRight, ButtonBorderStyle.Solid,
|
||||
this._highlightColor, this._highlightWidthBottom, ButtonBorderStyle.Solid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,10 +203,24 @@ namespace EveOPreview.UI
|
||||
|
||||
public void SetHighlight(bool enabled, Color color, int width)
|
||||
{
|
||||
this._isSizeChanged = this._isSizeChanged || (this._isHighlightEnabled != enabled);
|
||||
this._isHighlightEnabled = enabled;
|
||||
this._highlightWidth = width;
|
||||
this._overlay.EnableHighlight(enabled, color);
|
||||
if (this._isHighlightEnabled == enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
this._isHighlightEnabled = true;
|
||||
this._highlightWidth = width;
|
||||
this.BackColor = color;
|
||||
}
|
||||
else
|
||||
{
|
||||
this._isHighlightEnabled = false;
|
||||
this.BackColor = SystemColors.Control;
|
||||
}
|
||||
|
||||
this._isSizeChanged = true;
|
||||
}
|
||||
|
||||
public void ZoomIn(ViewZoomAnchor anchor, int zoomFactor)
|
||||
@@ -330,11 +344,10 @@ namespace EveOPreview.UI
|
||||
int actualHeight = baseHeight - 2 * this._highlightWidth;
|
||||
double desiredWidth = actualHeight * baseAspectRatio;
|
||||
int actualWidth = (int)Math.Round(desiredWidth, MidpointRounding.AwayFromZero);
|
||||
int highlightWidthLeft = Math.Min(4, (baseWidth - actualWidth) / 2);
|
||||
int highlightWidthRight = Math.Min(4, baseWidth - actualWidth - highlightWidthLeft);
|
||||
int highlightWidthLeft = (baseWidth - actualWidth) / 2;
|
||||
int highlightWidthRight = baseWidth - actualWidth - highlightWidthLeft;
|
||||
|
||||
this._overlay.SetHighlightWidth(highlightWidthLeft, this._highlightWidth, highlightWidthRight, this._highlightWidth);
|
||||
this._thumbnail.rcDestination = new RECT(0 + highlightWidthLeft, 0 + this._highlightWidth, actualWidth + highlightWidthLeft, actualHeight + this._highlightWidth);
|
||||
this._thumbnail.rcDestination = new RECT(0 + highlightWidthLeft, 0 + this._highlightWidth, baseWidth - highlightWidthRight, baseHeight - this._highlightWidth);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -378,8 +391,9 @@ namespace EveOPreview.UI
|
||||
Size overlaySize = this.ClientSize;
|
||||
Point overlayLocation = this.Location;
|
||||
|
||||
overlayLocation.X += (this.Size.Width - this.ClientSize.Width) / 2;
|
||||
overlayLocation.Y += (this.Size.Height - this.ClientSize.Height) - (this.Size.Width - this.ClientSize.Width) / 2;
|
||||
int borderWidth = (this.Size.Width - this.ClientSize.Width) / 2;
|
||||
overlayLocation.X += borderWidth;
|
||||
overlayLocation.Y += (this.Size.Height - this.ClientSize.Height) - borderWidth;
|
||||
|
||||
this._isPositionChanged = false;
|
||||
this._overlay.Size = overlaySize;
|
||||
|
||||
Reference in New Issue
Block a user