Residuals from Bug 1296

Added forcing time64 to be positive.  Fixes problem where large negative value overflows into int.
More careful computation of TimeToPosition() so floor is only called with in range values.
Re-instated 'true' flags for hiddenMid calls, which I'd mistakenly dropped, so that (later) FishEye can distinguish.
This commit is contained in:
James Crook 2016-01-08 22:05:48 +00:00
parent 104e8b50ba
commit 53b8fd534e
2 changed files with 17 additions and 6 deletions

View File

@ -1590,7 +1590,9 @@ struct ClipParameters
hiddenLeftOffset = 0;
if (tpre < 0) {
// Fix Bug #1296 caused by premature conversion to (int).
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset, 0 , false);
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset, 0 , true);
if( time64 < 0 )
time64 = 0;
hiddenLeftOffset = (time64 < rect.width) ? (int)time64 : rect.width;
hiddenMid.x += hiddenLeftOffset;
@ -1602,12 +1604,13 @@ struct ClipParameters
// of the track. Reduce the "hiddenMid" rect by the
// size of the blank area.
if (tpost > t1) {
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset+t1, 0 , false);
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset+t1, 0 , true);
if( time64 < 0 )
time64 = 0;
const int hiddenRightOffset = (time64 < rect.width) ? (int)time64 : rect.width;
hiddenMid.width = std::max(0, hiddenRightOffset - hiddenLeftOffset);
}
// The variable "mid" will be the rectangle containing the
// actual waveform, as distorted by the fisheye,
// as opposed to any blank area before or after the track.
@ -1619,6 +1622,8 @@ struct ClipParameters
leftOffset = 0;
if (tpre < 0) {
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset, 0 , false);
if( time64 < 0 )
time64 = 0;
leftOffset = (time64 < rect.width) ? (int)time64 : rect.width;
mid.x += leftOffset;
@ -1631,6 +1636,8 @@ struct ClipParameters
// size of the blank area.
if (tpost > t1) {
wxInt64 time64 = zoomInfo.TimeToPosition(tOffset+t1, 0 , false);
if( time64 < 0 )
time64 = 0;
const int distortedRightOffset = (time64 < rect.width) ? (int)time64 : rect.width;
mid.width = std::max(0, distortedRightOffset - leftOffset);

View File

@ -58,9 +58,13 @@ wxInt64 ZoomInfo::TimeToPosition(double projectTime,
, bool // ignoreFisheye
) const
{
return floor(0.5 +
zoom * (projectTime - h) + origin
);
double t = 0.5 + zoom * (projectTime - h) + origin ;
if( t < wxINT64_MIN )
return wxINT64_MIN;
if( t > wxINT64_MAX )
return wxINT64_MAX;
t = floor( t );
return t;
}
bool ZoomInfo::ZoomInAvailable() const