diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 77b98f8afc0a180133b48a9ca839ba8b66a7bfd0..76a4297679e484a31a33238838f5f353b1795c41 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -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); diff --git a/src/ViewInfo.cpp b/src/ViewInfo.cpp index 6f659563b3bc839d756526ef00ef753545a6ed71..1b8b77099fda13e186180305c56cb88a5983b2e0 100644 --- a/src/ViewInfo.cpp +++ b/src/ViewInfo.cpp @@ -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