Get rational slider mostly working with new slider changes

This commit is contained in:
Thomas Wilshaw
2021-04-08 11:26:35 +01:00
parent 24726bee24
commit 7c123c56c3
4 changed files with 43 additions and 15 deletions
@@ -37,6 +37,7 @@
#include "widget/filefield/filefield.h"
#include "widget/slider/floatslider.h"
#include "widget/slider/integerslider.h"
#include "widget/slider/rationalslider.h"
#include "widget/videoparamedit/videoparamedit.h"
namespace olive {
@@ -76,7 +77,6 @@ void NodeParamViewWidgetBridge::CreateWidgets()
case NodeValue::kNone:
case NodeValue::kTexture:
case NodeValue::kMatrix:
case NodeValue::kRational:
case NodeValue::kSamples:
case NodeValue::kFootageJob:
case NodeValue::kShaderJob:
@@ -93,6 +93,11 @@ void NodeParamViewWidgetBridge::CreateWidgets()
CreateSliders<FloatSlider>(1);
break;
}
case NodeValue::kRational:
{
CreateSliders<RationalSlider>(1);
break;
}
case NodeValue::kVec2:
{
CreateSliders<FloatSlider>(2);
@@ -258,7 +263,6 @@ void NodeParamViewWidgetBridge::WidgetCallback()
case NodeValue::kTexture:
case NodeValue::kMatrix:
case NodeValue::kSamples:
case NodeValue::kRational:
case NodeValue::kFootageJob:
case NodeValue::kShaderJob:
case NodeValue::kSampleJob:
@@ -280,6 +284,13 @@ void NodeParamViewWidgetBridge::WidgetCallback()
ProcessSlider(slider, slider->GetValue());
break;
}
case NodeValue::kRational:
{
// Widget is a RationalSlider
RationalSlider* slider = static_cast<RationalSlider*>(sender());
ProcessSlider(slider, QVariant::fromValue(slider->GetValue()));;
break;
}
case NodeValue::kVec2:
{
// Widget is a FloatSlider
@@ -404,7 +415,6 @@ void NodeParamViewWidgetBridge::UpdateWidgetValues()
case NodeValue::kNone:
case NodeValue::kTexture:
case NodeValue::kMatrix:
case NodeValue::kRational:
case NodeValue::kSamples:
case NodeValue::kFootageJob:
case NodeValue::kShaderJob:
@@ -421,6 +431,11 @@ void NodeParamViewWidgetBridge::UpdateWidgetValues()
static_cast<FloatSlider*>(widgets_.first())->SetValue(input_.GetValueAtTime(node_time).toDouble());
break;
}
case NodeValue::kRational:
{
static_cast<RationalSlider*>(widgets_.first())->SetValue(input_.GetValueAtTime(node_time).value<rational>());
break;
}
case NodeValue::kVec2:
{
QVector2D vec2 = input_.GetValueAtTime(node_time).value<QVector2D>();
@@ -560,7 +575,7 @@ void NodeParamViewWidgetBridge::PropertyChanged(const QString& input, const QStr
static_cast<FloatSlider*>(widgets_.first())->SetMinimum(value.toDouble());
break;
case NodeValue::kRational:
// FIXME: Rational doesn't have a UI implementation yet
static_cast<RationalSlider*>(widgets_.first())->SetMinimum(value.value<rational>());
break;
case NodeValue::kVec2:
{
@@ -598,7 +613,7 @@ void NodeParamViewWidgetBridge::PropertyChanged(const QString& input, const QStr
static_cast<FloatSlider*>(widgets_.first())->SetMaximum(value.toDouble());
break;
case NodeValue::kRational:
// FIXME: Rational doesn't have a UI implementation yet
static_cast<RationalSlider*>(widgets_.first())->SetMaximum(value.value<rational>());
break;
case NodeValue::kVec2:
{
@@ -636,7 +651,7 @@ void NodeParamViewWidgetBridge::PropertyChanged(const QString& input, const QStr
static_cast<FloatSlider*>(widgets_.first())->SetOffset(value);
break;
case NodeValue::kRational:
// FIXME: Rational doesn't have a UI implementation yet
static_cast<RationalSlider*>(widgets_.first())->SetOffset(value);
break;
case NodeValue::kVec2:
{
+11 -4
View File
@@ -20,12 +20,12 @@
namespace olive {
RationalSlider::RationalSlider(rational timebase, QWidget *parent) :
RationalSlider::RationalSlider(QWidget *parent) :
SliderBase(SliderBase::kRational, parent),
display_type_(kTimecode),
decimal_places_(2),
autotrim_decimal_places_(false),
timebase_(timebase),
timebase_(rational(1,24)),
lock_display_type_(false)
{
connect(this, SIGNAL(ValueChanged(QVariant)), this, SLOT(ConvertValue(QVariant)));
@@ -33,6 +33,8 @@ RationalSlider::RationalSlider(rational timebase, QWidget *parent) :
connect(Core::instance(), &Core::TimecodeDisplayChanged, this, &RationalSlider::ChangeTimecodeDisplayType);
SetDisplayType(display_type_);
SetValue(rational(0, 0));
}
rational RationalSlider::GetValue()
@@ -50,6 +52,11 @@ void RationalSlider::SetDefaultValue(const rational &r)
SliderBase::SetDefaultValue(QVariant::fromValue(r));
}
void RationalSlider::SetDefaultValue(const QVariant &v) {
rational r = v.value<rational>();
SetDefaultValue(r);
}
void RationalSlider::SetMinimum(const rational &d)
{
SetMinimumInternal(QVariant::fromValue(d));
@@ -111,7 +118,7 @@ bool RationalSlider::LockDisplayType()
QString RationalSlider::ValueToString(const QVariant &v)
{
double time = v.value<rational>().toDouble();
double time = v.value<rational>().toDouble() + GetOffset().value<rational>().toDouble();
switch (display_type_) {
case kTimecode:
@@ -165,7 +172,7 @@ QVariant RationalSlider::StringToValue(const QString &s, bool *ok)
break;
}
return QVariant::fromValue(r);
return QVariant::fromValue(r - GetOffset().value<rational>());
}
double RationalSlider::AdjustDragDistanceInternal(const double &start, const double &drag)
+6 -1
View File
@@ -46,7 +46,7 @@ public:
kFloat
};
RationalSlider(rational timebase, QWidget* parent = nullptr);
RationalSlider(QWidget* parent = nullptr);
/**
* @brief Returns the sliders value as a rational
@@ -63,6 +63,11 @@ public:
*/
void SetDefaultValue(const rational& r);
/**
* @brief Sets the sliders default value
*/
void SetDefaultValue(const QVariant& v);
/**
* @brief Sets the sliders minimum value
*/
+5 -4
View File
@@ -331,9 +331,7 @@ void SliderBase::LadderDragged(int value, double multiplier)
{
double old_dragged_diff = dragged_diff_;
dragged_diff_ += value * drag_multiplier_ * multiplier;
double drag_val = AdjustDragDistanceInternal(value_.value<rational>().toDouble(), dragged_diff_);
rational d_v;
d_v = rational::fromDouble(drag_val);
temp_dragged_value_.setValue(d_v);
@@ -341,13 +339,16 @@ void SliderBase::LadderDragged(int value, double multiplier)
QVariant clamped = ClampValue(temp_dragged_value_);
if (clamped.value<rational>() != temp_dragged_value_.value<rational>()) {
temp_dragged_value_ = clamped;
dragged_diff_ = old_dragged_diff;
dragged_diff_ = (temp_dragged_value_.value<rational>() - value_.value<rational>()).toDouble();
}
UpdateLabel(temp_dragged_value_);
drag_ladder_->SetValue(ValueToString(temp_dragged_value_));
RepositionLadder();
if (!Config::Current()[QStringLiteral("UseSliderLadders")].toBool()) {
RepositionLadder();
}
emit ValueChanged(temp_dragged_value_);
break;