MCPcopy Create free account
hub / github.com/ddnet/ddnet / ResetZoomEnvelope

Method ResetZoomEnvelope

src/game/editor/editor.cpp:4357–4409  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4355}
4356
4357void 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
4411float CEditor::ScreenToEnvelopeX(const CUIRect &View, float x) const
4412{

Callers

nothing calls this directly

Calls 8

absoluteFunction · 0.85
GetValueRangeMethod · 0.80
EndTimeMethod · 0.80
GetMinValueMethod · 0.80
SetValueInstantMethod · 0.80
GetMaxValueMethod · 0.80
GetValueMethod · 0.80
minimumFunction · 0.50

Tested by

no test coverage detected