Fix cache related issues

This commit is contained in:
Jaex 2017-11-18 10:04:13 +03:00
parent 011b587cec
commit 5d1c347644

View file

@ -35,7 +35,7 @@ public abstract class BaseEffectShape : BaseShape
public abstract string OverlayText { get; } public abstract string OverlayText { get; }
private bool isEffectCaching, cachePending, cacheClearingPending; private bool drawCache, isEffectCaching, cachePending;
private Image cachedEffect; private Image cachedEffect;
public abstract void ApplyEffect(Bitmap bmp); public abstract void ApplyEffect(Bitmap bmp);
@ -44,11 +44,6 @@ public override void OnUpdate()
{ {
base.OnUpdate(); base.OnUpdate();
if (cacheClearingPending)
{
ClearCache();
}
if (cachePending) if (cachePending)
{ {
CacheEffect(); CacheEffect();
@ -57,11 +52,11 @@ public override void OnUpdate()
public virtual void OnDraw(Graphics g) public virtual void OnDraw(Graphics g)
{ {
if (isEffectCaching) if (drawCache && isEffectCaching)
{ {
OnDrawOverlay(g, "Processing..."); OnDrawOverlay(g, "Processing...");
} }
else if (cachedEffect != null) else if (drawCache && cachedEffect != null)
{ {
g.InterpolationMode = InterpolationMode.NearestNeighbor; g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(cachedEffect, RectangleInsideCanvas); g.DrawImage(cachedEffect, RectangleInsideCanvas);
@ -123,7 +118,7 @@ public override void OnCreated()
public override void OnMoving() public override void OnMoving()
{ {
ClearCache(); StopDrawCache();
} }
public override void OnMoved() public override void OnMoved()
@ -133,7 +128,7 @@ public override void OnMoved()
public override void OnResizing() public override void OnResizing()
{ {
ClearCache(); StopDrawCache();
} }
public override void OnResized() public override void OnResized()
@ -146,6 +141,7 @@ private void CacheEffect()
if (!isEffectCaching) if (!isEffectCaching)
{ {
cachePending = false; cachePending = false;
drawCache = true;
ClearCache(); ClearCache();
@ -169,17 +165,18 @@ private void CacheEffect()
} }
} }
private void StopDrawCache()
{
drawCache = false;
cachePending = false;
}
private void ClearCache() private void ClearCache()
{ {
if (isEffectCaching) if (!isEffectCaching && cachedEffect != null)
{
cacheClearingPending = true;
}
else if (cachedEffect != null)
{ {
cachedEffect.Dispose(); cachedEffect.Dispose();
cachedEffect = null; cachedEffect = null;
cacheClearingPending = false;
} }
} }