From edf5e1e42067fc75c18ebce515e7129a7c47c78e Mon Sep 17 00:00:00 2001 From: manongjohn Date: Jan 08 2023 15:19:12 +0000 Subject: Animate Tool Flip and Rotate buttons --- diff --git a/toonz/sources/include/tools/tooloptions.h b/toonz/sources/include/tools/tooloptions.h index a4c8099..5bbd9b0 100644 --- a/toonz/sources/include/tools/tooloptions.h +++ b/toonz/sources/include/tools/tooloptions.h @@ -254,6 +254,10 @@ class ArrowToolOptionsBox final : public ToolOptionsBox { ToolOptionCheckbox *m_globalKey; + // Flip buttons + QPushButton *m_hFlipButton, *m_vFlipButton, *m_leftRotateButton, + *m_rightRotateButton; + // enables adjusting value by dragging on the label void connectLabelAndField(ClickableLabel *label, MeasuredValueField *field); @@ -282,6 +286,11 @@ protected slots: void onCurrentStageObjectComboActivated(int index); void onCurrentAxisChanged(int); + + void onFlipHorizontal(); + void onFlipVertical(); + void onRotateLeft(); + void onRotateRight(); }; //============================================================================= diff --git a/toonz/sources/tnztools/tooloptions.cpp b/toonz/sources/tnztools/tooloptions.cpp index 9b4ab8c..138067f 100644 --- a/toonz/sources/tnztools/tooloptions.cpp +++ b/toonz/sources/tnztools/tooloptions.cpp @@ -549,6 +549,32 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_zField->setPrecision(4); m_noScaleZField->setPrecision(4); + m_hFlipButton = new QPushButton(this); + m_vFlipButton = new QPushButton(this); + + m_leftRotateButton = new QPushButton(this); + m_rightRotateButton = new QPushButton(this); + + m_hFlipButton->setFixedSize(QSize(20, 20)); + m_vFlipButton->setFixedSize(QSize(20, 20)); + + m_leftRotateButton->setFixedSize(QSize(20, 20)); + m_rightRotateButton->setFixedSize(QSize(20, 20)); + + m_hFlipButton->setIcon(createQIcon("fliphoriz")); + m_hFlipButton->setIconSize(QSize(20, 20)); + m_vFlipButton->setIcon(createQIcon("flipvert")); + m_vFlipButton->setIconSize(QSize(20, 20)); + m_leftRotateButton->setIcon(createQIcon("rotateleft")); + m_leftRotateButton->setIconSize(QSize(20, 20)); + m_rightRotateButton->setIcon(createQIcon("rotateright")); + m_rightRotateButton->setIconSize(QSize(20, 20)); + + m_hFlipButton->setToolTip(tr("Flip Object Horizontally")); + m_vFlipButton->setToolTip(tr("Flip Object Vertically")); + m_leftRotateButton->setToolTip(tr("Rotate Object Left")); + m_rightRotateButton->setToolTip(tr("Rotate Object Right")); + bool splined = isCurrentObjectSplined(); if (splined != m_splined) m_splined = splined; setSplined(m_splined); @@ -637,6 +663,8 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( rotLay->addWidget(m_rotationLabel, 0); rotLay->addSpacing(LABEL_SPACING); rotLay->addWidget(m_rotationField, 10); + rotLay->addWidget(m_leftRotateButton); + rotLay->addWidget(m_rightRotateButton); rotLay->addSpacing(ITEM_SPACING); rotLay->addWidget(new DVGui::Separator("", this, false)); @@ -666,6 +694,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( scaleLay->addWidget(m_scaleHLabel, 0); scaleLay->addSpacing(LABEL_SPACING); scaleLay->addWidget(m_scaleHField, 10); + scaleLay->addWidget(m_hFlipButton); scaleLay->addWidget(m_lockScaleHCheckbox, 0); scaleLay->addSpacing(ITEM_SPACING); @@ -673,6 +702,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( scaleLay->addWidget(m_scaleVLabel, 0); scaleLay->addSpacing(LABEL_SPACING); scaleLay->addWidget(m_scaleVField, 10); + scaleLay->addWidget(m_vFlipButton); scaleLay->addWidget(m_lockScaleVCheckbox, 0); scaleLay->addSpacing(ITEM_SPACING); @@ -793,6 +823,11 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( connectLabelAndField(m_nsCenterLabel, m_nsCenterField); onCurrentAxisChanged(activeAxisProp->getIndex()); + + connect(m_hFlipButton, SIGNAL(clicked()), SLOT(onFlipHorizontal())); + connect(m_vFlipButton, SIGNAL(clicked()), SLOT(onFlipVertical())); + connect(m_leftRotateButton, SIGNAL(clicked()), SLOT(onRotateLeft())); + connect(m_rightRotateButton, SIGNAL(clicked()), SLOT(onRotateRight())); } //----------------------------------------------------------------------------- @@ -998,6 +1033,34 @@ void ArrowToolOptionsBox::onCurrentAxisChanged(int axisId) { m_pickWidget->setVisible(axisId == AllAxis); } +//----------------------------------------------------------------------------- + +void ArrowToolOptionsBox::onFlipHorizontal() { + m_scaleHField->setValue(m_scaleHField->getValue() * -1); + emit m_scaleHField->measuredValueChanged(m_scaleHField->getMeasuredValue()); +} + +//----------------------------------------------------------------------------- + +void ArrowToolOptionsBox::onFlipVertical() { + m_scaleVField->setValue(m_scaleVField->getValue() * -1); + emit m_scaleVField->measuredValueChanged(m_scaleVField->getMeasuredValue()); +} + +//----------------------------------------------------------------------------- + +void ArrowToolOptionsBox::onRotateLeft() { + m_rotationField->setValue(m_rotationField->getValue() + 90); + emit m_rotationField->measuredValueChanged(m_rotationField->getMeasuredValue()); +} + +//----------------------------------------------------------------------------- + +void ArrowToolOptionsBox::onRotateRight() { + m_rotationField->setValue(m_rotationField->getValue() - 90); + emit m_rotationField->measuredValueChanged(m_rotationField->getMeasuredValue()); +} + //============================================================================= // // SelectionToolOptionsBox