Thumbnail opacity management might cause performance issues and/or app crashes

This commit is contained in:
Anton Kasyanov
2019-05-05 02:28:02 +03:00
parent 00339bc34c
commit dd24494e62

View File

@@ -11,6 +11,8 @@ namespace EveOPreview.View
{ {
#region Private constants #region Private constants
private const int RESIZE_EVENT_TIMEOUT = 500; private const int RESIZE_EVENT_TIMEOUT = 500;
f private const double OPACITY_THRESHOLD = 0.9;
private const double OPACITY_EPSILON = 0.1;
#endregion #endregion
#region Private fields #region Private fields
@@ -23,9 +25,14 @@ namespace EveOPreview.View
private bool _isHighlightEnabled; private bool _isHighlightEnabled;
private bool _isHighlightRequested; private bool _isHighlightRequested;
private int _highlightWidth; private int _highlightWidth;
private bool _isLocationChanged; private bool _isLocationChanged;
private bool _isSizeChanged; private bool _isSizeChanged;
private bool _isCustomMouseModeActive; private bool _isCustomMouseModeActive;
private double _opacity;
private DateTime _suppressResizeEventsTimestamp; private DateTime _suppressResizeEventsTimestamp;
private Size _baseZoomSize; private Size _baseZoomSize;
private Point _baseZoomLocation; private Point _baseZoomLocation;
@@ -47,12 +54,14 @@ namespace EveOPreview.View
this._isOverlayVisible = false; this._isOverlayVisible = false;
this._isTopMost = false; this._isTopMost = false;
this._isHighlightEnabled = false; this._isHighlightEnabled = false;
this._isHighlightRequested = false;
this._isLocationChanged = true; this._isLocationChanged = true;
this._isSizeChanged = true; this._isSizeChanged = true;
this._isCustomMouseModeActive = false; this._isCustomMouseModeActive = false;
this._isHighlightRequested = false; this._opacity = 1.0;
InitializeComponent(); InitializeComponent();
@@ -156,13 +165,33 @@ namespace EveOPreview.View
public void SetOpacity(double opacity) public void SetOpacity(double opacity)
{ {
this.Opacity = opacity; if (opacity >= OPACITY_THRESHOLD)
{
opacity = 1.0;
}
// Overlay opacity settings if (Math.Abs(opacity - this._opacity) < OPACITY_EPSILON)
// Of the thumbnail's opacity is almost full then set the overlay's one to {
// full. Otherwise set it to half of the thumbnail opacity return;
// Opacity value is stored even if the overlay is not displayed atm }
this._overlay.Opacity = this.Opacity > 0.9 ? 1.0 : 1.0 - (1.0 - this.Opacity) / 2;
try
{
this.Opacity = opacity;
// Overlay opacity settings
// Of the thumbnail's opacity is almost full then set the overlay's one to
// full. Otherwise set it to half of the thumbnail opacity
// Opacity value is stored even if the overlay is not displayed atm
this._overlay.Opacity = opacity > 0.8 ? 1.0 : 1.0 - (1.0 - opacity) / 2;
this._opacity = opacity;
}
catch (Win32Exception)
{
// Something went wrong in WinForms internals
// Opacity will be updated in the next cycle
}
} }
public void SetFrames(bool enable) public void SetFrames(bool enable)