diff options
Diffstat (limited to 'options')
-rw-r--r-- | options/base-value.cpp | 7 | ||||
-rw-r--r-- | options/slider.cpp | 45 | ||||
-rw-r--r-- | options/slider.hpp | 36 | ||||
-rw-r--r-- | options/tie.hpp | 4 |
4 files changed, 31 insertions, 61 deletions
diff --git a/options/base-value.cpp b/options/base-value.cpp index d900ad0f..bcbbd1dc 100644 --- a/options/base-value.cpp +++ b/options/base-value.cpp @@ -2,7 +2,7 @@ using namespace options; -value_::value_(bundle b, const QString& name, value_::comparator cmp, std::type_index type_idx) : +value_::value_(bundle const& b, const QString& name, value_::comparator cmp, std::type_index type_idx) : b(b), self_name(name), cmp(cmp), @@ -21,11 +21,6 @@ void value_::notify() const bundle_value_changed(); } -void value_::store(const QVariant& datum) -{ - b->store_kv(self_name, datum); -} - namespace options::detail { void set_base_value_to_default(value_* val) diff --git a/options/slider.cpp b/options/slider.cpp index 56d9ba16..5789e951 100644 --- a/options/slider.cpp +++ b/options/slider.cpp @@ -11,7 +11,7 @@ namespace options { -slider_value::slider_value(double cur, double min, double max) : +constexpr slider_value::slider_value(double cur, double min, double max) : cur_(cur), min_(min), max_(max) @@ -24,48 +24,31 @@ slider_value::slider_value(double cur, double min, double max) : cur_ = min_; } -slider_value& slider_value::operator=(const slider_value& v) +template<typename t> +static constexpr auto abs_(t x) { - if (this != &v) - { - cur_ = v.cur(); - min_ = v.min(); - max_ = v.max(); - } - - return *this; + return x < t{0} ? -x : x; } -slider_value::slider_value(const slider_value& v) +constexpr bool slider_value::operator==(const slider_value& v) const { - *this = v; -} - -slider_value::slider_value() : slider_value(0, 0, 0) -{ -} - -bool slider_value::operator==(const slider_value& v) const -{ - using std::fabs; - constexpr double eps = 2e-3; #if 1 - return (fabs(v.cur_ - cur_) < eps && - fabs(v.min_ - min_) < eps && - fabs(v.max_ - max_) < eps); + return (abs_(v.cur_ - cur_) < eps && + abs_(v.min_ - min_) < eps && + abs_(v.max_ - max_) < eps); #else - return (fabs(v.cur_ - cur_) < eps); + return (abs_(v.cur_ - cur_) < eps); #endif } -bool slider_value::operator!=(const slider_value& v) const +constexpr bool slider_value::operator!=(const slider_value& v) const { return !(*this == v); } -slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) const +constexpr slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) const { slider_value v(*this); @@ -75,11 +58,11 @@ slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) con : (((pos - q_min) * (v.max() - v.min())) / q_diff + v.min()); if (sv_pos < v.min()) - v = slider_value(v.min(), v.min(), v.max()); + v = { v.min(), v.min(), v.max() }; else if (sv_pos > v.max()) - v = slider_value(v.max(), v.min(), v.max()); + v = { v.max(), v.min(), v.max() }; else - v = slider_value(sv_pos, v.min(), v.max()); + v = { sv_pos, v.min(), v.max() }; return v; } diff --git a/options/slider.hpp b/options/slider.hpp index 360c85b8..1366e390 100644 --- a/options/slider.hpp +++ b/options/slider.hpp @@ -22,35 +22,27 @@ namespace options { double cur_, min_, max_; - template<typename t> - using arith_conversion_t = std::enable_if_t<std::is_arithmetic_v<std::decay_t<t>>, std::decay_t<t>>; public: - slider_value(double cur, double min, double max); + constexpr slider_value(double cur, double min, double max); - template<typename t, typename u, typename v> slider_value(t cur, u min, v max) : + template<typename t, typename u, typename v> + constexpr slider_value(t cur, u min, v max) : cur_(double(cur)), min_(double(min)), max_(double(max)) {} - template<typename t> - cc_noinline - operator arith_conversion_t<t>() const - { - return t(cur_); - } - - slider_value& operator=(const slider_value& v); - - slider_value(const slider_value& v); - slider_value(); - bool operator==(const slider_value& v) const; - bool operator!=(const slider_value& v) const; - operator double() const { return cur_; } - double cur() const { return cur_; } - double min() const { return min_; } - double max() const { return max_; } - slider_value update_from_slider(int pos, int q_min, int q_max) const; + slider_value& operator=(const slider_value& v) = default; + constexpr slider_value(const slider_value& v) = default; + constexpr slider_value() : slider_value{0, 0, 0} {}; + + constexpr bool operator==(const slider_value& v) const; + constexpr bool operator!=(const slider_value& v) const; + constexpr operator double() const { return cur_; } + constexpr double cur() const { return cur_; } + constexpr double min() const { return min_; } + constexpr double max() const { return max_; } + constexpr slider_value update_from_slider(int pos, int q_min, int q_max) const; int to_slider_pos(int q_min, int q_max) const; }; } diff --git a/options/tie.hpp b/options/tie.hpp index 59fd0da1..aa83c7cb 100644 --- a/options/tie.hpp +++ b/options/tie.hpp @@ -66,11 +66,11 @@ void tie_setting(value<t>& v, QComboBox* cb, From&& fn_to_index, To&& fn_to_valu }); }, v.DIRECT_CONNTYPE); value_::connect(&v, value_::value_changed<t>(), - cb, [&v, cb, fn_to_index](cv_qualified<t>& v) { + cb, [&v, cb, fn_to_index](cv_qualified<t>& v) { run_in_thread_sync(cb, [&] { cb->setCurrentIndex(fn_to_index(v)); }); - }); + }, v.DIRECT_CONNTYPE); } template<typename t, typename F> |