From 5d1c347644e29a709ad2c62af089e083e52d0ee6 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sat, 18 Nov 2017 10:04:13 +0300 Subject: [PATCH] Fix cache related issues --- .../Shapes/Effect/BaseEffectShape.cs | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs b/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs index 29ba955d7..b9d7bbcec 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs @@ -35,7 +35,7 @@ public abstract class BaseEffectShape : BaseShape public abstract string OverlayText { get; } - private bool isEffectCaching, cachePending, cacheClearingPending; + private bool drawCache, isEffectCaching, cachePending; private Image cachedEffect; public abstract void ApplyEffect(Bitmap bmp); @@ -44,11 +44,6 @@ public override void OnUpdate() { base.OnUpdate(); - if (cacheClearingPending) - { - ClearCache(); - } - if (cachePending) { CacheEffect(); @@ -57,11 +52,11 @@ public override void OnUpdate() public virtual void OnDraw(Graphics g) { - if (isEffectCaching) + if (drawCache && isEffectCaching) { OnDrawOverlay(g, "Processing..."); } - else if (cachedEffect != null) + else if (drawCache && cachedEffect != null) { g.InterpolationMode = InterpolationMode.NearestNeighbor; g.DrawImage(cachedEffect, RectangleInsideCanvas); @@ -123,7 +118,7 @@ public override void OnCreated() public override void OnMoving() { - ClearCache(); + StopDrawCache(); } public override void OnMoved() @@ -133,7 +128,7 @@ public override void OnMoved() public override void OnResizing() { - ClearCache(); + StopDrawCache(); } public override void OnResized() @@ -146,6 +141,7 @@ private void CacheEffect() if (!isEffectCaching) { cachePending = false; + drawCache = true; ClearCache(); @@ -169,17 +165,18 @@ private void CacheEffect() } } + private void StopDrawCache() + { + drawCache = false; + cachePending = false; + } + private void ClearCache() { - if (isEffectCaching) - { - cacheClearingPending = true; - } - else if (cachedEffect != null) + if (!isEffectCaching && cachedEffect != null) { cachedEffect.Dispose(); cachedEffect = null; - cacheClearingPending = false; } }