timelinescaledobject: implemented minimum scale

Used by Viewer to keep TimeRuler and WaveformView within restrictions.
This commit is contained in:
itsmattkc
2020-03-14 22:34:23 +11:00
parent 7f2dcc8200
commit a56484d3e6
4 changed files with 31 additions and 1 deletions
@@ -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_;
};
+12
View File
@@ -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)
+2
View File
@@ -134,6 +134,8 @@ private:
int CalculateDivider();
void UpdateMinimumScale();
QStackedWidget* stack_;
ViewerSizer* sizer_;