diff --git a/toonz/sources/tnztools/tooloptions.cpp b/toonz/sources/tnztools/tooloptions.cpp index 0db784e..882edb1 100644 --- a/toonz/sources/tnztools/tooloptions.cpp +++ b/toonz/sources/tnztools/tooloptions.cpp @@ -536,7 +536,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_nsPosField = new PegbarChannelField(m_tool, TStageObject::T_Y, "field", frameHandle, objHandle, xshHandle, this); - m_zField = new PegbarChannelField(m_tool, TStageObject::T_Z, "field", + m_zField = new PegbarChannelField(m_tool, TStageObject::T_Z, "field", frameHandle, objHandle, xshHandle, this); m_noScaleZField = new NoScaleField(m_tool, "field"); @@ -629,14 +629,12 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_nsCenterLabel = new ClickableLabel(tr("Y:"), this); // Lock X Center - lockProp = - dynamic_cast(m_pg->getProperty("Lock Center X")); + lockProp = dynamic_cast(m_pg->getProperty("Lock Center X")); if (lockProp) m_lockEWCenterCheckbox = new ToolOptionCheckbox(m_tool, lockProp, toolHandle, this); // Lock Y Center - lockProp = - dynamic_cast(m_pg->getProperty("Lock Center Y")); + lockProp = dynamic_cast(m_pg->getProperty("Lock Center Y")); if (lockProp) m_lockNSCenterCheckbox = new ToolOptionCheckbox(m_tool, lockProp, toolHandle, this); @@ -667,7 +665,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_zField->setPrecision(4); m_noScaleZField->setPrecision(4); - bool splined = isCurrentObjectSplined(); + bool splined = isCurrentObjectSplined(); if (splined != m_splined) m_splined = splined; setSplined(m_splined); @@ -1300,7 +1298,7 @@ SelectionToolOptionsBox::SelectionToolOptionsBox(QWidget *parent, TTool *tool, // assert(ret); bool ret = connect(m_scaleXField, SIGNAL(valueChange(bool)), SLOT(onScaleXValueChanged(bool))); - ret = ret && connect(m_scaleYField, SIGNAL(valueChange(bool)), + ret = ret && connect(m_scaleYField, SIGNAL(valueChange(bool)), SLOT(onScaleYValueChanged(bool))); if (m_setSaveboxCheckbox) ret = ret && connect(m_setSaveboxCheckbox, SIGNAL(toggled(bool)), @@ -1721,11 +1719,11 @@ FillToolOptionsBox::FillToolOptionsBox(QWidget *parent, TTool *tool, bool ret = connect(m_colorMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onColorModeChanged(int))); - ret = ret && connect(m_toolType, SIGNAL(currentIndexChanged(int)), this, + ret = ret && connect(m_toolType, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolTypeChanged(int))); - ret = ret && connect(m_onionMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_onionMode, SIGNAL(toggled(bool)), this, SLOT(onOnionModeToggled(bool))); - ret = ret && connect(m_multiFrameMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_multiFrameMode, SIGNAL(toggled(bool)), this, SLOT(onMultiFrameModeToggled(bool))); assert(ret); if (m_colorMode->getProperty()->getValue() == L"Lines") { @@ -1890,11 +1888,12 @@ BrushToolOptionsBox::BrushToolOptionsBox(QWidget *parent, TTool *tool, builder.setSingleValueWidgetType(ToolOptionControlBuilder::FIELD); addSeparator(); - if (tool && tool->getProperties(1)) tool->getProperties(1)->accept(builder); m_snapCheckbox = dynamic_cast(m_controls.value("Snap")); m_snapSensitivityCombo = dynamic_cast(m_controls.value("Sensitivity:")); + + if (tool && tool->getProperties(1)) tool->getProperties(1)->accept(builder); m_joinStyleCombo = dynamic_cast(m_controls.value("Join")); m_miterField = @@ -2324,9 +2323,9 @@ TapeToolOptionsBox::TapeToolOptionsBox(QWidget *parent, TTool *tool, bool ret = connect(m_typeMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolTypeChanged(int))); - ret = ret && connect(m_toolMode, SIGNAL(currentIndexChanged(int)), this, + ret = ret && connect(m_toolMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolModeChanged(int))); - ret = ret && connect(m_joinStrokesMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_joinStrokesMode, SIGNAL(toggled(bool)), this, SLOT(onJoinStrokesModeChanged())); assert(ret); } @@ -2413,10 +2412,11 @@ protected: p.setPen(Qt::black); p.setBrush(Qt::NoBrush); - p.drawText(rect(), Qt::AlignCenter, QString("R:%1 G:%2 B:%3") - .arg(m_color.red()) - .arg(m_color.green()) - .arg(m_color.blue())); + p.drawText(rect(), Qt::AlignCenter, + QString("R:%1 G:%2 B:%3") + .arg(m_color.red()) + .arg(m_color.green()) + .arg(m_color.blue())); } }; @@ -2844,7 +2844,7 @@ void ToolOptions::onToolSwitched() { TTool *tool = app->getCurrentTool()->getTool(); if (tool) { // c'e' un tool corrente - ToolOptionsBox *panel = 0; + ToolOptionsBox *panel = 0; std::map::iterator it = m_panels.find(tool); if (it == m_panels.end()) { // ... senza panel associato diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index 3ff0afd..028f140 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -1960,27 +1960,22 @@ bool ToonzRasterBrushTool::onPropertyChanged(std::string propertyName) { return true; } - /*--- Divide the process according to the changed Property ---*/ - - /*--- determine which type of brush to be modified ---*/ + RasterBrushMinSize = m_rasThickness.getValue().first; + RasterBrushMaxSize = m_rasThickness.getValue().second; + BrushSmooth = m_smooth.getValue(); + BrushDrawOrder = m_drawOrder.getIndex(); + RasterBrushPencilMode = m_pencil.getValue(); + BrushPressureSensitivity = m_pressure.getValue(); + RasterBrushHardness = m_hardness.getValue(); + RasterBrushModifierSize = m_modifierSize.getValue(); + + // Recalculate/reset based on changed settings if (propertyName == m_rasThickness.getName()) { - RasterBrushMinSize = m_rasThickness.getValue().first; - RasterBrushMaxSize = m_rasThickness.getValue().second; - m_minThick = m_rasThickness.getValue().first; m_maxThick = m_rasThickness.getValue().second; - } else if (propertyName == m_smooth.getName()) { - BrushSmooth = m_smooth.getValue(); - } else if (propertyName == m_drawOrder.getName()) { - BrushDrawOrder = m_drawOrder.getIndex(); - } else if (propertyName == m_pencil.getName()) { - RasterBrushPencilMode = m_pencil.getValue(); - } else if (propertyName == m_pressure.getName()) { - BrushPressureSensitivity = m_pressure.getValue(); - } else if (propertyName == m_hardness.getName()) - setWorkAndBackupImages(); - else if (propertyName == m_modifierSize.getName()) - RasterBrushModifierSize = m_modifierSize.getValue(); + } + + if (propertyName == m_hardness.getName()) setWorkAndBackupImages(); if (propertyName == m_hardness.getName() || propertyName == m_rasThickness.getName()) { @@ -2037,14 +2032,20 @@ void ToonzRasterBrushTool::loadPreset() { { m_rasThickness.setValue( TDoublePairProperty::Value(std::max(preset.m_min, 1.0), preset.m_max)); - m_brushPad = ToolUtils::getBrushPad(preset.m_max, preset.m_hardness * 0.01); - m_smooth.setValue(preset.m_smooth, true); m_hardness.setValue(preset.m_hardness, true); + m_smooth.setValue(preset.m_smooth, true); m_drawOrder.setIndex(preset.m_drawOrder); m_pencil.setValue(preset.m_pencil); m_pressure.setValue(preset.m_pressure); m_modifierSize.setValue(preset.m_modifierSize); + // Recalculate based on updated presets + m_minThick = m_rasThickness.getValue().first; + m_maxThick = m_rasThickness.getValue().second; + + setWorkAndBackupImages(); + + m_brushPad = ToolUtils::getBrushPad(preset.m_max, preset.m_hardness * 0.01); } catch (...) { } } @@ -2095,14 +2096,21 @@ void ToonzRasterBrushTool::removePreset() { void ToonzRasterBrushTool::loadLastBrush() { m_rasThickness.setValue( TDoublePairProperty::Value(RasterBrushMinSize, RasterBrushMaxSize)); - m_drawOrder.setIndex(BrushDrawOrder); m_pencil.setValue(RasterBrushPencilMode ? 1 : 0); m_hardness.setValue(RasterBrushHardness); - m_pressure.setValue(BrushPressureSensitivity ? 1 : 0); m_smooth.setValue(BrushSmooth); m_modifierSize.setValue(RasterBrushModifierSize); + + // Recalculate based on prior values + m_minThick = m_rasThickness.getValue().first; + m_maxThick = m_rasThickness.getValue().second; + + setWorkAndBackupImages(); + + m_brushPad = getBrushPad(m_rasThickness.getValue().second, + m_hardness.getValue() * 0.01); } //------------------------------------------------------------------ diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.cpp b/toonz/sources/tnztools/toonzvectorbrushtool.cpp index c69ec24..341ed02 100644 --- a/toonz/sources/tnztools/toonzvectorbrushtool.cpp +++ b/toonz/sources/tnztools/toonzvectorbrushtool.cpp @@ -1612,58 +1612,61 @@ bool ToonzVectorBrushTool::onPropertyChanged(std::string propertyName) { return true; } - /*--- Divide the process according to the changed Property ---*/ - - /*--- determine which type of brush to be modified ---*/ - if (propertyName == m_thickness.getName()) { - V_VectorBrushMinSize = m_thickness.getValue().first; - V_VectorBrushMaxSize = m_thickness.getValue().second; - m_minThick = m_thickness.getValue().first; - m_maxThick = m_thickness.getValue().second; - } else if (propertyName == m_accuracy.getName()) { - V_BrushAccuracy = m_accuracy.getValue(); - } else if (propertyName == m_smooth.getName()) { - V_BrushSmooth = m_smooth.getValue(); - } else if (propertyName == m_breakAngles.getName()) { - V_BrushBreakSharpAngles = m_breakAngles.getValue(); - } else if (propertyName == m_pressure.getName()) { + // Switch to only if it's a preset property change + if (m_preset.getValue() != CUSTOM_WSTR && + (propertyName == m_thickness.getName() || + propertyName == m_accuracy.getName() || + propertyName == m_smooth.getName() || + propertyName == m_breakAngles.getName() || + propertyName == m_pressure.getName() || + propertyName == m_capStyle.getName() || + propertyName == m_joinStyle.getName() || + propertyName == m_miterJoinLimit.getName())) { + m_preset.setValue(CUSTOM_WSTR); + V_VectorBrushPreset = m_preset.getValueAsString(); + notifyTool = true; + } + + // Properties tracked with preset. Update only on + if (m_preset.getValue() == CUSTOM_WSTR) { + V_VectorBrushMinSize = m_thickness.getValue().first; + V_VectorBrushMaxSize = m_thickness.getValue().second; + V_BrushAccuracy = m_accuracy.getValue(); + V_BrushSmooth = m_smooth.getValue(); + V_BrushBreakSharpAngles = m_breakAngles.getValue(); V_BrushPressureSensitivity = m_pressure.getValue(); - } else if (propertyName == m_capStyle.getName()) { - V_VectorCapStyle = m_capStyle.getIndex(); - } else if (propertyName == m_joinStyle.getName()) { - V_VectorJoinStyle = m_joinStyle.getIndex(); - } else if (propertyName == m_miterJoinLimit.getName()) { - V_VectorMiterValue = m_miterJoinLimit.getValue(); - } else if (propertyName == m_frameRange.getName()) { - int index = m_frameRange.getIndex(); - V_VectorBrushFrameRange = index; - if (index == 0) resetFrameRange(); - } else if (propertyName == m_snap.getName()) { - V_VectorBrushSnap = m_snap.getValue(); - } else if (propertyName == m_snapSensitivity.getName()) { - int index = m_snapSensitivity.getIndex(); - V_VectorBrushSnapSensitivity = index; - switch (index) { - case 0: - m_minDistance2 = SNAPPING_LOW; - break; - case 1: - m_minDistance2 = SNAPPING_MEDIUM; - break; - case 2: - m_minDistance2 = SNAPPING_HIGH; - break; - } + V_VectorCapStyle = m_capStyle.getIndex(); + V_VectorJoinStyle = m_joinStyle.getIndex(); + V_VectorMiterValue = m_miterJoinLimit.getValue(); } - if (propertyName == m_joinStyle.getName()) notifyTool = true; + // Properties not tracked with preset + int frameIndex = m_frameRange.getIndex(); + V_VectorBrushFrameRange = frameIndex; + V_VectorBrushSnap = m_snap.getValue(); + int snapSensitivityIndex = m_snapSensitivity.getIndex(); + V_VectorBrushSnapSensitivity = snapSensitivityIndex; - if (m_preset.getValue() != CUSTOM_WSTR) { - m_preset.setValue(CUSTOM_WSTR); - V_VectorBrushPreset = m_preset.getValueAsString(); - notifyTool = true; + // Recalculate/reset based on changed settings + m_minThick = m_thickness.getValue().first; + m_maxThick = m_thickness.getValue().second; + + if (frameIndex == 0) resetFrameRange(); + + switch (snapSensitivityIndex) { + case 0: + m_minDistance2 = SNAPPING_LOW; + break; + case 1: + m_minDistance2 = SNAPPING_MEDIUM; + break; + case 2: + m_minDistance2 = SNAPPING_HIGH; + break; } + if (propertyName == m_joinStyle.getName()) notifyTool = true; + if (notifyTool) { m_propertyUpdating = true; getApplication()->getCurrentTool()->notifyToolChanged(); @@ -1716,6 +1719,9 @@ void ToonzVectorBrushTool::loadPreset() { m_joinStyle.setIndex(preset.m_join); m_miterJoinLimit.setValue(preset.m_miter); + // Recalculate based on updated presets + m_minThick = m_thickness.getValue().first; + m_maxThick = m_thickness.getValue().second; } catch (...) { } } @@ -1765,21 +1771,26 @@ void ToonzVectorBrushTool::removePreset() { //------------------------------------------------------------------ void ToonzVectorBrushTool::loadLastBrush() { + // Properties tracked with preset m_thickness.setValue( TDoublePairProperty::Value(V_VectorBrushMinSize, V_VectorBrushMaxSize)); - m_capStyle.setIndex(V_VectorCapStyle); m_joinStyle.setIndex(V_VectorJoinStyle); m_miterJoinLimit.setValue(V_VectorMiterValue); m_breakAngles.setValue(V_BrushBreakSharpAngles ? 1 : 0); m_accuracy.setValue(V_BrushAccuracy); - m_pressure.setValue(V_BrushPressureSensitivity ? 1 : 0); m_smooth.setValue(V_BrushSmooth); + // Properties not tracked with preset m_frameRange.setIndex(V_VectorBrushFrameRange); m_snap.setValue(V_VectorBrushSnap); m_snapSensitivity.setIndex(V_VectorBrushSnapSensitivity); + + // Recalculate based on prior values + m_minThick = m_thickness.getValue().first; + m_maxThick = m_thickness.getValue().second; + switch (V_VectorBrushSnapSensitivity) { case 0: m_minDistance2 = SNAPPING_LOW;