diff --git a/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp b/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp index 43938e31da..9306a1c88e 100644 --- a/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp +++ b/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp @@ -32,6 +32,11 @@ class ComponentAnimator::AnimationTask public: AnimationTask (Component* c) noexcept : component (c) {} + ~AnimationTask() + { + proxy.deleteAndZero(); + } + void reset (const Rectangle& finalBounds, float finalAlpha, int millisecondsToSpendMoving, @@ -58,17 +63,17 @@ public: midSpeed = invTotalDistance; endSpeed = jmax (0.0, endSpd * invTotalDistance); + proxy.deleteAndZero(); + if (useProxyComponent) - proxy.reset (new ProxyComponent (*component)); - else - proxy.reset(); + proxy = new ProxyComponent (*component); component->setVisible (! useProxyComponent); } bool useTimeslice (const int elapsed) { - if (auto* c = proxy != nullptr ? proxy.get() + if (auto* c = proxy != nullptr ? proxy.getComponent() : component.get()) { msElapsed += elapsed; @@ -182,7 +187,7 @@ public: }; WeakReference component; - std::unique_ptr proxy; + Component::SafePointer proxy; Rectangle destination; double destAlpha;