mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-20 17:41:13 +02:00
Add min and max VZoom to SetTrackInfoCommand
This commit is contained in:
@@ -294,6 +294,8 @@ bool SetTrackVisualsCommand::DefineParams( ShuttleParams & S ){
|
|||||||
S.OptionalN( bHasScaleType ).DefineEnum( mScaleType, wxT("Scale"), kLinear, kScaleTypeStrings, nScaleTypes );
|
S.OptionalN( bHasScaleType ).DefineEnum( mScaleType, wxT("Scale"), kLinear, kScaleTypeStrings, nScaleTypes );
|
||||||
S.OptionalN( bHasColour ).DefineEnum( mColour, wxT("Color"), kColour0, kColourStrings, nColours );
|
S.OptionalN( bHasColour ).DefineEnum( mColour, wxT("Color"), kColour0, kColourStrings, nColours );
|
||||||
S.OptionalN( bHasVZoom ).DefineEnum( mVZoom, wxT("VZoom"), kReset, kZoomTypeStrings, nZoomTypes );
|
S.OptionalN( bHasVZoom ).DefineEnum( mVZoom, wxT("VZoom"), kReset, kZoomTypeStrings, nZoomTypes );
|
||||||
|
S.OptionalN( bHasVZoomTop ).Define( mVZoomTop, wxT("VZoomHigh"), 1.0, -2.0, 2.0 );
|
||||||
|
S.OptionalN( bHasVZoomBottom ).Define( mVZoomBottom, wxT("VZoomLow"), -1.0, -2.0, 2.0 );
|
||||||
|
|
||||||
S.OptionalN( bHasUseSpecPrefs ).Define( bUseSpecPrefs, wxT("SpecPrefs"), false );
|
S.OptionalN( bHasUseSpecPrefs ).Define( bUseSpecPrefs, wxT("SpecPrefs"), false );
|
||||||
S.OptionalN( bHasSpectralSelect ).Define( bSpectralSelect, wxT("SpectralSel"),true );
|
S.OptionalN( bHasSpectralSelect ).Define( bSpectralSelect, wxT("SpectralSel"),true );
|
||||||
@@ -318,6 +320,8 @@ void SetTrackVisualsCommand::PopulateOrExchange(ShuttleGui & S)
|
|||||||
S.Optional( bHasDisplayType ).TieChoice( _("Display:"), mDisplayType, &displays );
|
S.Optional( bHasDisplayType ).TieChoice( _("Display:"), mDisplayType, &displays );
|
||||||
S.Optional( bHasScaleType ).TieChoice( _("Scale:"), mScaleType, &scales );
|
S.Optional( bHasScaleType ).TieChoice( _("Scale:"), mScaleType, &scales );
|
||||||
S.Optional( bHasVZoom ).TieChoice( _("VZoom:"), mVZoom, &vzooms );
|
S.Optional( bHasVZoom ).TieChoice( _("VZoom:"), mVZoom, &vzooms );
|
||||||
|
S.Optional( bHasVZoomTop ).TieTextBox( _("VZoom Top:"), mVZoomTop );
|
||||||
|
S.Optional( bHasVZoomBottom ).TieTextBox( _("VZoom Bottom:"), mVZoomBottom );
|
||||||
}
|
}
|
||||||
S.EndMultiColumn();
|
S.EndMultiColumn();
|
||||||
S.StartMultiColumn(2, wxEXPAND);
|
S.StartMultiColumn(2, wxEXPAND);
|
||||||
@@ -335,11 +339,13 @@ bool SetTrackVisualsCommand::ApplyInner(const CommandContext & context, Track *
|
|||||||
static_cast<void>(context);
|
static_cast<void>(context);
|
||||||
auto wt = dynamic_cast<WaveTrack *>(t);
|
auto wt = dynamic_cast<WaveTrack *>(t);
|
||||||
//auto pt = dynamic_cast<PlayableTrack *>(t);
|
//auto pt = dynamic_cast<PlayableTrack *>(t);
|
||||||
|
static const double ZOOMLIMIT = 0.001f;
|
||||||
|
|
||||||
// You can get some intriguing effects by setting R and L channels to
|
// You can get some intriguing effects by setting R and L channels to
|
||||||
// different values.
|
// different values.
|
||||||
if( wt && bHasColour )
|
if( wt && bHasColour )
|
||||||
wt->SetWaveColorIndex( mColour );
|
wt->SetWaveColorIndex( mColour );
|
||||||
|
|
||||||
if( t && bHasHeight )
|
if( t && bHasHeight )
|
||||||
t->SetHeight( mHeight );
|
t->SetHeight( mHeight );
|
||||||
|
|
||||||
@@ -364,13 +370,41 @@ bool SetTrackVisualsCommand::ApplyInner(const CommandContext & context, Track *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( wt && (bHasVZoomTop || bHasVZoomBottom) && !bHasVZoom){
|
||||||
|
float vzmin, vzmax;
|
||||||
|
wt->GetDisplayBounds(&vzmin, &vzmax);
|
||||||
|
|
||||||
|
if ( !bHasVZoomTop ){
|
||||||
|
mVZoomTop = vzmax;
|
||||||
|
}
|
||||||
|
if ( !bHasVZoomBottom ){
|
||||||
|
mVZoomBottom = vzmin;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't use std::clamp until C++17
|
||||||
|
mVZoomTop = std::max(-2.0, std::min(mVZoomTop, 2.0));
|
||||||
|
mVZoomBottom = std::max(-2.0, std::min(mVZoomBottom, 2.0));
|
||||||
|
|
||||||
|
if (mVZoomBottom > mVZoomTop){
|
||||||
|
std::swap(mVZoomTop, mVZoomBottom);
|
||||||
|
}
|
||||||
|
if ( mVZoomTop - mVZoomBottom < ZOOMLIMIT ){
|
||||||
|
double c = (mVZoomBottom + mVZoomTop) / 2;
|
||||||
|
mVZoomBottom = c - ZOOMLIMIT / 2.0;
|
||||||
|
mVZoomTop = c + ZOOMLIMIT / 2.0;
|
||||||
|
}
|
||||||
|
wt->SetDisplayBounds(mVZoomBottom, mVZoomTop);
|
||||||
|
}
|
||||||
|
|
||||||
if( wt && bHasUseSpecPrefs ){
|
if( wt && bHasUseSpecPrefs ){
|
||||||
wt->UseSpectralPrefs( bUseSpecPrefs );
|
wt->UseSpectralPrefs( bUseSpecPrefs );
|
||||||
}
|
}
|
||||||
if( wt && bHasSpectralSelect )
|
if( wt && bHasSpectralSelect ){
|
||||||
wt->GetSpectrogramSettings().spectralSelection = bSpectralSelect;
|
wt->GetSpectrogramSettings().spectralSelection = bSpectralSelect;
|
||||||
if( wt && bHasGrayScale )
|
}
|
||||||
|
if( wt && bHasGrayScale ){
|
||||||
wt->GetSpectrogramSettings().isGrayscale = bGrayScale;
|
wt->GetSpectrogramSettings().isGrayscale = bGrayScale;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -118,6 +118,8 @@ public:
|
|||||||
int mDisplayType;
|
int mDisplayType;
|
||||||
int mScaleType;
|
int mScaleType;
|
||||||
int mVZoom;
|
int mVZoom;
|
||||||
|
double mVZoomTop;
|
||||||
|
double mVZoomBottom;
|
||||||
|
|
||||||
bool bUseSpecPrefs;
|
bool bUseSpecPrefs;
|
||||||
bool bSpectralSelect;
|
bool bSpectralSelect;
|
||||||
@@ -129,6 +131,8 @@ public:
|
|||||||
bool bHasDisplayType;
|
bool bHasDisplayType;
|
||||||
bool bHasScaleType;
|
bool bHasScaleType;
|
||||||
bool bHasVZoom;
|
bool bHasVZoom;
|
||||||
|
bool bHasVZoomTop;
|
||||||
|
bool bHasVZoomBottom;
|
||||||
|
|
||||||
bool bHasUseSpecPrefs;
|
bool bHasUseSpecPrefs;
|
||||||
bool bHasSpectralSelect;
|
bool bHasSpectralSelect;
|
||||||
|
Reference in New Issue
Block a user