fix slider knob precision issue
This commit is contained in:
parent
ced13132a4
commit
aa179dbfd9
@ -198,12 +198,12 @@ namespace nana
|
|||||||
|
|
||||||
unsigned vcur() const
|
unsigned vcur() const
|
||||||
{
|
{
|
||||||
return attr_.vcur;
|
return static_cast<unsigned>(attr_.vcur);
|
||||||
}
|
}
|
||||||
|
|
||||||
void resize()
|
void resize()
|
||||||
{
|
{
|
||||||
this->_m_mk_slider_pos_by_value();
|
_m_mk_slider_pos_by_value();
|
||||||
attr_.adorn_pos = attr_.pos;
|
attr_.adorn_pos = attr_.pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,16 +338,18 @@ namespace nana
|
|||||||
|
|
||||||
unsigned move_step(bool forward)
|
unsigned move_step(bool forward)
|
||||||
{
|
{
|
||||||
unsigned cmpvalue = attr_.vcur;
|
unsigned cmpvalue = static_cast<unsigned>(attr_.vcur);
|
||||||
|
auto value = cmpvalue;
|
||||||
if(forward)
|
if(forward)
|
||||||
{
|
{
|
||||||
if(attr_.vcur)
|
if (value)
|
||||||
--attr_.vcur;
|
--value;
|
||||||
}
|
}
|
||||||
else if(attr_.vcur < attr_.vmax)
|
else if (value < attr_.vmax)
|
||||||
++attr_.vcur;
|
++value;
|
||||||
|
|
||||||
if(cmpvalue != attr_.vcur)
|
attr_.vcur = value;
|
||||||
|
if (cmpvalue != value)
|
||||||
{
|
{
|
||||||
_m_mk_slider_pos_by_value();
|
_m_mk_slider_pos_by_value();
|
||||||
draw();
|
draw();
|
||||||
@ -436,32 +438,29 @@ namespace nana
|
|||||||
return static_cast<int>(_m_scale() * attr_.vcur / attr_.vmax);
|
return static_cast<int>(_m_scale() * attr_.vcur / attr_.vmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned _m_mk_slider_value_by_pos()
|
void _m_mk_slider_value_by_pos()
|
||||||
{
|
{
|
||||||
if(_m_scale())
|
if(_m_scale())
|
||||||
{
|
{
|
||||||
auto cmpvalue = attr_.vcur;
|
auto cmpvalue = static_cast<int>(attr_.vcur);
|
||||||
attr_.vcur = static_cast<unsigned>(attr_.pos * attr_.vmax / _m_scale());
|
attr_.vcur = (attr_.pos * attr_.vmax / _m_scale());
|
||||||
if (cmpvalue != attr_.vcur)
|
if (cmpvalue != static_cast<int>(attr_.vcur))
|
||||||
_m_emit_value_changed();
|
_m_emit_value_changed();
|
||||||
}
|
}
|
||||||
return attr_.vcur;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int _m_mk_slider_pos_by_value()
|
void _m_mk_slider_pos_by_value()
|
||||||
{
|
{
|
||||||
attr_.pos = double(_m_scale()) * attr_.vcur / attr_.vmax;
|
attr_.pos = double(_m_scale()) * attr_.vcur / attr_.vmax;
|
||||||
|
|
||||||
if(slider_state_.trace == slider_state_.TraceNone)
|
if(slider_state_.trace == slider_state_.TraceNone)
|
||||||
attr_.adorn_pos = attr_.pos;
|
attr_.adorn_pos = attr_.pos;
|
||||||
|
|
||||||
return static_cast<int>(attr_.pos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned _m_value_by_pos(double pos) const
|
unsigned _m_value_by_pos(double pos) const
|
||||||
{
|
{
|
||||||
if(_m_scale())
|
if(_m_scale())
|
||||||
return static_cast<int>(pos * attr_.vmax / _m_scale());
|
return static_cast<unsigned>(pos * attr_.vmax / _m_scale());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -548,7 +547,7 @@ namespace nana
|
|||||||
style dir;
|
style dir;
|
||||||
unsigned border;
|
unsigned border;
|
||||||
unsigned vmax;
|
unsigned vmax;
|
||||||
unsigned vcur;
|
double vcur;
|
||||||
double pos;
|
double pos;
|
||||||
bool is_draw_adorn;
|
bool is_draw_adorn;
|
||||||
double adorn_pos;
|
double adorn_pos;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user