diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index 9e150c50e..18e279654 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -44,7 +44,8 @@ Block::Block() : SetInputProperty(kLengthInput, QStringLiteral("view"), RationalSlider::kTime); SetInputProperty(kLengthInput, QStringLiteral("viewlock"), true); - SetInputFlags(kEnabledInput, InputFlags(GetInputFlags(kEnabledInput) | kInputFlagNotConnectable | kInputFlagNotKeyframable)); + SetInputFlag(kEnabledInput, kInputFlagNotConnectable); + SetInputFlag(kEnabledInput, kInputFlagNotKeyframable); SetFlag(kDontShowInParamView); } diff --git a/app/node/block/subtitle/subtitle.cpp b/app/node/block/subtitle/subtitle.cpp index 61c02f045..b645a1595 100644 --- a/app/node/block/subtitle/subtitle.cpp +++ b/app/node/block/subtitle/subtitle.cpp @@ -30,12 +30,12 @@ SubtitleBlock::SubtitleBlock() { AddInput(kTextIn, NodeValue::kText, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); - SetInputFlags(kBufferIn, InputFlags(GetInputFlags(kBufferIn) | kInputFlagHidden)); - SetInputFlags(kLengthInput, InputFlags(GetInputFlags(kLengthInput) | kInputFlagHidden)); - SetInputFlags(kMediaInInput, InputFlags(GetInputFlags(kMediaInInput) | kInputFlagHidden)); - SetInputFlags(kSpeedInput, InputFlags(GetInputFlags(kSpeedInput) | kInputFlagHidden)); - SetInputFlags(kReverseInput, InputFlags(GetInputFlags(kReverseInput) | kInputFlagHidden)); - SetInputFlags(kMaintainAudioPitchInput, InputFlags(GetInputFlags(kMaintainAudioPitchInput) | kInputFlagHidden)); + SetInputFlag(kBufferIn, kInputFlagHidden); + SetInputFlag(kLengthInput, kInputFlagHidden); + SetInputFlag(kMediaInInput, kInputFlagHidden); + SetInputFlag(kSpeedInput, kInputFlagHidden); + SetInputFlag(kReverseInput, kInputFlagHidden); + SetInputFlag(kMaintainAudioPitchInput, kInputFlagHidden); // Undo block flag that hides in param view SetFlag(kDontShowInParamView, false); diff --git a/app/node/distort/mask/mask.cpp b/app/node/distort/mask/mask.cpp index dc1941b03..1dc0acb49 100644 --- a/app/node/distort/mask/mask.cpp +++ b/app/node/distort/mask/mask.cpp @@ -32,7 +32,7 @@ const QString MaskDistortNode::kInvertInput = QStringLiteral("invert_in"); MaskDistortNode::MaskDistortNode() { // Mask should always be (1.0, 1.0, 1.0) for multiply to work correctly - SetInputFlags(kColorInput, InputFlags(GetInputFlags(kColorInput) | kInputFlagHidden)); + SetInputFlag(kColorInput, kInputFlagHidden); AddInput(kInvertInput, NodeValue::kBoolean, false); diff --git a/app/node/filter/blur/blur.cpp b/app/node/filter/blur/blur.cpp index 3498cddec..8d0b68bd3 100644 --- a/app/node/filter/blur/blur.cpp +++ b/app/node/filter/blur/blur.cpp @@ -209,10 +209,10 @@ void BlurFilterNode::InputValueChangedEvent(const QString &input, int element) void BlurFilterNode::UpdateInputs(Method method) { - SetInputFlags(kHorizInput, (method == kBox || method == kGaussian) ? InputFlags() : InputFlags(kInputFlagHidden)); - SetInputFlags(kVertInput, (method == kBox || method == kGaussian) ? InputFlags() : InputFlags(kInputFlagHidden)); - SetInputFlags(kDirectionalDegreesInput, (method == kDirectional) ? InputFlags() : InputFlags(kInputFlagHidden)); - SetInputFlags(kRadialCenterInput, (method == kRadial) ? InputFlags() : InputFlags(kInputFlagHidden)); + SetInputFlag(kHorizInput, kInputFlagHidden, !(method == kBox || method == kGaussian)); + SetInputFlag(kVertInput, kInputFlagHidden, !(method == kBox || method == kGaussian)); + SetInputFlag(kDirectionalDegreesInput, kInputFlagHidden, !(method == kDirectional)); + SetInputFlag(kRadialCenterInput, kInputFlagHidden, !(method == kRadial)); } } diff --git a/app/node/generator/shape/shapenode.cpp b/app/node/generator/shape/shapenode.cpp index b8f5a7132..4c866e279 100644 --- a/app/node/generator/shape/shapenode.cpp +++ b/app/node/generator/shape/shapenode.cpp @@ -90,13 +90,7 @@ void ShapeNode::Value(const NodeValueRow &value, const NodeGlobals &globals, Nod void ShapeNode::InputValueChangedEvent(const QString &input, int element) { if (input == kTypeInput) { - InputFlags i = GetInputFlags(kRadiusInput); - if (GetStandardValue(kTypeInput).toInt() == kRoundedRectangle) { - i &= InputFlag(~kInputFlagHidden); - } else { - i |= kInputFlagHidden; - } - SetInputFlags(kRadiusInput, i); + SetInputFlag(kRadiusInput, kInputFlagHidden, (GetStandardValue(kTypeInput).toInt() != kRoundedRectangle)); } super::InputValueChangedEvent(input, element); } diff --git a/app/node/input/multicam/multicamnode.cpp b/app/node/input/multicam/multicamnode.cpp index e34220906..1ea80d5ae 100644 --- a/app/node/input/multicam/multicamnode.cpp +++ b/app/node/input/multicam/multicamnode.cpp @@ -103,7 +103,7 @@ void MultiCamNode::InputConnectedEvent(const QString &input, int element, Node * { if (input == kSequenceInput) { if (Sequence *s = dynamic_cast(output)) { - SetInputFlags(kSequenceTypeInput, GetInputFlags(kSequenceTypeInput) & InputFlag(~kInputFlagHidden)); + SetInputFlag(kSequenceTypeInput, kInputFlagHidden, false); sequence_ = s; } } @@ -112,7 +112,7 @@ void MultiCamNode::InputConnectedEvent(const QString &input, int element, Node * void MultiCamNode::InputDisconnectedEvent(const QString &input, int element, Node *output) { if (input == kSequenceInput) { - SetInputFlags(kSequenceTypeInput, GetInputFlags(kSequenceTypeInput) | kInputFlagHidden); + SetInputFlag(kSequenceTypeInput, kInputFlagHidden, true); sequence_ = nullptr; } } diff --git a/app/node/node.cpp b/app/node/node.cpp index 072e4df5e..11803f124 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -903,12 +903,16 @@ InputFlags Node::GetInputFlags(const QString &input) const } } -void Node::SetInputFlags(const QString &input, const InputFlags &f) +void Node::SetInputFlag(const QString &input, InputFlag f, bool on) { Input* i = GetInternalInputData(input); if (i) { - i->flags = f; + if (on) { + i->flags |= f; + } else { + i->flags &= ~f; + } emit InputFlagsChanged(input, i->flags); } else { ReportInvalidInput("set flags of", input, -1); diff --git a/app/node/node.h b/app/node/node.h index 8d4d312d7..974db61f8 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -947,7 +947,7 @@ public: } InputFlags GetInputFlags(const QString& input) const; - void SetInputFlags(const QString &input, const InputFlags &f); + void SetInputFlag(const QString &input, InputFlag f, bool on = true); virtual void LoadFinishedEvent(){} virtual void ConnectedToPreviewEvent(){} diff --git a/app/node/param.h b/app/node/param.h index bbd6f09f9..8c8949f20 100644 --- a/app/node/param.h +++ b/app/node/param.h @@ -30,7 +30,7 @@ namespace olive { class Node; class NodeKeyframe; -enum InputFlag { +enum InputFlag : uint64_t { /// By default, inputs are keyframable, connectable, and NOT arrays kInputFlagNormal = 0x0, kInputFlagArray = 0x1, @@ -61,12 +61,6 @@ public: return i; } - InputFlags &operator|=(const InputFlags &f) - { - f_ |= f.f_; - return *this; - } - InputFlags operator|(const InputFlag &f) const { InputFlags i = *this; @@ -74,12 +68,31 @@ public: return i; } + InputFlags operator|(const uint64_t &f) const + { + InputFlags i = *this; + i |= f; + return i; + } + + InputFlags &operator|=(const InputFlags &f) + { + f_ |= f.f_; + return *this; + } + InputFlags &operator|=(const InputFlag &f) { f_ |= f; return *this; } + InputFlags &operator|=(const uint64_t &f) + { + f_ |= f; + return *this; + } + InputFlags operator&(const InputFlags &f) const { InputFlags i = *this; @@ -87,12 +100,6 @@ public: return i; } - InputFlags &operator&=(const InputFlags &f) - { - f_ &= f.f_; - return *this; - } - InputFlags operator&(const InputFlag &f) const { InputFlags i = *this; @@ -100,12 +107,31 @@ public: return i; } + InputFlags operator&(const uint64_t &f) const + { + InputFlags i = *this; + i &= f; + return i; + } + + InputFlags &operator&=(const InputFlags &f) + { + f_ &= f.f_; + return *this; + } + InputFlags &operator&=(const InputFlag &f) { f_ &= f; return *this; } + InputFlags &operator&=(const uint64_t &f) + { + f_ &= f; + return *this; + } + InputFlags operator~() const { InputFlags i = *this; diff --git a/app/node/project/serializer/serializer220403.cpp b/app/node/project/serializer/serializer220403.cpp index 32ba82207..851ac8d4d 100644 --- a/app/node/project/serializer/serializer220403.cpp +++ b/app/node/project/serializer/serializer220403.cpp @@ -1003,7 +1003,7 @@ void ProjectSerializer220403::PostConnect(const XMLNodeData &xml_node_data) cons l.group->AddInputPassthrough(resolved, l.passthrough_id); - l.group->SetInputFlags(l.passthrough_id, resolved.GetFlags() | l.custom_flags); + l.group->SetInputFlag(l.passthrough_id, InputFlag(l.custom_flags.value())); if (!l.custom_name.isEmpty()) { l.group->SetInputName(l.passthrough_id, l.custom_name);