timelinescaledobject: implemented minimum scale
Used by Viewer to keep TimeRuler and WaveformView within restrictions.
This commit is contained in:
@@ -3,8 +3,11 @@
|
||||
#include <cfloat>
|
||||
#include <QtMath>
|
||||
|
||||
#include "common/clamp.h"
|
||||
|
||||
TimelineScaledObject::TimelineScaledObject() :
|
||||
scale_(1.0),
|
||||
min_scale_(0),
|
||||
max_scale_(DBL_MAX)
|
||||
{
|
||||
|
||||
@@ -64,6 +67,15 @@ void TimelineScaledObject::SetMaximumScale(const double &max)
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineScaledObject::SetMinimumScale(const double &min)
|
||||
{
|
||||
min_scale_ = min;
|
||||
|
||||
if (GetScale() < min_scale_) {
|
||||
SetScale(min_scale_);
|
||||
}
|
||||
}
|
||||
|
||||
const double& TimelineScaledObject::GetScale() const
|
||||
{
|
||||
return scale_;
|
||||
@@ -73,7 +85,7 @@ void TimelineScaledObject::SetScale(const double& scale)
|
||||
{
|
||||
Q_ASSERT(scale > 0);
|
||||
|
||||
scale_ = qMin(scale, max_scale_);
|
||||
scale_ = clamp(scale, min_scale_, max_scale_);
|
||||
|
||||
ScaleChangedEvent(scale_);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ protected:
|
||||
|
||||
void SetMaximumScale(const double& max);
|
||||
|
||||
void SetMinimumScale(const double& min);
|
||||
|
||||
private:
|
||||
rational timebase_;
|
||||
|
||||
@@ -39,6 +41,8 @@ private:
|
||||
|
||||
double scale_;
|
||||
|
||||
double min_scale_;
|
||||
|
||||
double max_scale_;
|
||||
|
||||
};
|
||||
|
||||
@@ -202,6 +202,8 @@ void ViewerWidget::resizeEvent(QResizeEvent *event)
|
||||
|
||||
UpdateRendererParameters();
|
||||
}
|
||||
|
||||
UpdateMinimumScale();
|
||||
}
|
||||
|
||||
void ViewerWidget::TogglePlayPause()
|
||||
@@ -324,6 +326,15 @@ int ViewerWidget::CalculateDivider()
|
||||
return divider_;
|
||||
}
|
||||
|
||||
void ViewerWidget::UpdateMinimumScale()
|
||||
{
|
||||
if (!GetConnectedNode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SetMinimumScale(static_cast<double>(ruler()->width()) / GetConnectedNode()->Length().toDouble());
|
||||
}
|
||||
|
||||
void ViewerWidget::UpdateStack()
|
||||
{
|
||||
if (!GetConnectedNode() || GetConnectedNode()->texture_input()->IsConnected()) {
|
||||
@@ -554,6 +565,7 @@ void ViewerWidget::LengthChangedSlot(const rational &length)
|
||||
{
|
||||
controls_->SetEndTime(Timecode::time_to_timestamp(length, timebase()));
|
||||
ruler()->SetCacheStatusLength(length);
|
||||
UpdateMinimumScale();
|
||||
}
|
||||
|
||||
void ViewerWidget::ColorDisplayChanged(QAction* action)
|
||||
|
||||
@@ -134,6 +134,8 @@ private:
|
||||
|
||||
int CalculateDivider();
|
||||
|
||||
void UpdateMinimumScale();
|
||||
|
||||
QStackedWidget* stack_;
|
||||
|
||||
ViewerSizer* sizer_;
|
||||
|
||||
Reference in New Issue
Block a user