mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-19 09:30:06 +02:00
Bug830 - Paste should not destroy envelope information in the clipboard
This commit is contained in:
parent
e26ab98e0e
commit
fe12fce270
@ -656,14 +656,14 @@ void Envelope::CollapseRegion(double t0, double t1)
|
|||||||
// envelope point applies to the first sample, but the t=tracklen
|
// envelope point applies to the first sample, but the t=tracklen
|
||||||
// envelope point applies one-past the last actual sample.
|
// envelope point applies one-past the last actual sample.
|
||||||
// Rather than going to a .5-offset-index, we special case the framing.
|
// Rather than going to a .5-offset-index, we special case the framing.
|
||||||
void Envelope::Paste(double t0, Envelope *e)
|
void Envelope::Paste(double t0, const Envelope *e)
|
||||||
{
|
{
|
||||||
bool pointsAdded = false;
|
const bool wasEmpty = (this->mEnv.Count() == 0);
|
||||||
|
|
||||||
// JC: The old analysis of cases and the resulting code here is way more complex than needed.
|
// JC: The old analysis of cases and the resulting code here is way more complex than needed.
|
||||||
// TODO: simplify the analysis and simplify the code.
|
// TODO: simplify the analysis and simplify the code.
|
||||||
|
|
||||||
if (e->mEnv.Count() == 0 && this->mEnv.Count() == 0 && e->mDefaultValue == this->mDefaultValue)
|
if (e->mEnv.Count() == 0 && wasEmpty && e->mDefaultValue == this->mDefaultValue)
|
||||||
{
|
{
|
||||||
// msmeyer: The envelope is empty and has the same default value, so
|
// msmeyer: The envelope is empty and has the same default value, so
|
||||||
// there is nothing that must be inserted, just return. This avoids
|
// there is nothing that must be inserted, just return. This avoids
|
||||||
@ -672,16 +672,6 @@ void Envelope::Paste(double t0, Envelope *e)
|
|||||||
mTrackLen += e->mTrackLen;
|
mTrackLen += e->mTrackLen;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this->mEnv.Count() != 0)
|
|
||||||
{
|
|
||||||
// inserting a clip with a possibly empty envelope into one with an envelope
|
|
||||||
// so add end points to e, in case they are not there
|
|
||||||
double leftval = e->GetValue(0+e->mOffset);
|
|
||||||
double rightval = e->GetValue(e->mTrackLen+e->mOffset);
|
|
||||||
e->Insert(0, leftval);
|
|
||||||
e->Insert(e->mTrackLen, rightval);
|
|
||||||
pointsAdded = true; // we need to delete them later so's not to corrupt 'e' for later use
|
|
||||||
}
|
|
||||||
|
|
||||||
t0 = wxMin(t0 - mOffset, mTrackLen); // t0 now has origin of zero
|
t0 = wxMin(t0 - mOffset, mTrackLen); // t0 now has origin of zero
|
||||||
double deltat = e->mTrackLen;
|
double deltat = e->mTrackLen;
|
||||||
@ -834,17 +824,24 @@ Old analysis of cases:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy points from inside the selection
|
// Copy points from inside the selection
|
||||||
|
|
||||||
|
if (!wasEmpty) {
|
||||||
|
// Add end points in case they are not not in e.
|
||||||
|
// If they are in e, no harm, because the repeated Insert
|
||||||
|
// calls for the start and end times will have no effect.
|
||||||
|
const double leftval = e->GetValue(0 + e->mOffset);
|
||||||
|
const double rightval = e->GetValue(e->mTrackLen + e->mOffset);
|
||||||
|
Insert(t0, leftval);
|
||||||
|
Insert(t0 + e->mTrackLen, rightval);
|
||||||
|
}
|
||||||
|
|
||||||
len = e->mEnv.Count();
|
len = e->mEnv.Count();
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
pos=Insert(t0 + e->mEnv[i]->GetT(), e->mEnv[i]->GetVal());
|
Insert(t0 + e->mEnv[i]->GetT(), e->mEnv[i]->GetVal());
|
||||||
|
|
||||||
/* if(len != 0)
|
/* if(len != 0)
|
||||||
for (i = 0; i < mEnv.Count(); i++)
|
for (i = 0; i < mEnv.Count(); i++)
|
||||||
wxLogDebug(wxT("Fixed i %d when %.18f val %f"),i,mEnv[i]->GetT(),mEnv[i]->GetVal()); */
|
wxLogDebug(wxT("Fixed i %d when %.18f val %f"),i,mEnv[i]->GetT(),mEnv[i]->GetVal()); */
|
||||||
|
|
||||||
if(pointsAdded)
|
|
||||||
while(e->mEnv.Count() != 0)
|
|
||||||
e->Delete(0); // they were not there when we entered this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes 'unneeded' points, starting from the left.
|
// Deletes 'unneeded' points, starting from the left.
|
||||||
|
@ -140,7 +140,7 @@ class Envelope : public XMLTagHandler {
|
|||||||
// Handling Cut/Copy/Paste events
|
// Handling Cut/Copy/Paste events
|
||||||
void CollapseRegion(double t0, double t1);
|
void CollapseRegion(double t0, double t1);
|
||||||
void CopyFrom(const Envelope * e, double t0, double t1);
|
void CopyFrom(const Envelope * e, double t0, double t1);
|
||||||
void Paste(double t0, Envelope *e);
|
void Paste(double t0, const Envelope *e);
|
||||||
void InsertSpace(double t0, double tlen);
|
void InsertSpace(double t0, double tlen);
|
||||||
void RemoveUnneededPoints(double time = -1, double tolerence = 0.001);
|
void RemoveUnneededPoints(double time = -1, double tolerence = 0.001);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user