diff --git a/src/ui/CSimpleSlider.cpp b/src/ui/CSimpleSlider.cpp index cdf497b..3974c90 100644 --- a/src/ui/CSimpleSlider.cpp +++ b/src/ui/CSimpleSlider.cpp @@ -287,7 +287,7 @@ void CSimpleSlider::SetValue(float value) { v4 = maxValue; } - auto newValue = this->Sub96BC10(v4); + auto newValue = this->StepValue(v4); // Clamp to max value if (newValue + this->m_valueStep >= maxValue) { @@ -322,9 +322,19 @@ void CSimpleSlider::SetValueStep(float valueStep) { } } -float CSimpleSlider::Sub96BC10(float value) { - // TODO - return value; +float CSimpleSlider::StepValue(float value) { + if (this->m_valueStep == 0.0f) { + return value; + } + + auto valueOffset = value - this->m_baseValue; + auto halfStep = this->m_valueStep / 2.0f; + + if (valueOffset <= 0.0f) { + return CMath::fint((valueOffset - halfStep) / this->m_valueStep) * this->m_valueStep + this->m_baseValue; + } + + return CMath::fint((valueOffset + halfStep) / this->m_valueStep) * this->m_valueStep + this->m_baseValue; } void CSimpleSlider::UnregisterRegion(CSimpleRegion* region) { diff --git a/src/ui/CSimpleSlider.hpp b/src/ui/CSimpleSlider.hpp index c2dce62..29f5109 100644 --- a/src/ui/CSimpleSlider.hpp +++ b/src/ui/CSimpleSlider.hpp @@ -57,7 +57,7 @@ class CSimpleSlider : public CSimpleFrame { void SetThumbTexture(CSimpleTexture* texture, int32_t drawLayer); void SetValue(float value); void SetValueStep(float valueStep); - float Sub96BC10(float value); + float StepValue(float value); }; #endif