Skip to content

Commit

Permalink
Added callbacks, which will be called in animation group on end. Fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
mamontov-cpp committed Jun 28, 2015
1 parent 35e8130 commit 672fad5
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
55 changes: 55 additions & 0 deletions include/animations/animationsgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,61 @@ public sad::TemporarilyImmutableContainer<sad::animations::Instance>
/*! Called, when process is removed from pipeline
*/
virtual void removedFromPipeline();
/*! Adds new callback in animation instance, which should be called,
when finished c callback
\param[in] c
*/
void addCallbackOnEnd(sad::animations::Callback* c);
/*! Adds a callback, which should be called on end
\param[in] f function
*/
template<typename _Fun>
void end(_Fun f)
{
addCallbackOnEnd(new sad::animations::FunctionCall<_Fun>(f));
}
/*! Adds a callback, which should be called on end
\param[in] o object
\param[in] m method
*/
template<typename _Object, typename _Method>
void end(_Object* o, _Method m)
{
addCallbackOnEnd(new sad::animations::MethodCall0<_Object, _Method>(o, m));
}
/*! Adds a callback, which should be called on end
\param[in] o object
\param[in] m method
\param[in] a argument
*/
template<typename _Object, typename _Method, typename _Arg>
void end(_Object* o, _Method m, const _Arg& a)
{
addCallbackOnEnd(new sad::animations::MethodCall1<_Object, _Method, _Arg>(o, m, a));
}
/*! Adds a callback, which should be called on end
\param[in] o object
\param[in] m method
\param[in] a1 first argument
\param[in] a2 second argument
*/
template<typename _Object, typename _Method, typename _Arg1, typename _Arg2>
void end(_Object* o, _Method m, const _Arg1& a1,const _Arg2& a2)
{
addCallbackOnEnd(new sad::animations::MethodCall2<_Object, _Method, _Arg1, _Arg2>(o, m, a1, a2));
}
/*! Adds a callback, which should be called on end
\param[in] o object
\param[in] m method
\param[in] a1 first argument
\param[in] a2 second argument
\param[in] a3 third argument
*/
template<typename _Object, typename _Method, typename _Arg1, typename _Arg2, typename _Arg3>
void end(_Object* o, _Method m, const _Arg1& a1,const _Arg2& a2, const _Arg3& a3)
{
addCallbackOnEnd(new sad::animations::MethodCall3<_Object, _Method, _Arg1, _Arg2, _Arg3>(o, m, a1, a2, a3));
}
protected:
/*! Immediately adds an object to container
\param[in] o object
Expand Down
14 changes: 14 additions & 0 deletions src/animations/animationsgroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ void sad::animations::Group::process(sad::animations::Animations* animations)
}
}

size_t old_size = m_instances.size();
for(size_t i = 0; i < m_instances.size(); i++)
{
m_instances[i]->process(animations);
Expand All @@ -271,6 +272,14 @@ void sad::animations::Group::process(sad::animations::Animations* animations)
--i;
}
}

if (old_size != m_instances.size() && m_instances.size() == 0)
{
for(size_t i = 0; i < m_callbacks_on_end.size(); i++)
{
m_callbacks_on_end[i]->invoke();
}
}
}

void sad::animations::Group::pause()
Expand Down Expand Up @@ -310,6 +319,11 @@ void sad::animations::Group::removedFromPipeline()
this->delRef();
}

void sad::animations::Group::addCallbackOnEnd(sad::animations::Callback* c)
{
m_callbacks_on_end << c;
}

// =========================== PROTECTED METHODS ===========================

void sad::animations::Group::getInstances(sad::Vector<sad::animations::Instance*> & result)
Expand Down

0 comments on commit 672fad5

Please sign in to comment.