| 178 | } |
| 179 | |
| 180 | void CUITrackBar::UpdatePosRelativeToMouse() |
| 181 | { |
| 182 | float _bkf = 0.0f; |
| 183 | int _bki = 0; |
| 184 | if (m_b_is_float) |
| 185 | { |
| 186 | _bkf = m_f_val; |
| 187 | } |
| 188 | else |
| 189 | { |
| 190 | _bki = m_i_val; |
| 191 | } |
| 192 | |
| 193 | float btn_width = m_pSlider->GetWidth(); |
| 194 | float window_width = GetWidth(); |
| 195 | float fpos = cursor_pos.x; |
| 196 | |
| 197 | if (GetInvert()) |
| 198 | fpos = window_width - fpos; |
| 199 | |
| 200 | if (fpos < btn_width / 2) |
| 201 | fpos = btn_width / 2; |
| 202 | else if (fpos > window_width - btn_width / 2) |
| 203 | fpos = window_width - btn_width / 2; |
| 204 | |
| 205 | float __fval; |
| 206 | float __fmax = (m_b_is_float) ? m_f_max : (float)m_i_max; |
| 207 | float __fmin = (m_b_is_float) ? m_f_min : (float)m_i_min; |
| 208 | float __fstep = (m_b_is_float) ? m_f_step : (float)m_i_step; |
| 209 | |
| 210 | __fval = (__fmax - __fmin) * (fpos - btn_width / 2) / (window_width - btn_width) + __fmin; |
| 211 | |
| 212 | float _d = (__fval - __fmin); |
| 213 | |
| 214 | float _v = _d / __fstep; |
| 215 | int _vi = iFloor(_v); |
| 216 | float _vf = __fstep * _vi; |
| 217 | |
| 218 | if (_d - _vf > __fstep / 2.0f) |
| 219 | _vf += __fstep; |
| 220 | |
| 221 | __fval = __fmin + _vf; |
| 222 | |
| 223 | clamp(__fval, __fmin, __fmax); |
| 224 | |
| 225 | if (m_b_is_float) |
| 226 | m_f_val = __fval; |
| 227 | else |
| 228 | m_i_val = iFloor(__fval); |
| 229 | |
| 230 | bool b_ch = false; |
| 231 | if (m_b_is_float) |
| 232 | { |
| 233 | b_ch = !fsimilar(_bkf, m_f_val); |
| 234 | } |
| 235 | else |
| 236 | { |
| 237 | b_ch = (_bki != m_i_val); |
nothing calls this directly
no test coverage detected