| 4355 | } |
| 4356 | |
| 4357 | void CEditor::ResetZoomEnvelope(const std::shared_ptr<CEnvelope> &pEnvelope, int ActiveChannels) |
| 4358 | { |
| 4359 | auto [Bottom, Top] = pEnvelope->GetValueRange(ActiveChannels); |
| 4360 | float EndTime = pEnvelope->EndTime(); |
| 4361 | float ValueRange = absolute(Top - Bottom); |
| 4362 | |
| 4363 | if(ValueRange < m_ZoomEnvelopeY.GetMinValue()) |
| 4364 | { |
| 4365 | // Set view to some sane default if range is too small |
| 4366 | m_OffsetEnvelopeY = 0.5f - ValueRange / m_ZoomEnvelopeY.GetMinValue() / 2.0f - Bottom / m_ZoomEnvelopeY.GetMinValue(); |
| 4367 | m_ZoomEnvelopeY.SetValueInstant(m_ZoomEnvelopeY.GetMinValue()); |
| 4368 | } |
| 4369 | else if(ValueRange > m_ZoomEnvelopeY.GetMaxValue()) |
| 4370 | { |
| 4371 | m_OffsetEnvelopeY = -Bottom / m_ZoomEnvelopeY.GetMaxValue(); |
| 4372 | m_ZoomEnvelopeY.SetValueInstant(m_ZoomEnvelopeY.GetMaxValue()); |
| 4373 | } |
| 4374 | else |
| 4375 | { |
| 4376 | // calculate biggest possible spacing |
| 4377 | float SpacingFactor = minimum(1.25f, m_ZoomEnvelopeY.GetMaxValue() / ValueRange); |
| 4378 | m_ZoomEnvelopeY.SetValueInstant(SpacingFactor * ValueRange); |
| 4379 | float Space = 1.0f / SpacingFactor; |
| 4380 | float Spacing = (1.0f - Space) / 2.0f; |
| 4381 | |
| 4382 | if(Top >= 0 && Bottom >= 0) |
| 4383 | m_OffsetEnvelopeY = Spacing - Bottom / m_ZoomEnvelopeY.GetValue(); |
| 4384 | else if(Top <= 0 && Bottom <= 0) |
| 4385 | m_OffsetEnvelopeY = Spacing - Bottom / m_ZoomEnvelopeY.GetValue(); |
| 4386 | else |
| 4387 | m_OffsetEnvelopeY = Spacing + Space * absolute(Bottom) / ValueRange; |
| 4388 | } |
| 4389 | |
| 4390 | if(EndTime < m_ZoomEnvelopeX.GetMinValue()) |
| 4391 | { |
| 4392 | m_OffsetEnvelopeX = 0.5f - EndTime / m_ZoomEnvelopeX.GetMinValue(); |
| 4393 | m_ZoomEnvelopeX.SetValueInstant(m_ZoomEnvelopeX.GetMinValue()); |
| 4394 | } |
| 4395 | else if(EndTime > m_ZoomEnvelopeX.GetMaxValue()) |
| 4396 | { |
| 4397 | m_OffsetEnvelopeX = 0.0f; |
| 4398 | m_ZoomEnvelopeX.SetValueInstant(m_ZoomEnvelopeX.GetMaxValue()); |
| 4399 | } |
| 4400 | else |
| 4401 | { |
| 4402 | float SpacingFactor = minimum(1.25f, m_ZoomEnvelopeX.GetMaxValue() / EndTime); |
| 4403 | m_ZoomEnvelopeX.SetValueInstant(SpacingFactor * EndTime); |
| 4404 | float Space = 1.0f / SpacingFactor; |
| 4405 | float Spacing = (1.0f - Space) / 2.0f; |
| 4406 | |
| 4407 | m_OffsetEnvelopeX = Spacing; |
| 4408 | } |
| 4409 | } |
| 4410 | |
| 4411 | float CEditor::ScreenToEnvelopeX(const CUIRect &View, float x) const |
| 4412 | { |
nothing calls this directly
no test coverage detected