diff --git a/Eve-O-Preview/View/Implementation/LiveThumbnailView.cs b/Eve-O-Preview/View/Implementation/LiveThumbnailView.cs index 543c94d..487d9c1 100644 --- a/Eve-O-Preview/View/Implementation/LiveThumbnailView.cs +++ b/Eve-O-Preview/View/Implementation/LiveThumbnailView.cs @@ -1,4 +1,5 @@ using System; +using System.Drawing; using EveOPreview.Services; namespace EveOPreview.View @@ -7,17 +8,15 @@ namespace EveOPreview.View { #region Private fields private IDwmThumbnail _thumbnail; + private Point _startLocation; + private Point _endLocation; #endregion public LiveThumbnailView(IWindowManager windowManager) : base(windowManager) { - } - - public override void Close() - { - this._thumbnail?.Unregister(); - base.Close(); + this._startLocation = new Point(0, 0); + this._endLocation = new Point(this.ClientSize); } protected override void RefreshThumbnail(bool forceRefresh) @@ -35,13 +34,26 @@ namespace EveOPreview.View protected override void ResizeThumbnail(int baseWidth, int baseHeight, int highlightWidthTop, int highlightWidthRight, int highlightWidthBottom, int highlightWidthLeft) { - this._thumbnail.Move(0 + highlightWidthLeft, 0 + highlightWidthTop, baseWidth - highlightWidthRight, baseHeight - highlightWidthBottom); + var left = 0 + highlightWidthLeft; + var top = 0 + highlightWidthTop; + var right = baseWidth - highlightWidthRight; + var bottom = baseHeight - highlightWidthBottom; + + if ((this._startLocation.X == left) && (this._startLocation.Y == top) && (this._endLocation.X == right) && (this._endLocation.Y == bottom)) + { + return; // No update required + } + this._startLocation = new Point(left, top); + this._endLocation = new Point(right, bottom); + + this._thumbnail.Move(left, top, right, bottom); this._thumbnail.Update(); } private void RegisterThumbnail() { this._thumbnail = this.WindowManager.GetLiveThumbnail(this.Handle, this.Id); + this._thumbnail.Move(this._startLocation.X, this._startLocation.Y, this._endLocation.X, this._endLocation.Y); this._thumbnail.Update(); } } diff --git a/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs b/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs index cabe743..c01ebc3 100644 --- a/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs +++ b/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs @@ -42,8 +42,29 @@ namespace EveOPreview.View protected override void ResizeThumbnail(int baseWidth, int baseHeight, int highlightWidthTop, int highlightWidthRight, int highlightWidthBottom, int highlightWidthLeft) { - this._thumbnail.Location = new Point(0 + highlightWidthLeft, 0 + highlightWidthTop); - this._thumbnail.Size = new Size(baseWidth - highlightWidthLeft - highlightWidthRight, baseHeight - highlightWidthTop - highlightWidthBottom); + var left = 0 + highlightWidthLeft; + var top = 0 + highlightWidthTop; + if (this.IsLocationUpdateRequired(this._thumbnail.Location, left, top)) + { + this._thumbnail.Location = new Point(left, top); + } + + var width = baseWidth - highlightWidthLeft - highlightWidthRight; + var height = baseHeight - highlightWidthTop - highlightWidthBottom; + if (this.IsSizeUpdateRequired(this._thumbnail.Size, width, height)) + { + this._thumbnail.Size = new Size(width, height); + } + } + + private bool IsLocationUpdateRequired(Point currentLocation, int left, int top) + { + return (currentLocation.X != left) || (currentLocation.Y != top); + } + + private bool IsSizeUpdateRequired(Size currentSize, int width, int height) + { + return (currentSize.Width != width) || (currentSize.Height != height); } } } \ No newline at end of file diff --git a/Eve-O-Preview/View/Implementation/ThumbnailView.cs b/Eve-O-Preview/View/Implementation/ThumbnailView.cs index da26bd8..167b673 100644 --- a/Eve-O-Preview/View/Implementation/ThumbnailView.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailView.cs @@ -253,8 +253,10 @@ namespace EveOPreview.View int locationX = this.Location.X; int locationY = this.Location.Y; - int newWidth = (zoomFactor * this.ClientSize.Width) + (this.Size.Width - this.ClientSize.Width); - int newHeight = (zoomFactor * this.ClientSize.Height) + (this.Size.Height - this.ClientSize.Height); + int clientSizeWidth = this.ClientSize.Width; + int clientSizeHeight = this.ClientSize.Height; + int newWidth = (zoomFactor * clientSizeWidth) + (this.Size.Width - clientSizeWidth); + int newHeight = (zoomFactor * clientSizeHeight) + (this.Size.Height - clientSizeHeight); // First change size, THEN move the window // Otherwise there is a chance to fail in a loop @@ -353,15 +355,16 @@ namespace EveOPreview.View this._isHighlightEnabled = this._isHighlightRequested; + int baseWidth = this.ClientSize.Width; + int baseHeight = this.ClientSize.Height; + if (!this._isHighlightRequested) { //No highlighting enabled, so no math required - this.ResizeThumbnail(this.ClientSize.Width, this.ClientSize.Height, 0, 0, 0, 0); + this.ResizeThumbnail(baseWidth, baseHeight, 0, 0, 0, 0); return; } - int baseWidth = this.ClientSize.Width; - int baseHeight = this.ClientSize.Height; double baseAspectRatio = ((double)baseWidth) / baseHeight; int actualHeight = baseHeight - 2 * this._highlightWidth;