From b1dada5d176f3e8ec88c51daf09bd331df7291fa Mon Sep 17 00:00:00 2001 From: Rodney Date: Sep 20 2019 22:46:09 +0000 Subject: Merge pull request #2786 from shun-iwasawa/g/add_swap_colors_button_to_gradient_fx Add Swap Colors Button to Gradient Fxs --- diff --git a/toonz/sources/include/toonzqt/paramfield.h b/toonz/sources/include/toonzqt/paramfield.h index dbf3880..7c9ea44 100644 --- a/toonz/sources/include/toonzqt/paramfield.h +++ b/toonz/sources/include/toonzqt/paramfield.h @@ -53,7 +53,7 @@ class ColorField; class SpectrumField; class ToneCurveField; class CheckBox; -} +} // namespace DVGui //============================================================================= /*! \brief ParamField. @@ -385,16 +385,17 @@ protected slots: // RGB Link Button //----------------------------------------------------------------------------- -class DVAPI RgbLinkButton final : public QPushButton { +class DVAPI RgbLinkButtons final : public QWidget { Q_OBJECT PixelParamField *m_field1, *m_field2; public: - RgbLinkButton(QString str, QWidget *parent, PixelParamField *field1, - PixelParamField *field2); + RgbLinkButtons(QString str1, QString str2, QWidget *parent, + PixelParamField *field1, PixelParamField *field2); protected slots: - void onButtonClicked(); + void onCopyButtonClicked(); + void onSwapButtonClicked(); }; //============================================================================= @@ -517,7 +518,7 @@ protected: signals: void edited(); }; -}; +}; // namespace component class DVAPI StringParamField final : public ParamField { Q_OBJECT @@ -659,7 +660,7 @@ public: protected slots: void update_value(double); }; -} +} // namespace component namespace component { class DVAPI LineEdit_int final : public ParamField { diff --git a/toonz/sources/toonzqt/fxsettings.cpp b/toonz/sources/toonzqt/fxsettings.cpp index 2c2da56..8353809 100644 --- a/toonz/sources/toonzqt/fxsettings.cpp +++ b/toonz/sources/toonzqt/fxsettings.cpp @@ -100,7 +100,7 @@ inputFx); } } */ -} +} // namespace //============================================================================= // ParamViewer @@ -319,11 +319,9 @@ void ParamsPage::setPageField(TIStream &is, const TFxP &fx, bool isVertical) { QString::fromStdWString(TStringTable::translate(paramName1)); QString str2 = QString::fromStdWString(TStringTable::translate(paramName2)); - QString buttonStr = QString("Copy RGB : %1 > %2").arg(str1).arg(str2); - RgbLinkButton *linkBut = new RgbLinkButton(buttonStr, this, ppf1, ppf2); - linkBut->setFixedHeight(21); - connect(linkBut, SIGNAL(clicked()), linkBut, SLOT(onButtonClicked())); + RgbLinkButtons *linkBut = + new RgbLinkButtons(str1, str2, this, ppf1, ppf2); int currentRow = m_mainLayout->rowCount(); m_mainLayout->addWidget(linkBut, currentRow, 1, @@ -577,7 +575,7 @@ QSize getItemSize(QLayoutItem *item) { Histogram *histo = dynamic_cast(item->widget()); if (histo) return QSize(278, 162); - RgbLinkButton *linkBut = dynamic_cast(item->widget()); + RgbLinkButtons *linkBut = dynamic_cast(item->widget()); if (linkBut) return QSize(0, 21); return QSize(); @@ -615,19 +613,19 @@ void updateMaximumPageSize(QGridLayout *layout, int &maxLabelWidth, /*-- Widget側の最適な縦サイズおよび横幅の最大値を得る --*/ for (int r = 0; r < layout->rowCount(); r++) { /*-- Column1にある可能性のあるもの:ParamField, Histogram, Layout, - * RgbLinkButton --*/ + * RgbLinkButtons --*/ QLayoutItem *item = layout->itemAtPosition(r, 1); if (!item) continue; - QSize itemSize = getItemSize(item); + QSize itemSize = getItemSize(item); if (maxWidgetWidth < itemSize.width()) maxWidgetWidth = itemSize.width(); fieldsHeight += itemSize.height(); } if (layout->rowCount() > 1) fieldsHeight += (layout->rowCount() - 1) * 10; } -}; +}; // namespace QSize ParamsPage::getPreferedSize() { int maxLabelWidth = 0; @@ -873,7 +871,7 @@ void ParamsPageSet::createPage(TIStream &is, const TFxP &fx, int index) { std::string tagName; if (!is.matchTag(tagName) || tagName != "page") throw TException("expected "); - std::string pageName = is.getTagAttribute("name"); + std::string pageName = is.getTagAttribute("name"); if (pageName == "") pageName = "page"; ParamsPage *paramsPage = new ParamsPage(this, m_parent); @@ -1127,7 +1125,7 @@ FxSettings::FxSettings(QWidget *parent, const TPixel32 &checkCol1, bool ret = true; ret = ret && connect(m_paramViewer, SIGNAL(currentFxParamChanged()), SLOT(updateViewer())); - ret = ret && + ret = ret && connect(m_viewer, SIGNAL(pointPositionChanged(int, const TPointD &)), SLOT(onPointChanged(int, const TPointD &))); ret = ret && connect(m_paramViewer, SIGNAL(preferedSizeChanged(QSize)), this, @@ -1276,10 +1274,10 @@ void FxSettings::setFx(const TFxP ¤tFx, const TFxP &actualFx) { TFxUtil::setKeyframe(currentFxWithoutCamera, m_frameHandle->getFrameIndex(), actualFx, m_frameHandle->getFrameIndex()); - ToonzScene *scene = 0; + ToonzScene *scene = 0; if (m_sceneHandle) scene = m_sceneHandle->getScene(); - int frameIndex = 0; + int frameIndex = 0; if (m_frameHandle) frameIndex = m_frameHandle->getFrameIndex(); m_paramViewer->setFx(currentFxWithoutCamera, actualFx, frameIndex, scene); @@ -1339,7 +1337,7 @@ void FxSettings::setCurrentFx() { if (TZeraryColumnFx *zfx = dynamic_cast(fx.getPointer())) fx = zfx->getZeraryFx(); else - hasEmptyInput = hasEmptyInputPort(fx); + hasEmptyInput = hasEmptyInputPort(fx); int frame = m_frameHandle->getFrame(); ToonzScene *scene = m_sceneHandle->getScene(); actualFx = fx; diff --git a/toonz/sources/toonzqt/paramfield.cpp b/toonz/sources/toonzqt/paramfield.cpp index 1b746fb..ac6c43b 100644 --- a/toonz/sources/toonzqt/paramfield.cpp +++ b/toonz/sources/toonzqt/paramfield.cpp @@ -27,7 +27,7 @@ using namespace DVGui; //----------------------------------------------------------------------------- /*! FxSettingsに共通のUndo -*/ + */ class FxSettingsUndo : public TUndo { protected: TFxHandle *m_fxHandle; @@ -62,7 +62,7 @@ public: //----------------------------------------------------------------------------- /*! MeasuredDoubleParamField Undo -*/ + */ class MeasuredDoubleParamFieldUndo final : public AnimatableFxSettingsUndo { TDoubleParamP m_param; double m_oldValue, m_newValue; @@ -100,7 +100,7 @@ public: //----------------------------------------------------------------------------- /*! RangeParamField Undo -*/ + */ class RangeParamFieldUndo final : public AnimatableFxSettingsUndo { TRangeParamP m_param; DoublePair m_oldValue, m_newValue; @@ -138,7 +138,7 @@ public: //----------------------------------------------------------------------------- /*! PixelParamField Undo -*/ + */ class PixelParamFieldUndo final : public AnimatableFxSettingsUndo { TPixelParamP m_param; TPixel32 m_oldValue, m_newValue; @@ -176,7 +176,7 @@ public: //----------------------------------------------------------------------------- /*! PointParamField Undo -*/ + */ class PointParamFieldUndo final : public AnimatableFxSettingsUndo { TPointParamP m_param; TPointD m_oldValue, m_newValue; @@ -212,7 +212,7 @@ public: //----------------------------------------------------------------------------- /*! EnumParamField Undo -*/ + */ class EnumParamFieldUndo final : public FxSettingsUndo { TIntEnumParamP m_param; std::string m_oldString, m_newString; @@ -246,7 +246,7 @@ public: //----------------------------------------------------------------------------- /*! IntParamFieldのUndo -*/ + */ class IntParamFieldUndo final : public FxSettingsUndo { TIntParamP m_param; int m_oldValue, m_newValue; @@ -281,7 +281,7 @@ public: //----------------------------------------------------------------------------- /*! BoolParamFieldのUndo -*/ + */ class BoolParamFieldUndo final : public FxSettingsUndo { TBoolParamP m_param; bool m_newState; @@ -314,7 +314,7 @@ public: //----------------------------------------------------------------------------- /*! SpectrumParamFieldのUndo -*/ + */ class SpectrumParamFieldUndo final : public AnimatableFxSettingsUndo { TSpectrumParamP m_param; TSpectrum m_oldSpectrum, m_newSpectrum; @@ -415,7 +415,7 @@ public: //----------------------------------------------------------------------------- /*! StringParamField Undo -*/ + */ class StringParamFieldUndo final : public FxSettingsUndo { TStringParamP m_param; std::wstring m_oldValue, m_newValue; @@ -451,7 +451,7 @@ public: //----------------------------------------------------------------------------- /*! FontParamFieldUndo -*/ + */ class FontParamFieldUndo final : public FxSettingsUndo { TFontParamP m_param; std::wstring m_oldValue, m_newValue; @@ -483,7 +483,7 @@ public: //----------------------------------------------------------------------------- /*! ToneCurveParamField Undo -*/ + */ class ToneCurveParamFieldUndo final : public AnimatableFxSettingsUndo { TToneCurveParamP m_param; QList m_oldPoints, m_newPoints; @@ -583,7 +583,7 @@ public: //----------------------------------------------------------------------------- /*! ToneCurveParamField Undo (Linearのトグル) -*/ + */ class ToneCurveParamFieldToggleLinearUndo final : public FxSettingsUndo { TToneCurveParamP m_actualParam; TToneCurveParamP m_currentParam; @@ -1057,25 +1057,46 @@ TPixel32 PixelParamField::getColor() { return m_colorField->getColor(); } void PixelParamField::setColor(TPixel32 value) { m_colorField->setColor(value); - setValue(value); + onChange(value, false); } //============================================================================= // RGB Link Button //----------------------------------------------------------------------------- -RgbLinkButton::RgbLinkButton(QString str, QWidget *parent, - PixelParamField *field1, PixelParamField *field2) - : QPushButton(str, parent), m_field1(field1), m_field2(field2) {} +RgbLinkButtons::RgbLinkButtons(QString str1, QString str2, QWidget *parent, + PixelParamField *field1, PixelParamField *field2) + : QWidget(parent), m_field1(field1), m_field2(field2) { + QString copyButtonStr = tr("Copy RGB : %1 > %2").arg(str1).arg(str2); + QString swapButtonStr = tr("Swap %1 and %2").arg(str1).arg(str2); + QPushButton *copyButton = new QPushButton(copyButtonStr, this); + QPushButton *swapButton = new QPushButton(swapButtonStr, this); + + copyButton->setFixedHeight(21); + swapButton->setFixedHeight(21); + + QHBoxLayout *lay = new QHBoxLayout(); + lay->setMargin(0); + lay->setSpacing(5); + { + lay->addWidget(copyButton, 0); + lay->addWidget(swapButton, 0); + lay->addStretch(1); + } + setLayout(lay); + + connect(copyButton, SIGNAL(clicked()), this, SLOT(onCopyButtonClicked())); + connect(swapButton, SIGNAL(clicked()), this, SLOT(onSwapButtonClicked())); +} //----------------------------------------------------------------------------- -void RgbLinkButton::onButtonClicked() { +void RgbLinkButtons::onCopyButtonClicked() { if (!m_field1 || !m_field2) return; TPixel32 val1 = m_field1->getColor(); TPixel32 val2 = m_field2->getColor(); - /*-- Alphaは変えない --*/ + // keep alpha channel unchanged val1.m = val2.m; if (val1 == val2) return; @@ -1083,6 +1104,21 @@ void RgbLinkButton::onButtonClicked() { m_field2->setColor(val1); } +//----------------------------------------------------------------------------- + +void RgbLinkButtons::onSwapButtonClicked() { + if (!m_field1 || !m_field2) return; + TPixel32 val1 = m_field1->getColor(); + TPixel32 val2 = m_field2->getColor(); + + if (val1 == val2) return; + + TUndoManager::manager()->beginBlock(); + m_field2->setColor(val1); + m_field1->setColor(val2); + TUndoManager::manager()->endBlock(); +} + //============================================================================= // SpectrumParamField //----------------------------------------------------------------------------- @@ -1440,7 +1476,7 @@ void MyTextEdit::focusOutEvent(QFocusEvent *event) { QTextEdit::focusOutEvent(event); emit edited(); } -}; +}; // namespace component StringParamField::StringParamField(QWidget *parent, QString name, const TStringParamP ¶m) @@ -1476,7 +1512,7 @@ void StringParamField::onChange() { if (m_multiTextFld) value = m_multiTextFld->toPlainText().toStdWString(); else - value = m_textFld->text().toStdWString(); + value = m_textFld->text().toStdWString(); TUndo *undo = 0; if (!m_actualParam || m_actualParam->getValue() == value) return; @@ -1698,9 +1734,8 @@ ToneCurveParamField::ToneCurveParamField(QWidget *parent, QString name, void ToneCurveParamField::updateField(const QList value) { if (m_actualParam) { - assert(m_currentParam && - m_currentParam->getCurrentChannel() == - m_actualParam->getCurrentChannel()); + assert(m_currentParam && m_currentParam->getCurrentChannel() == + m_actualParam->getCurrentChannel()); m_toneCurveField->setCurrentChannel(m_actualParam->getCurrentChannel()); assert(m_currentParam && m_currentParam->isLinear() == m_actualParam->isLinear());