fixed various caching issues when rapidly changing values

This commit is contained in:
itsmattkc
2019-09-09 04:07:51 +10:00
parent 6fcfd01c8f
commit ba7a10177f
37 changed files with 495 additions and 217 deletions
+10
View File
@@ -36,6 +36,16 @@ void FloatSlider::SetValue(const double &d)
SliderBase::SetValue(d);
}
void FloatSlider::SetMinimum(const double &d)
{
SetMinimumInternal(d);
}
void FloatSlider::SetMaximum(const double &d)
{
SetMaximumInternal(d);
}
void FloatSlider::SetDecimalPlaces(int i)
{
decimal_places_ = i;
+4
View File
@@ -33,6 +33,10 @@ public:
void SetValue(const double& d);
void SetMinimum(const double& d);
void SetMaximum(const double& d);
void SetDecimalPlaces(int i);
signals:
+10
View File
@@ -36,6 +36,16 @@ void IntegerSlider::SetValue(const int &v)
SliderBase::SetValue(v);
}
void IntegerSlider::SetMinimum(const int &d)
{
SetMinimumInternal(d);
}
void IntegerSlider::SetMaximum(const int &d)
{
SetMaximumInternal(d);
}
void IntegerSlider::ConvertValue(QVariant v)
{
emit ValueChanged(v.toInt());
+4
View File
@@ -33,6 +33,10 @@ public:
void SetValue(const int& v);
void SetMinimum(const int& d);
void SetMaximum(const int& d);
signals:
void ValueChanged(int);
+45 -12
View File
@@ -28,6 +28,8 @@ SliderBase::SliderBase(Mode mode, QWidget *parent) :
QStackedWidget(parent),
decimal_places_(1),
drag_multiplier_(1.0),
has_min_(false),
has_max_(false),
mode_(mode),
dragged_(false)
{
@@ -49,16 +51,14 @@ SliderBase::SliderBase(Mode mode, QWidget *parent) :
switch (mode_) {
case kString:
setCursor(Qt::PointingHandCursor);
value_ = "";
SetValue("");
break;
case kInteger:
case kFloat:
setCursor(Qt::SizeHorCursor);
value_ = 0;
SetValue(0);
break;
}
UpdateLabel(value_);
}
void SliderBase::SetDragMultiplier(const double &d)
@@ -77,11 +77,33 @@ const QVariant &SliderBase::Value()
void SliderBase::SetValue(const QVariant &v)
{
value_ = v;
value_ = ClampValue(v);
UpdateLabel(value_);
}
void SliderBase::SetMinimumInternal(const QVariant &v)
{
min_value_ = v;
has_min_ = true;
// Limit value by this new minimum value
if (value_ < min_value_) {
SetValue(min_value_);
}
}
void SliderBase::SetMaximumInternal(const QVariant &v)
{
max_value_ = v;
has_max_ = true;
// Limit value by this new maximum value
if (value_ > max_value_) {
SetValue(max_value_);
}
}
void SliderBase::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange) {
@@ -90,6 +112,19 @@ void SliderBase::changeEvent(QEvent *e)
QStackedWidget::changeEvent(e);
}
const QVariant &SliderBase::ClampValue(const QVariant &v)
{
if (has_min_ && v < min_value_) {
return min_value_;
}
if (has_max_ && v > max_value_) {
return max_value_;
}
return v;
}
void SliderBase::UpdateLabel(const QVariant &v)
{
switch (mode_) {
@@ -132,14 +167,12 @@ void SliderBase::LabelClicked()
// No-op
break;
case kInteger:
value_ = qRound(dragged_diff_);
SetValue(qRound(dragged_diff_));
break;
case kFloat:
value_ = dragged_diff_;
SetValue(dragged_diff_);
break;
}
UpdateLabel(value_);
} else {
// This was a simple click
@@ -177,6 +210,8 @@ void SliderBase::LabelDragged(int i)
temp_dragged_value_ = dragged_diff_;
}
temp_dragged_value_ = ClampValue(temp_dragged_value_);
UpdateLabel(temp_dragged_value_);
emit ValueChanged(temp_dragged_value_);
break;
@@ -210,9 +245,7 @@ void SliderBase::LineEditConfirmed()
}
if (is_valid) {
value_ = test_val;
UpdateLabel(value_);
SetValue(test_val);
emit ValueChanged(value_);
+12
View File
@@ -48,6 +48,10 @@ protected:
void SetValue(const QVariant& v);
void SetMinimumInternal(const QVariant& v);
void SetMaximumInternal(const QVariant& v);
void UpdateLabel(const QVariant& v);
virtual void changeEvent(QEvent* e) override;
@@ -57,12 +61,20 @@ protected:
double drag_multiplier_;
private:
const QVariant& ClampValue(const QVariant& v);
SliderLabel* label_;
SliderLineEdit* editor_;
QVariant value_;
bool has_min_;
QVariant min_value_;
bool has_max_;
QVariant max_value_;
Mode mode_;
bool dragged_;