Slider value handles -ve values by clipping to zero
see http://nanapro.org/en-us/forum/index.php?u=/topic/1092/ggslider-value-range
This commit is contained in:
parent
02d082959f
commit
26c28ae4be
@ -151,7 +151,13 @@ namespace nana
|
|||||||
bool vertical() const;
|
bool vertical() const;
|
||||||
void maximum(unsigned);
|
void maximum(unsigned);
|
||||||
unsigned maximum() const;
|
unsigned maximum() const;
|
||||||
void value(unsigned);
|
|
||||||
|
/** Set slider value
|
||||||
|
@param[in] v new value for slider.
|
||||||
|
v will be clipped to the range 0 to maximum
|
||||||
|
*/
|
||||||
|
void value(int );
|
||||||
|
|
||||||
unsigned value() const;
|
unsigned value() const;
|
||||||
unsigned move_step(bool forward); ///< Increase or decrease the value of slider.
|
unsigned move_step(bool forward); ///< Increase or decrease the value of slider.
|
||||||
unsigned adorn() const;
|
unsigned adorn() const;
|
||||||
|
|||||||
@ -245,7 +245,7 @@ namespace nana
|
|||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
enum class parts{none, bar, slider};
|
enum class parts{none, bar, slider};
|
||||||
|
|
||||||
using graph_reference = drawer_trigger::graph_reference;
|
using graph_reference = drawer_trigger::graph_reference;
|
||||||
|
|
||||||
model()
|
model()
|
||||||
@ -256,7 +256,7 @@ namespace nana
|
|||||||
proto_.renderer = pat::cloneable<renderer_interface>{interior_renderer{}};
|
proto_.renderer = pat::cloneable<renderer_interface>{interior_renderer{}};
|
||||||
|
|
||||||
attr_.seek_dir = seekdir::bilateral;
|
attr_.seek_dir = seekdir::bilateral;
|
||||||
|
|
||||||
attr_.is_draw_adorn = false;
|
attr_.is_draw_adorn = false;
|
||||||
attr_.vcur = 0;
|
attr_.vcur = 0;
|
||||||
attr_.vmax = 10;
|
attr_.vmax = 10;
|
||||||
@ -361,7 +361,7 @@ namespace nana
|
|||||||
parts seek_where(::nana::point pos) const
|
parts seek_where(::nana::point pos) const
|
||||||
{
|
{
|
||||||
nana::rectangle r = _m_bar_area();
|
nana::rectangle r = _m_bar_area();
|
||||||
|
|
||||||
if (attr_.slider.vert)
|
if (attr_.slider.vert)
|
||||||
{
|
{
|
||||||
std::swap(pos.x, pos.y);
|
std::swap(pos.x, pos.y);
|
||||||
@ -373,7 +373,7 @@ namespace nana
|
|||||||
return parts::slider;
|
return parts::slider;
|
||||||
|
|
||||||
sdpos = static_cast<int>(attr_.slider.weight) / 2;
|
sdpos = static_cast<int>(attr_.slider.weight) / 2;
|
||||||
|
|
||||||
if (sdpos <= pos.x && pos.x < sdpos + static_cast<int>(r.width))
|
if (sdpos <= pos.x && pos.x < sdpos + static_cast<int>(r.width))
|
||||||
{
|
{
|
||||||
if(pos.y < r.bottom())
|
if(pos.y < r.bottom())
|
||||||
@ -446,7 +446,7 @@ namespace nana
|
|||||||
bool move_slider(const ::nana::point& pos)
|
bool move_slider(const ::nana::point& pos)
|
||||||
{
|
{
|
||||||
int adorn_pos = slider_state_.snap_pos + (attr_.slider.vert ? pos.y : pos.x) - slider_state_.refpos.x;
|
int adorn_pos = slider_state_.snap_pos + (attr_.slider.vert ? pos.y : pos.x) - slider_state_.refpos.x;
|
||||||
|
|
||||||
if (adorn_pos > 0)
|
if (adorn_pos > 0)
|
||||||
{
|
{
|
||||||
int range = static_cast<int>(_m_range());
|
int range = static_cast<int>(_m_range());
|
||||||
@ -691,7 +691,7 @@ namespace nana
|
|||||||
window wd;
|
window wd;
|
||||||
nana::slider * widget;
|
nana::slider * widget;
|
||||||
}other_;
|
}other_;
|
||||||
|
|
||||||
struct prototype_tag
|
struct prototype_tag
|
||||||
{
|
{
|
||||||
pat::cloneable<slider::renderer_interface> renderer;
|
pat::cloneable<slider::renderer_interface> renderer;
|
||||||
@ -759,9 +759,9 @@ namespace nana
|
|||||||
void trigger::mouse_move(graph_reference graph, const arg_mouse& arg)
|
void trigger::mouse_move(graph_reference graph, const arg_mouse& arg)
|
||||||
{
|
{
|
||||||
// check if slider is disabled
|
// check if slider is disabled
|
||||||
if(!API::get_widget(arg.window_handle)->enabled())
|
if(!API::get_widget(arg.window_handle)->enabled())
|
||||||
return; // do nothing
|
return; // do nothing
|
||||||
|
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
if (model_ptr_->if_trace_slider())
|
if (model_ptr_->if_trace_slider())
|
||||||
{
|
{
|
||||||
@ -804,7 +804,7 @@ namespace nana
|
|||||||
|
|
||||||
//class slider
|
//class slider
|
||||||
slider::slider(){}
|
slider::slider(){}
|
||||||
|
|
||||||
slider::slider(window wd, bool visible)
|
slider::slider(window wd, bool visible)
|
||||||
{
|
{
|
||||||
create(wd, rectangle(), visible);
|
create(wd, rectangle(), visible);
|
||||||
@ -844,10 +844,14 @@ namespace nana
|
|||||||
return get_drawer_trigger().get_model()->attribute().vmax;
|
return get_drawer_trigger().get_model()->attribute().vmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
void slider::value(unsigned v)
|
void slider::value(int v)
|
||||||
{
|
{
|
||||||
if(handle())
|
if(handle())
|
||||||
{
|
{
|
||||||
|
// limit to positive values, vcur expects unsigned
|
||||||
|
if( v < 0 )
|
||||||
|
v = 0;
|
||||||
|
|
||||||
if(get_drawer_trigger().get_model()->vcur(v))
|
if(get_drawer_trigger().get_model()->vcur(v))
|
||||||
API::refresh_window(handle());
|
API::refresh_window(handle());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user