diff --git a/lib/tlTimelineUI/AudioClipItem.cpp b/lib/tlTimelineUI/AudioClipItem.cpp index 84151dc7..a83097da 100644 --- a/lib/tlTimelineUI/AudioClipItem.cpp +++ b/lib/tlTimelineUI/AudioClipItem.cpp @@ -253,7 +253,7 @@ namespace tl if (_displayOptions.waveformWidth > 0 && p.ioInfo) { - const int w = _sizeHint.w; + const int w = g.w(); for (int x = 0; x < w; x += _displayOptions.waveformWidth) { const math::Box2i box( diff --git a/lib/tlTimelineUI/TimelineWidget.cpp b/lib/tlTimelineUI/TimelineWidget.cpp index bdb2d951..38c340f3 100644 --- a/lib/tlTimelineUI/TimelineWidget.cpp +++ b/lib/tlTimelineUI/TimelineWidget.cpp @@ -545,7 +545,7 @@ namespace tl TLRENDER_P(); const int w = _geometry.w(); const double zoomMin = _getTimelineScale(); - const double zoomMax = w; + const double zoomMax = _getTimelineScaleMax(); const double zoomClamped = math::clamp(zoomNew, zoomMin, zoomMax); if (zoomClamped != p.scale) { @@ -564,7 +564,7 @@ namespace tl double TimelineWidget::_getTimelineScale() const { TLRENDER_P(); - double out = 100.0; + double out = 1.0; if (p.player) { const otime::TimeRange& timeRange = p.player->getTimeRange(); @@ -578,6 +578,30 @@ namespace tl return out; } + double TimelineWidget::_getTimelineScaleMax() const + { + TLRENDER_P(); + double out = 1.0; + if (p.player) + { + const math::Box2i scrollViewport = p.scrollWidget->getViewport(); + const otime::TimeRange& timeRange = p.player->getTimeRange(); + const double duration = timeRange.duration().rescaled_to(1.0).value(); + if (duration < 1.0) + { + if (duration > 0.0) + { + out = scrollViewport.w() / duration; + } + } + else + { + out = scrollViewport.w(); + } + } + return out; + } + void TimelineWidget::_setItemScale() { TLRENDER_P(); diff --git a/lib/tlTimelineUI/TimelineWidget.h b/lib/tlTimelineUI/TimelineWidget.h index 6ec0ea61..437330aa 100644 --- a/lib/tlTimelineUI/TimelineWidget.h +++ b/lib/tlTimelineUI/TimelineWidget.h @@ -182,6 +182,7 @@ namespace tl const math::Vector2i& scrollPos); double _getTimelineScale() const; + double _getTimelineScaleMax() const; void _setItemScale(); void _setItemScale( diff --git a/lib/tlTimelineUI/VideoClipItem.cpp b/lib/tlTimelineUI/VideoClipItem.cpp index 2fc418b6..bbcdb312 100644 --- a/lib/tlTimelineUI/VideoClipItem.cpp +++ b/lib/tlTimelineUI/VideoClipItem.cpp @@ -266,7 +266,7 @@ namespace tl 0; if (thumbnailWidth > 0) { - const int w = _sizeHint.w; + const int w = g.w(); for (int x = 0; x < w; x += thumbnailWidth) { const math::Box2i box( diff --git a/lib/tlUI/ThumbnailSystem.cpp b/lib/tlUI/ThumbnailSystem.cpp index 5d447daf..9a3b3d5b 100644 --- a/lib/tlUI/ThumbnailSystem.cpp +++ b/lib/tlUI/ThumbnailSystem.cpp @@ -852,11 +852,11 @@ namespace tl //std::cout << x << ": " << x0 << " " << x1 << std::endl; audio::F32_T min = 0.F; audio::F32_T max = 0.F; - if (x0 < x1) + if (x0 <= x1) { min = audio::F32Range.getMax(); max = audio::F32Range.getMin(); - for (int i = x0; i < x1; ++i) + for (int i = x0; i <= x1 && i < sampleCount; ++i) { const audio::F32_T v = *(data + i * info.channelCount); min = std::min(min, v);