Improve performance of the code used to display active thumbnail's borders
This commit is contained in:
		| @@ -67,21 +67,7 @@ namespace EveOPreview.Configuration | |||||||
|  |  | ||||||
| 		public bool EnableActiveClientHighlight { get; set; } | 		public bool EnableActiveClientHighlight { get; set; } | ||||||
|  |  | ||||||
| 		public Color ActiveClientHighlightColor | 		public Color ActiveClientHighlightColor { get; set; } | ||||||
| 		{ |  | ||||||
| 			get |  | ||||||
| 			{ |  | ||||||
| 				return this._activeClientHighlightColor; |  | ||||||
| 			} |  | ||||||
| 			set |  | ||||||
| 			{ |  | ||||||
| 				// Some WinForms magic |  | ||||||
| 				// True Black color cannot be used as highlight frame color |  | ||||||
| 				// So a somewhat less-Black one is used |  | ||||||
| 				this._activeClientHighlightColor = (value != Color.Black) ? value : Color.FromArgb(1, 1, 1); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		private Color _activeClientHighlightColor; |  | ||||||
|  |  | ||||||
| 		public int ActiveClientHighlightThickness { get; set; } | 		public int ActiveClientHighlightThickness { get; set; } | ||||||
|  |  | ||||||
| @@ -184,7 +170,7 @@ namespace EveOPreview.Configuration | |||||||
| 				ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height)); | 				ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height)); | ||||||
| 			this.ThumbnailOpacity = ThumbnailConfig.ApplyRestrictions((int)(this.ThumbnailOpacity * 100.00), 20, 100) / 100.00; | 			this.ThumbnailOpacity = ThumbnailConfig.ApplyRestrictions((int)(this.ThumbnailOpacity * 100.00), 20, 100) / 100.00; | ||||||
| 			this.ThumbnailZoomFactor = ThumbnailConfig.ApplyRestrictions(this.ThumbnailZoomFactor, 2, 10); | 			this.ThumbnailZoomFactor = ThumbnailConfig.ApplyRestrictions(this.ThumbnailZoomFactor, 2, 10); | ||||||
| 			this.ActiveClientHighlightThickness = ThumbnailConfig.ApplyRestrictions(this.ActiveClientHighlightThickness, 1, 3); | 			this.ActiveClientHighlightThickness = ThumbnailConfig.ApplyRestrictions(this.ActiveClientHighlightThickness, 1, 6); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		private static int ApplyRestrictions(int value, int minimum, int maximum) | 		private static int ApplyRestrictions(int value, int minimum, int maximum) | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| using System; | using System; | ||||||
| using System.Drawing; |  | ||||||
| using System.Windows.Forms; | using System.Windows.Forms; | ||||||
|  |  | ||||||
| namespace EveOPreview.UI | namespace EveOPreview.UI | ||||||
| @@ -8,12 +7,6 @@ namespace EveOPreview.UI | |||||||
| 	{ | 	{ | ||||||
| 		#region Private fields | 		#region Private fields | ||||||
| 		private readonly Action<object, MouseEventArgs> _areaClickAction; | 		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 | 		#endregion | ||||||
|  |  | ||||||
| 		public ThumbnailOverlay(Form owner, Action<object, MouseEventArgs> areaClickAction) | 		public ThumbnailOverlay(Form owner, Action<object, MouseEventArgs> areaClickAction) | ||||||
| @@ -21,9 +14,6 @@ namespace EveOPreview.UI | |||||||
| 			this.Owner = owner; | 			this.Owner = owner; | ||||||
| 			this._areaClickAction = areaClickAction; | 			this._areaClickAction = areaClickAction; | ||||||
|  |  | ||||||
| 			this._isHighlightEnabled = false; |  | ||||||
| 			this._highlightColor = Color.Red; |  | ||||||
|  |  | ||||||
| 			InitializeComponent(); | 			InitializeComponent(); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -42,27 +32,6 @@ namespace EveOPreview.UI | |||||||
| 			this.OverlayLabel.Visible = enable; | 			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 | 		protected override CreateParams CreateParams | ||||||
| 		{ | 		{ | ||||||
| 			get | 			get | ||||||
| @@ -72,19 +41,5 @@ namespace EveOPreview.UI | |||||||
| 				return Params; | 				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) | 		public void SetHighlight(bool enabled, Color color, int width) | ||||||
| 		{ | 		{ | ||||||
| 			this._isSizeChanged = this._isSizeChanged || (this._isHighlightEnabled != enabled); | 			if (this._isHighlightEnabled == enabled) | ||||||
| 			this._isHighlightEnabled = enabled; | 			{ | ||||||
| 			this._highlightWidth = width; | 				return; | ||||||
| 			this._overlay.EnableHighlight(enabled, color); | 			} | ||||||
|  |  | ||||||
|  | 			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) | 		public void ZoomIn(ViewZoomAnchor anchor, int zoomFactor) | ||||||
| @@ -330,11 +344,10 @@ namespace EveOPreview.UI | |||||||
| 					int actualHeight = baseHeight - 2 * this._highlightWidth; | 					int actualHeight = baseHeight - 2 * this._highlightWidth; | ||||||
| 					double desiredWidth = actualHeight * baseAspectRatio; | 					double desiredWidth = actualHeight * baseAspectRatio; | ||||||
| 					int actualWidth = (int)Math.Round(desiredWidth, MidpointRounding.AwayFromZero); | 					int actualWidth = (int)Math.Round(desiredWidth, MidpointRounding.AwayFromZero); | ||||||
| 					int highlightWidthLeft = Math.Min(4, (baseWidth - actualWidth) / 2); | 					int highlightWidthLeft = (baseWidth - actualWidth) / 2; | ||||||
| 					int highlightWidthRight = Math.Min(4, baseWidth - actualWidth - highlightWidthLeft); | 					int highlightWidthRight = baseWidth - actualWidth - highlightWidthLeft; | ||||||
|  |  | ||||||
| 					this._overlay.SetHighlightWidth(highlightWidthLeft, this._highlightWidth, highlightWidthRight, this._highlightWidth); | 					this._thumbnail.rcDestination = new RECT(0 + highlightWidthLeft, 0 + this._highlightWidth, baseWidth - highlightWidthRight, baseHeight - this._highlightWidth); | ||||||
| 					this._thumbnail.rcDestination = new RECT(0 + highlightWidthLeft, 0 + this._highlightWidth, actualWidth + highlightWidthLeft, actualHeight + this._highlightWidth); |  | ||||||
| 				} | 				} | ||||||
| 				else | 				else | ||||||
| 				{ | 				{ | ||||||
| @@ -378,8 +391,9 @@ namespace EveOPreview.UI | |||||||
| 			Size overlaySize = this.ClientSize; | 			Size overlaySize = this.ClientSize; | ||||||
| 			Point overlayLocation = this.Location; | 			Point overlayLocation = this.Location; | ||||||
|  |  | ||||||
| 			overlayLocation.X += (this.Size.Width - this.ClientSize.Width) / 2; | 			int borderWidth = (this.Size.Width - this.ClientSize.Width) / 2; | ||||||
| 			overlayLocation.Y += (this.Size.Height - this.ClientSize.Height) - (this.Size.Width - this.ClientSize.Width) / 2; | 			overlayLocation.X += borderWidth; | ||||||
|  | 			overlayLocation.Y += (this.Size.Height - this.ClientSize.Height) - borderWidth; | ||||||
|  |  | ||||||
| 			this._isPositionChanged = false; | 			this._isPositionChanged = false; | ||||||
| 			this._overlay.Size = overlaySize; | 			this._overlay.Size = overlaySize; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Anton Kasyanov
					Anton Kasyanov