KnobGuiColor::KnobGuiColor(KnobIPtr knob, KnobGuiContainerI *container) : KnobGuiValue(knob, container) , _knob( toKnobColor(knob) ) , _colorLabel(0) , _colorDialogButton(0) , _lastColor( knob->getDimension() ) , _useSimplifiedUI( isViewerUIKnob() || _knob.lock()->isSimplified() ) { }
void DSPasteKeysCommand::addOrRemoveKeyframe(bool add) { for (std::list<boost::weak_ptr<DSKnob> >::const_iterator it = _dstKnobs.begin(); it != _dstKnobs.end(); ++it) { DSKnobPtr knobContext = it->lock(); if (!knobContext) { continue; } for (std::size_t i = 0; i < _keys.size(); ++i) { int dim = knobContext->getDimension(); KnobIPtr knob = knobContext->getInternalKnob(); knob->beginChanges(); double keyTime = _keys[i].key.getTime(); double setTime = _pasteRelativeToRefTime ? keyTime - _keys[_refKeyindex].key.getTime() + _refTime : keyTime; if (add) { for (int j = 0; j < knob->getDimension(); ++j) { if ( (dim == -1) || (j == dim) ) { KeyFrame k = _keys[i].key; k.setTime(setTime); knob->setKeyFrame(k, ViewSpec::all(), j, eValueChangedReasonNatronGuiEdited); } } } else { for (int j = 0; j < knob->getDimension(); ++j) { if ( (dim == -1) || (j == dim) ) { knob->deleteValueAtTime(eCurveChangeReasonDopeSheet, setTime, ViewSpec::all(), j, i == 0); } } } knob->endChanges(); } } _model->refreshSelectionBboxAndRedrawView(); } // DSPasteKeysCommand::addOrRemoveKeyframe
static void deleteKnobAnimation(const std::set<int>& userKeyframes, const KnobIPtr& knob, DeleteKnobAnimationEnum type, int currentTime) { for (int i = 0; i < knob->getDimension(); ++i) { CurvePtr curve = knob->getCurve(ViewSpec(0), i); assert(curve); KeyFrameSet keys = curve->getKeyFrames_mt_safe(); std::list<double> toRemove; switch (type) { case eDeleteKnobAnimationAll: { for (KeyFrameSet::iterator it = keys.begin(); it != keys.end(); ++it) { std::set<int>::iterator found = userKeyframes.find( (int)it->getTime() ); if ( found == userKeyframes.end() ) { toRemove.push_back( it->getTime() ); } } break; } case eDeleteKnobAnimationBeforeTime: { for (KeyFrameSet::iterator it = keys.begin(); it != keys.end(); ++it) { if (it->getTime() >= currentTime) { break; } std::set<int>::iterator found = userKeyframes.find( (int)it->getTime() ); if ( found == userKeyframes.end() ) { toRemove.push_back( it->getTime() ); } } break; } case eDeleteKnobAnimationAfterTime: { for (KeyFrameSet::reverse_iterator it = keys.rbegin(); it != keys.rend(); ++it) { if (it->getTime() <= currentTime) { break; } std::set<int>::iterator found = userKeyframes.find( (int)it->getTime() ); if ( found == userKeyframes.end() ) { toRemove.push_back( it->getTime() ); } } break; } } knob->deleteValuesAtTime(eCurveChangeReasonInternal, toRemove, ViewSpec::all(), i, true); } }