diff --git a/toonz/sources/include/tools/inputmanager.h b/toonz/sources/include/tools/inputmanager.h index 3dfcc51..011b05a 100644 --- a/toonz/sources/include/tools/inputmanager.h +++ b/toonz/sources/include/tools/inputmanager.h @@ -222,6 +222,10 @@ public: void insertModifier(int index, const TInputModifierP &modifier); void addModifier(const TInputModifierP &modifier) { insertModifier(getModifiersCount(), modifier); } + void addModifiers(const TInputModifier::List &modifiers) { + for(TInputModifier::List::const_iterator i = modifiers.begin(); i != modifiers.end(); ++i) + addModifier(*i); + } void removeModifier(int index); void removeModifier(const TInputModifierP &modifier) { removeModifier(findModifier(modifier)); } diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp index bf62676..9472cc5 100644 --- a/toonz/sources/tnztools/fullcolorbrushtool.cpp +++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp @@ -211,7 +211,6 @@ void FullColorBrushTool::onActivate() { if (!m_notifier) m_notifier = new FullColorBrushToolNotifier(this); m_notifier->onActivate(); - updateModifiers(); updateCurrentStyle(); if (m_firstTime) { @@ -231,6 +230,7 @@ void FullColorBrushTool::onActivate() { setWorkAndBackupImages(); onColorStyleChanged(); + updateModifiers(); } //-------------------------------------------------------------------------------------------------- @@ -321,8 +321,7 @@ void FullColorBrushTool::updateModifiers() { #ifndef NDEBUG m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer())); #endif - for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i) - m_inputmanager.addModifier(*i); + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier( TInputModifierP(m_modifierSegmentation.getPointer())); } @@ -360,8 +359,7 @@ void FullColorBrushTool::handleMouseEvent(MouseEventType type, m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer())); m_inputmanager.addModifier( TInputModifierP(m_modifierAssistants.getPointer())); - for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i) - m_inputmanager.addModifier(*i); + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier( TInputModifierP(m_modifierSegmentation.getPointer())); m_inputmanager.drawPreview = true; diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index b4ba5d5..2270c94 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -6,6 +6,7 @@ #include "tools/toolhandle.h" #include "tools/toolutils.h" #include "tools/tooloptions.h" +#include "tools/replicator.h" // TnzQt includes #include "toonzqt/dvdialog.h" @@ -1009,6 +1010,7 @@ void ToonzRasterBrushTool::onActivate() { m_hardness.getValue() * 0.01); setWorkAndBackupImages(); + updateModifiers(); m_brushTimer.start(); // TODO:app->editImageOrSpline(); } @@ -1036,13 +1038,17 @@ bool ToonzRasterBrushTool::askWrite(const TRect &rect) { return true; } -//-------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------- -bool ToonzRasterBrushTool::preLeftButtonDown() { +void ToonzRasterBrushTool::updateModifiers() { int smoothRadius = (int)round(m_smooth.getValue()); m_modifierAssistants->magnetism = m_assistants.getValue() ? 1 : 0; m_inputmanager.drawPreview = false; //!m_modifierAssistants->drawOnly; + m_modifierReplicate.clear(); + if (m_assistants.getValue()) + TReplicator::scanReplicators(this, &m_modifierReplicate, false, true, false, nullptr); + m_inputmanager.clearModifiers(); m_inputmanager.addModifier(TInputModifierP(m_modifierTangents.getPointer())); if (smoothRadius > 0) { @@ -1056,8 +1062,14 @@ bool ToonzRasterBrushTool::preLeftButtonDown() { #ifndef NDEBUG m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer())); #endif + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer())); +} + +//-------------------------------------------------------------------------------------------------- +bool ToonzRasterBrushTool::preLeftButtonDown() { + updateModifiers(); touchImage(); if (m_isFrameCreated) { setWorkAndBackupImages(); @@ -1084,6 +1096,7 @@ void ToonzRasterBrushTool::handleMouseEvent(MouseEventType type, m_inputmanager.clearModifiers(); m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer())); m_inputmanager.addModifier(TInputModifierP(m_modifierAssistants.getPointer())); + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer())); m_inputmanager.drawPreview = true; } diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.h b/toonz/sources/tnztools/toonzrasterbrushtool.h index 826cb59..bff7ccb 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.h +++ b/toonz/sources/tnztools/toonzrasterbrushtool.h @@ -108,8 +108,10 @@ public: ToolType getToolType() const override { return TTool::LevelWriteTool; } - unsigned int getToolHints() const override - { return (TTool::getToolHints() & ~HintAssistantsAll) | HintReplicatorsEnabled; } + unsigned int getToolHints() const override { + unsigned int h = TTool::getToolHints() & ~HintAssistantsAll; + return m_assistants.getValue() ? h | HintReplicatorsEnabled : h; + } ToolOptionsBox *createOptionsBox() override; @@ -162,6 +164,8 @@ public: bool isMyPaintStyleSelected() { return m_isMyPaintStyleSelected; } private: + void updateModifiers(); + enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE }; void handleMouseEvent(MouseEventType type, const TPointD &pos, const TMouseEvent &e); @@ -177,6 +181,7 @@ protected: #ifndef NDEBUG TSmartPointerT m_modifierTest; #endif + TInputModifier::List m_modifierReplicate; class MyPaintStroke: public TTrackHandler { public: diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.cpp b/toonz/sources/tnztools/toonzvectorbrushtool.cpp index 1e01069..31fb828 100644 --- a/toonz/sources/tnztools/toonzvectorbrushtool.cpp +++ b/toonz/sources/tnztools/toonzvectorbrushtool.cpp @@ -6,6 +6,7 @@ #include "tools/toolhandle.h" #include "tools/toolutils.h" #include "tools/tooloptions.h" +#include "tools/replicator.h" #include "bluredbrush.h" // TnzQt includes @@ -657,6 +658,7 @@ void ToonzVectorBrushTool::onActivate() { loadLastBrush(); } resetFrameRange(); + updateModifiers(); // TODO:app->editImageOrSpline(); } @@ -1043,9 +1045,7 @@ void ToonzVectorBrushTool::inputPaintTracks(const TTrackList &tracks) { //-------------------------------------------------------------------------------------------------- -bool ToonzVectorBrushTool::preLeftButtonDown() { - if (getViewer() && getViewer()->getGuidedStrokePickerMode()) return false; - +void ToonzVectorBrushTool::updateModifiers() { m_pixelSize = getPixelSize(); int smoothRadius = (int)round(m_smooth.getValue()); m_modifierAssistants->magnetism = m_assistants.getValue() ? 1 : 0; @@ -1054,6 +1054,10 @@ bool ToonzVectorBrushTool::preLeftButtonDown() { m_modifierSimplify->step = 2*m_pixelSize; m_inputmanager.drawPreview = false; + m_modifierReplicate.clear(); + if (m_assistants.getValue()) + TReplicator::scanReplicators(this, &m_modifierReplicate, false, true, false, nullptr); + m_inputmanager.clearModifiers(); m_inputmanager.addModifier(TInputModifierP(m_modifierTangents.getPointer())); if (smoothRadius > 0) { @@ -1067,9 +1071,16 @@ bool ToonzVectorBrushTool::preLeftButtonDown() { #ifndef NDEBUG m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer())); #endif + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer())); m_inputmanager.addModifier(TInputModifierP(m_modifierSimplify.getPointer())); +} +//-------------------------------------------------------------------------------------------------- + +bool ToonzVectorBrushTool::preLeftButtonDown() { + if (getViewer() && getViewer()->getGuidedStrokePickerMode()) return false; + updateModifiers(); touchImage(); if (m_isFrameCreated) { // When the xsheet frame is selected, whole viewer will be updated from @@ -1096,6 +1107,7 @@ void ToonzVectorBrushTool::handleMouseEvent(MouseEventType type, m_inputmanager.clearModifiers(); m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer())); m_inputmanager.addModifier(TInputModifierP(m_modifierAssistants.getPointer())); + m_inputmanager.addModifiers(m_modifierReplicate); m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer())); m_inputmanager.addModifier(TInputModifierP(m_modifierSimplify.getPointer())); m_inputmanager.drawPreview = true; diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.h b/toonz/sources/tnztools/toonzvectorbrushtool.h index ae12706..b15a33b 100644 --- a/toonz/sources/tnztools/toonzvectorbrushtool.h +++ b/toonz/sources/tnztools/toonzvectorbrushtool.h @@ -99,8 +99,10 @@ public: ToolType getToolType() const override { return TTool::LevelWriteTool; } - unsigned int getToolHints() const override - { return (TTool::getToolHints() & ~HintAssistantsAll) | HintReplicatorsEnabled; } + unsigned int getToolHints() const override { + unsigned int h = TTool::getToolHints() & ~HintAssistantsAll; + return m_assistants.getValue() ? h | HintReplicatorsEnabled : h; + } ToolOptionsBox *createOptionsBox() override; @@ -168,6 +170,8 @@ protected: void snap(const TPointD &pos, bool snapEnabled, bool withSelfSnap = false); + void updateModifiers(); + enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE }; void handleMouseEvent(MouseEventType type, const TPointD &pos, const TMouseEvent &e); @@ -200,6 +204,7 @@ protected: #ifndef NDEBUG TSmartPointerT m_modifierTest; #endif + TInputModifier::List m_modifierReplicate; TrackList m_tracks; TrackList m_rangeTracks;