//------------------------------------------------------------------------ bool CSlider::onWheel (const CPoint& where, const float &distance, const CButtonState &buttons) { if (!getMouseEnabled ()) return false; float _distance = distance; if (styleIsInverseStyle (style)) _distance *= -1.f; float normValue = getValueNormalized (); if (buttons & kZoomModifier) normValue += 0.1f * _distance * wheelInc; else normValue += _distance * wheelInc; setValueNormalized (normValue); if (isDirty ()) { invalid (); // begin of edit parameter beginEdit (); valueChanged (); // end of edit parameter endEdit (); } return true; }
//------------------------------------------------------------------------ int32_t CSlider::onKeyDown (VstKeyCode& keyCode) { switch (keyCode.virt) { case VKEY_UP : case VKEY_RIGHT : case VKEY_DOWN : case VKEY_LEFT : { float distance = 1.f; bool isInverse = styleIsInverseStyle (style); if ((keyCode.virt == VKEY_DOWN && !isInverse) || (keyCode.virt == VKEY_UP && isInverse) || (keyCode.virt == VKEY_LEFT && !isInverse) || (keyCode.virt == VKEY_RIGHT && isInverse)) { distance = -distance; } float normValue = getValueNormalized (); if (mapVstKeyModifier (keyCode.modifier) & kZoomModifier) normValue += 0.1f * distance * wheelInc; else normValue += distance * wheelInc; setValueNormalized (normValue); if (isDirty ()) { invalid (); // begin of edit parameter beginEdit (); valueChanged (); // end of edit parameter endEdit (); } return 1; } } return -1; }
//----------------------------------------------------------------------------- void CSegmentButton::setSelectedSegment (uint32_t index) { setValueNormalized (static_cast<float> (index) / static_cast<float> (segments.size () - 1)); invalid (); }
//------------------------------------------------------------------------ CMouseEventResult CSlider::onMouseMoved (CPoint& where, const CButtonState& _buttons) { if (isEditing ()) { CButtonState buttons (_buttons); if (kAlwaysUseZoomFactor) buttons |= kZoomModifier; if (buttons & kLButton) { if (kAlwaysUseZoomFactor) { CCoord distance = fabs ((style & kHorizontal) ? where.y - mouseStartPoint.y : where.x - mouseStartPoint.x); float newZoomFactor = 1.f; if (distance > ((style & kHorizontal) ? getHeight () : getWidth ())) { newZoomFactor = (float)(distance / ((style & kHorizontal) ? getHeight () : getWidth ())); newZoomFactor = static_cast<int32_t>(newZoomFactor * 10.f) / 10.f; } if (zoomFactor != newZoomFactor) { zoomFactor = newZoomFactor; oldVal = (value - getMin ()) / getRange (); delta = calculateDelta (where); } } if (oldVal == getMin () - 1) oldVal = (value - getMin ()) / getRange (); if ((oldButton != buttons) && (buttons & kZoomModifier)) { oldVal = (value - getMin ()) / getRange (); oldButton = buttons; } else if (!(buttons & kZoomModifier)) oldVal = (value - getMin ()) / getRange (); float normValue; if (style & kHorizontal) normValue = (float)(where.x - delta) / (float)rangeHandle; else normValue = (float)(where.y - delta) / (float)rangeHandle; if (style & kRight || style & kBottom) normValue = 1.f - normValue; if (buttons & kZoomModifier) normValue = oldVal + ((normValue - oldVal) / zoomFactor); setValueNormalized (normValue); if (isDirty ()) { valueChanged (); invalid (); } } return kMouseEventHandled; } return kMouseEventNotHandled; }