From 7b4204df100341816ddf06eda77907b097200e70 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sat, 18 Nov 2017 12:33:51 +0300 Subject: [PATCH] If shape deleted when processing then queue dispose to be executed after processing is finished --- .../Shapes/Effect/BaseEffectShape.cs | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs b/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs index b9d7bbcec..92480f468 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 drawCache, isEffectCaching, cachePending; + private bool drawCache, isEffectCaching, isCachePending, isDisposePending; private Image cachedEffect; public abstract void ApplyEffect(Bitmap bmp); @@ -44,7 +44,7 @@ public override void OnUpdate() { base.OnUpdate(); - if (cachePending) + if (isCachePending) { CacheEffect(); } @@ -140,7 +140,7 @@ private void CacheEffect() { if (!isEffectCaching) { - cachePending = false; + isCachePending = false; drawCache = true; ClearCache(); @@ -156,19 +156,24 @@ private void CacheEffect() ApplyEffect((Bitmap)cachedEffect); isEffectCaching = false; + + if (isDisposePending) + { + Dispose(); + } }); } } else { - cachePending = true; + isCachePending = true; } } private void StopDrawCache() { drawCache = false; - cachePending = false; + isCachePending = false; } private void ClearCache() @@ -182,7 +187,14 @@ private void ClearCache() public override void Dispose() { - ClearCache(); + if (isEffectCaching) + { + isDisposePending = true; + } + else + { + ClearCache(); + } } } } \ No newline at end of file