]> git.sesse.net Git - casparcg/blobdiff - common/tweener.cpp
Merge pull request #496 from dimitry-ishenko-casparcg/2.1.0-fixes
[casparcg] / common / tweener.cpp
index 49411187259bd03744199922e9f406eeb686eb18..e92cec8dbd3cf293437372707bbc5193a55b31e5 100644 (file)
@@ -55,7 +55,7 @@
 #include <algorithm>
 #include <vector>
 
-namespace caspar { namespace core {
+namespace caspar {
 
 typedef std::function<double(double, double, double, double)> tweener_t;
                        
@@ -453,11 +453,9 @@ tweener_t get_tweener(std::wstring name)
                        params.push_back(boost::lexical_cast<double>(what["V1"].str()));
        }
                
-       auto tweens = get_tweens();
-
-       auto it = tweens.find(name);
-       if(it == tweens.end())
-               CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Could not find tween.") << arg_value_info(name));
+       auto it = get_tweens().find(name);
+       if(it == get_tweens().end())
+               CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Could not find tween " + name));
        
        auto tween = it->second;
        return [=](double t, double b, double c, double d)
@@ -468,26 +466,43 @@ tweener_t get_tweener(std::wstring name)
 
 tweener::tweener(const std::wstring& name)
        : func_(get_tweener(name))
+       , name_(name)
 {
 }
 
-tweener::tweener(const wchar_t* name)
-       : func_(get_tweener(name))
+double tweener::operator()(double t, double b , double c, double d) const
 {
+       return func_(t, b, c, d);
 }
 
-double tweener::operator()(double t, double b , double c, double d) const
+bool tweener::operator==(const tweener& other) const
 {
-       return func_(t, b, c, d);
+       return name_ == other.name_;
+}
+
+bool tweener::operator!=(const tweener& other) const
+{
+       return !(*this == other);
 }
 
-const std::vector<const std::wstring>& tweener::names()
+const std::vector<std::wstring>& tweener::names()
 {
-       static const auto names = cpplinq::from(get_tweens())
+       /*static const auto names = cpplinq::from(get_tweens())
                .select(keys())
-               .to_vector();
+               .to_vector();*/
+
+       static const auto result = []
+       {
+               std::vector<std::wstring> tweens;
 
-       return names;
+               for (auto& tween : get_tweens())
+                       tweens.push_back(tween.first);
+
+               return tweens;
+       }();
+       //static const std::vector<std::wstring> result;
+
+       return result;
 }
 
-}}
+}