Add fine tune for STF slider

This commit is contained in:
2022-12-22 12:45:47 +01:00
parent 5cc8fdd83d
commit c1aca3ca65
2 changed files with 28 additions and 3 deletions
+26 -3
View File
@@ -21,6 +21,8 @@ STFSlider::STFSlider(QWidget *parent) : QWidget(parent)
m_midPoint = 0.5; m_midPoint = 0.5;
m_whitePoint = 1; m_whitePoint = 1;
m_grabbed = -1; m_grabbed = -1;
m_fineTune = false;
setToolTip(tr("Press Shift for fine tuning"));
} }
float STFSlider::blackPoint() const float STFSlider::blackPoint() const
@@ -94,20 +96,34 @@ void STFSlider::mouseMoveEvent(QMouseEvent *event)
else else
unsetCursor(); unsetCursor();
qreal x = (qreal)event->x()/width();
if(event->modifiers() & Qt::ShiftModifier && !m_fineTune)
{
m_fineTune = true;
m_fineTuneX = x;
}
if(!(event->modifiers() & Qt::ShiftModifier) && m_fineTune)
m_fineTune = false;
if(m_fineTune)
{
x = m_fineTuneX + (x - m_fineTuneX) * 0.2;
}
switch(m_grabbed) switch(m_grabbed)
{ {
case 0: case 0:
m_blackPoint = clamp((qreal)event->x()/width()); m_blackPoint = clamp(x);
m_whitePoint = std::max(m_whitePoint, m_blackPoint); m_whitePoint = std::max(m_whitePoint, m_blackPoint);
QToolTip::showText(event->globalPos(), QString::number(m_blackPoint), this); QToolTip::showText(event->globalPos(), QString::number(m_blackPoint), this);
break; break;
case 1: case 1:
m_midPoint = ((qreal)event->x()/width() - m_blackPoint) / (m_whitePoint - m_blackPoint); m_midPoint = (x - m_blackPoint) / (m_whitePoint - m_blackPoint);
m_midPoint = clamp(m_midPoint); m_midPoint = clamp(m_midPoint);
QToolTip::showText(event->globalPos(), QString::number(m_midPoint), this); QToolTip::showText(event->globalPos(), QString::number(m_midPoint), this);
break; break;
case 2: case 2:
m_whitePoint = clamp((qreal)event->x()/width()); m_whitePoint = clamp(x);
m_blackPoint = std::min(m_blackPoint, m_whitePoint); m_blackPoint = std::min(m_blackPoint, m_whitePoint);
QToolTip::showText(event->globalPos(), QString::number(m_whitePoint), this); QToolTip::showText(event->globalPos(), QString::number(m_whitePoint), this);
break; break;
@@ -121,6 +137,12 @@ void STFSlider::mouseMoveEvent(QMouseEvent *event)
void STFSlider::mousePressEvent(QMouseEvent *event) void STFSlider::mousePressEvent(QMouseEvent *event)
{ {
if(event->modifiers() & Qt::ShiftModifier)
{
m_fineTune = true;
m_fineTuneX = (qreal)event->x()/width();
}
if(std::abs((m_blackPoint + (m_whitePoint - m_blackPoint) * m_midPoint)*width() - event->x()) < 5) if(std::abs((m_blackPoint + (m_whitePoint - m_blackPoint) * m_midPoint)*width() - event->x()) < 5)
m_grabbed = 1; m_grabbed = 1;
else if(std::abs(m_blackPoint*width() - event->x()) < 5) else if(std::abs(m_blackPoint*width() - event->x()) < 5)
@@ -134,5 +156,6 @@ void STFSlider::mousePressEvent(QMouseEvent *event)
void STFSlider::mouseReleaseEvent(QMouseEvent *) void STFSlider::mouseReleaseEvent(QMouseEvent *)
{ {
m_grabbed = -1; m_grabbed = -1;
m_fineTune = false;
emit paramChanged(m_blackPoint, midPoint(), m_whitePoint); emit paramChanged(m_blackPoint, midPoint(), m_whitePoint);
} }
+2
View File
@@ -11,6 +11,8 @@ class STFSlider : public QWidget
float m_midPoint; float m_midPoint;
float m_whitePoint; float m_whitePoint;
int m_grabbed; int m_grabbed;
bool m_fineTune;
float m_fineTuneX;
public: public:
explicit STFSlider(QWidget *parent = nullptr); explicit STFSlider(QWidget *parent = nullptr);
float blackPoint() const; float blackPoint() const;