Add fine tune for STF slider
This commit is contained in:
+26
-3
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user