#ifdef _DEBUG
#define _STLP_DEBUG 1
#endif
#include "DeformationSelector.h"
using namespace ToonzExt;
using namespace std;
//-----------------------------------------------------------------------------
DeformationSelector::DeformationSelector()
{
}
//-----------------------------------------------------------------------------
DeformationSelector::~DeformationSelector()
{
}
//-----------------------------------------------------------------------------
DeformationSelector *
DeformationSelector::instance()
{
static DeformationSelector singleton;
return &singleton;
}
//-----------------------------------------------------------------------------
void DeformationSelector::add(StrokeDeformationImpl *deformation,
int priority)
{
assert(deformation && "Not deformation available!!!");
if (!deformation)
return;
Deformation val(deformation, priority);
ref_.push_back(val);
}
//-----------------------------------------------------------------------------
StrokeDeformationImpl *
DeformationSelector::getDeformation(const ContextStatus *status)
{
assert(status && "Not status available!!!");
if (!status)
return 0;
Deformation candidate((StrokeDeformationImpl *)0, -1);
// by default lower deformator is selected
Deformation default_def((StrokeDeformationImpl *)0, -1);
if (!ref_.empty())
default_def = ref_[0];
vector<Deformation>::iterator
it,
end = ref_.end();
for (it = ref_.begin();
it != end;
++it) {
StrokeDeformationImpl
*tmp = it->first;
if (tmp->check(status)) {
if (it->second >
candidate.second) {
candidate = *it;
if (it->second < default_def.second)
default_def = *it;
}
}
if (tmp->getShortcutKey() ==
status->key_event_) {
return tmp;
}
}
// if there is a good candidate return it
if (candidate.first)
return candidate.first;
// else select a lower deformator (smooth)
return default_def.first;
}
//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------