Queue processing if it is requested while already processing

This commit is contained in:
Jaex 2017-11-17 18:50:14 +03:00
parent 7f90c61a9d
commit 8e671348ae

View file

@ -35,11 +35,21 @@ public abstract class BaseEffectShape : BaseShape
public abstract string OverlayText { get; } public abstract string OverlayText { get; }
private bool isEffectCaching; private bool isEffectCaching, cachePending;
private Image cachedEffect; private Image cachedEffect;
public abstract void ApplyEffect(Bitmap bmp); public abstract void ApplyEffect(Bitmap bmp);
public override void OnUpdate()
{
base.OnUpdate();
if (cachePending)
{
CacheEffect();
}
}
public virtual void OnDraw(Graphics g) public virtual void OnDraw(Graphics g)
{ {
if (isEffectCaching) if (isEffectCaching)
@ -130,7 +140,9 @@ private void CacheEffect()
{ {
if (!isEffectCaching) if (!isEffectCaching)
{ {
ClearCache(true); cachePending = false;
ClearCache();
if (IsInsideCanvas) if (IsInsideCanvas)
{ {
@ -146,11 +158,15 @@ private void CacheEffect()
}); });
} }
} }
else
{
cachePending = true;
}
} }
private void ClearCache(bool forceClear = false) private void ClearCache()
{ {
if ((forceClear || !isEffectCaching) && cachedEffect != null) if (!isEffectCaching && cachedEffect != null)
{ {
cachedEffect.Dispose(); cachedEffect.Dispose();
cachedEffect = null; cachedEffect = null;