Merge pull request #2799 from martinvanzijl/move-curve-points-with-arrow-keys

Add ability to move curve points using arrow keys
This commit is contained in:
Rodney 2019-11-02 13:11:03 -07:00 committed by GitHub
commit 07a4704092
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 0 deletions

View file

@ -93,6 +93,11 @@ protected:
void removeControlPoint(int index);
void removeCurrentControlPoint();
void selectNextControlPoint();
void selectPreviousControlPoint();
void moveCurrentControlPointUp();
void moveCurrentControlPointDown();
QPainterPath getPainterPath();
void paintEvent(QPaintEvent *) override;

View file

@ -460,6 +460,64 @@ void ChennelCurveEditor::removeCurrentControlPoint() {
//-----------------------------------------------------------------------------
void ChennelCurveEditor::selectNextControlPoint()
{
int controlPointCount = (int)m_points.size();
if (controlPointCount == 0)
return;
int firstVisibleControlPoint = 3;
int lastVisibleControlPoint = m_points.size() - 4;
m_currentControlPointIndex++;
if (m_currentControlPointIndex < firstVisibleControlPoint || m_currentControlPointIndex > lastVisibleControlPoint)
m_currentControlPointIndex = firstVisibleControlPoint;
update();
}
//-----------------------------------------------------------------------------
void ChennelCurveEditor::selectPreviousControlPoint()
{
int controlPointCount = (int)m_points.size();
if (controlPointCount == 0)
return;
int firstVisibleControlPoint = 3;
int lastVisibleControlPoint = m_points.size() - 4;
m_currentControlPointIndex--;
if (m_currentControlPointIndex < firstVisibleControlPoint || m_currentControlPointIndex > lastVisibleControlPoint)
m_currentControlPointIndex = lastVisibleControlPoint;
update();
}
//-----------------------------------------------------------------------------
void ChennelCurveEditor::moveCurrentControlPointUp()
{
if (m_currentControlPointIndex < 0)
return;
moveCurrentControlPoint(QPointF(0, -10));
}
//-----------------------------------------------------------------------------
void ChennelCurveEditor::moveCurrentControlPointDown()
{
if (m_currentControlPointIndex < 0)
return;
moveCurrentControlPoint(QPointF(0, 10));
}
//-----------------------------------------------------------------------------
void ChennelCurveEditor::removeControlPoint(int index) {
// Non posso eliminare il primo punto di controllo visibile quindi lo rimetto
// in condizione iniziale
@ -681,6 +739,10 @@ void ChennelCurveEditor::mouseReleaseEvent(QMouseEvent *e) {
void ChennelCurveEditor::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Delete) removeCurrentControlPoint();
if (e->key() == Qt::Key_Right) selectNextControlPoint();
if (e->key() == Qt::Key_Left) selectPreviousControlPoint();
if (e->key() == Qt::Key_Up) moveCurrentControlPointUp();
if (e->key() == Qt::Key_Down) moveCurrentControlPointDown();
}
//-----------------------------------------------------------------------------