#include <stdexcept>
#include <boost/lexical_cast.hpp>
+#include <boost/utility/value_init.hpp>
#include <common/tweener.h>
#include <common/except.h>
{
if (dependency == other)
return true;
-
+
if (dependency->depends_on(other))
- return true;
+ return true;
}
return false;
mutable bool evaluated_ = false;
impl()
- : value_()
+ : value_(boost::value_initialized<T>())
{
}
template<typename Expr>
impl(const Expr& expression)
- : expression_(expression)
+ : value_(boost::value_initialized<T>())
+ , expression_(expression)
{
}
void evaluate() const override
{
- if (expression_)
+ if (bound())
{
auto new_value = expression_();
+ evaluated_ = true;
+
if (new_value != value_)
{
value_ = new_value;
on_change();
}
}
-
- evaluated_ = true;
+ else
+ evaluated_ = true;
}
using impl_base::on_change;
unbind();
depend_on(other);
expression_ = [other]{ return other->get(); };
- //evaluate();
+ evaluate();
}
void unbind()
{
- if (expression_)
+ if (bound())
{
expression_ = std::function<T ()>();
dependencies_.clear();
std::shared_ptr<void> subscription(new char);
on_change(subscription, listener);
-
+
return subscription;
}
private:
binding<T> result([condition, true_result, false_result]()
{
- return condition.get() ? true_result.get() : false_result.get();
+ return condition.get() ? true_result.get() : false_result.get();
});
result.depend_on(condition);
const std::wstring& easing)
{
tweener tween(easing);
-
+
double start_val = to_tween.as<double>().get();
double destination_val = static_cast<double>(destination_value);
double start_time = counter.as<double>().get();