| 362 | } |
| 363 | |
| 364 | void FloatSlider::SetValueForMouse(float x, float y) |
| 365 | { |
| 366 | float* var = GetModifyValue(); |
| 367 | float fX = x; |
| 368 | if (GetKeyModifiers() & kModifier_Shift) |
| 369 | { |
| 370 | if (mFineRefX == -999) |
| 371 | { |
| 372 | mFineRefX = x; |
| 373 | } |
| 374 | float precision = mShowDigits != -1 ? 100 : 10; |
| 375 | fX = mFineRefX + (fX - mFineRefX) / precision; |
| 376 | } |
| 377 | else |
| 378 | { |
| 379 | mFineRefX = -999; |
| 380 | } |
| 381 | float oldVal = *var; |
| 382 | float pos = ofMap(fX + mX, mX + 1, mX + mWidth - 1, 0.0f, 1.0f); |
| 383 | |
| 384 | if (AdjustSmooth()) |
| 385 | { |
| 386 | mSmooth = PosToVal(pos, false); |
| 387 | SmoothUpdated(); |
| 388 | return; |
| 389 | } |
| 390 | |
| 391 | *var = PosToVal(pos, false); |
| 392 | if (mRelative && (mModulator == nullptr || mModulator->Active() == false)) |
| 393 | { |
| 394 | if (!mTouching || mRelativeOffset == -999) |
| 395 | { |
| 396 | mRelativeOffset = *var; |
| 397 | *var = 0; |
| 398 | } |
| 399 | else |
| 400 | { |
| 401 | *var -= mRelativeOffset; |
| 402 | } |
| 403 | } |
| 404 | *var = ofClamp(*var, mMin, mMax); |
| 405 | |
| 406 | if (oldVal != *var) |
| 407 | { |
| 408 | mOwner->FloatSliderUpdated(this, oldVal, NextBufferTime(false)); |
| 409 | } |
| 410 | |
| 411 | if (mModulator && mModulator->Active() && mModulator->CanAdjustRange()) |
| 412 | { |
| 413 | float move = (y - mRefY) * -.003f; |
| 414 | float change = move * (mMax - mMin); |
| 415 | mModulator->GetMin() = ofClamp(mModulator->GetMin() + change, mMin, mModulator->GetMax()); |
| 416 | mRefY = y; |
| 417 | } |
| 418 | } |
| 419 | |
| 420 | bool FloatSlider::AdjustSmooth() const |
| 421 | { |
nothing calls this directly
no test coverage detected