Support cyclic ui::slider
This commit is contained in:
parent
5f70c61723
commit
21d6076f5c
2 changed files with 9 additions and 1 deletions
|
|
@ -20,6 +20,9 @@ namespace psemek::ui
|
||||||
virtual int value() const { return value_; }
|
virtual int value() const { return value_; }
|
||||||
virtual void set_value(int v, bool notify = true);
|
virtual void set_value(int v, bool notify = true);
|
||||||
|
|
||||||
|
virtual bool cyclic() const { return cyclic_; }
|
||||||
|
virtual void set_cyclic(bool cyclic) { cyclic_ = cyclic; }
|
||||||
|
|
||||||
using on_value_changed_callback = std::function<void(int)>;
|
using on_value_changed_callback = std::function<void(int)>;
|
||||||
|
|
||||||
void on_value_changed(on_value_changed_callback callback);
|
void on_value_changed(on_value_changed_callback callback);
|
||||||
|
|
@ -42,6 +45,8 @@ namespace psemek::ui
|
||||||
geom::interval<int> value_range_{0, 100};
|
geom::interval<int> value_range_{0, 100};
|
||||||
int value_ = 0;
|
int value_ = 0;
|
||||||
|
|
||||||
|
bool cyclic_ = false;
|
||||||
|
|
||||||
state_t state_ = state_t::normal;
|
state_t state_ = state_t::normal;
|
||||||
std::optional<geom::point<int, 2>> mouse_;
|
std::optional<geom::point<int, 2>> mouse_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,10 @@ namespace psemek::ui
|
||||||
|
|
||||||
void slider::set_value(int v, bool notify)
|
void slider::set_value(int v, bool notify)
|
||||||
{
|
{
|
||||||
v = geom::clamp(v, value_range_);
|
if (cyclic_)
|
||||||
|
v = geom::imod(v - value_range_.min, value_range_.length()) + value_range_.min;
|
||||||
|
else
|
||||||
|
v = geom::clamp(v, value_range_);
|
||||||
if (value_ != v)
|
if (value_ != v)
|
||||||
{
|
{
|
||||||
value_ = v;
|
value_ = v;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue