void EffectAutoDuckPanel::OnLeftDown(wxMouseEvent & evt) { EControlPoint nearest = GetNearestControlPoint(evt.GetPosition()); if (nearest != none) { // this control point has been clicked mMouseDownPoint = evt.GetPosition(); mCurrentControlPoint = nearest; mControlPointMoveActivated = false; for (int i = 0; i < AUTO_DUCK_PANEL_NUM_CONTROL_POINTS; i++) mMoveStartControlPoints[i] = mControlPoints[i]; CaptureMouse(); } }
void EffectAutoDuckPanel::OnMotion(wxMouseEvent & evt) { switch (GetNearestControlPoint(evt.GetPosition())) { case none: SetCursor(wxNullCursor); break; case innerFadeDown: case innerFadeUp: case outerFadeDown: case outerFadeUp: SetCursor(wxCursor(wxCURSOR_SIZEWE)); break; case duckAmount: SetCursor(wxCursor(wxCURSOR_SIZENS)); break; } if (mCurrentControlPoint != none) { if (!mControlPointMoveActivated) { int dist; if (mCurrentControlPoint == duckAmount) dist = abs(evt.GetY() - mMouseDownPoint.y); else dist = abs(evt.GetX() - mMouseDownPoint.x); if (dist >= CONTROL_POINT_MIN_MOVE) mControlPointMoveActivated = true; } if (mControlPointMoveActivated) { float newValue; switch (mCurrentControlPoint) { case outerFadeDown: newValue = ((double)(FADE_DOWN_START - evt.GetX())) / FADE_SCALE; mEffect->mOuterFadeDownLen = TrapDouble(newValue, MIN_OuterFadeDownLen, MAX_OuterFadeDownLen); break; case outerFadeUp: newValue = ((double)(evt.GetX() - FADE_UP_START)) / FADE_SCALE; mEffect->mOuterFadeUpLen = TrapDouble(newValue, MIN_OuterFadeUpLen, MAX_OuterFadeUpLen); break; case innerFadeDown: newValue = ((double)(evt.GetX() - FADE_DOWN_START)) / FADE_SCALE; mEffect->mInnerFadeDownLen = TrapDouble(newValue, MIN_InnerFadeDownLen, MAX_InnerFadeDownLen); break; case innerFadeUp: newValue = ((double)(FADE_UP_START - evt.GetX())) / FADE_SCALE; mEffect->mInnerFadeUpLen = TrapDouble(newValue, MIN_InnerFadeUpLen, MAX_InnerFadeUpLen); break; case duckAmount: newValue = ((double)(DUCK_AMOUNT_START - evt.GetY())) / DUCK_AMOUNT_SCALE; mEffect->mDuckAmountDb = TrapDouble(newValue, MIN_DuckAmountDb, MAX_DuckAmountDb); break; case none: wxASSERT(false); // should not happen } mEffect->TransferDataToWindow(); Refresh(false); } } }
void EffectAutoDuckPanel::OnMotion(wxMouseEvent &evt) { switch (GetNearestControlPoint(evt.GetPosition())) { case none: SetCursor(wxNullCursor); break; case innerFadeDown: case innerFadeUp: case outerFadeDown: case outerFadeUp: SetCursor(wxCursor(wxCURSOR_SIZEWE)); break; case duckAmount: SetCursor(wxCursor(wxCURSOR_SIZENS)); break; } if (mCurrentControlPoint != none) { if (!mControlPointMoveActivated) { int dist; if (mCurrentControlPoint == duckAmount) dist = abs(evt.GetY() - mMouseDownPoint.y); else dist = abs(evt.GetX() - mMouseDownPoint.x); if (dist >= CONTROL_POINT_MIN_MOVE) mControlPointMoveActivated = true; } if (mControlPointMoveActivated) { float newValue; switch (mCurrentControlPoint) { case outerFadeDown: newValue = ((double)(FADE_DOWN_START - evt.GetX())) / FADE_SCALE; if (newValue < MIN_FADE) newValue = MIN_FADE; if (newValue > MAX_FADE) newValue = MAX_FADE; mParent->mOuterFadeDownLenBox->SetValue( Internat::ToDisplayString(newValue)); break; case outerFadeUp: newValue = ((double)(evt.GetX() - FADE_UP_START)) / FADE_SCALE; if (newValue < MIN_FADE) newValue = MIN_FADE; if (newValue > MAX_FADE) newValue = MAX_FADE; mParent->mOuterFadeUpLenBox->SetValue( Internat::ToDisplayString(newValue)); break; case innerFadeDown: newValue = ((double)(evt.GetX() - FADE_DOWN_START)) / FADE_SCALE; if (newValue < MIN_FADE) newValue = MIN_FADE; if (newValue > MAX_FADE) newValue = MAX_FADE; mParent->mInnerFadeDownLenBox->SetValue( Internat::ToDisplayString(newValue)); break; case innerFadeUp: newValue = ((double)(FADE_UP_START - evt.GetX())) / FADE_SCALE; if (newValue < MIN_FADE) newValue = MIN_FADE; if (newValue > MAX_FADE) newValue = MAX_FADE; mParent->mInnerFadeUpLenBox->SetValue( Internat::ToDisplayString(newValue)); break; case duckAmount: newValue = ((double)(DUCK_AMOUNT_START - evt.GetY())) / DUCK_AMOUNT_SCALE; if (newValue < MIN_DUCK_AMOUNT) newValue = MIN_DUCK_AMOUNT; if (newValue > MAX_DUCK_AMOUNT) newValue = MAX_DUCK_AMOUNT; mParent->mDuckAmountDbBox->SetValue( Internat::ToDisplayString(newValue)); break; case none: wxASSERT(false); // should not happen } Refresh(false); } } }