| 3766 | } |
| 3767 | |
| 3768 | void |
| 3769 | KnobHelper::checkAnimationLevel(ViewSpec view, |
| 3770 | int dimension) |
| 3771 | { |
| 3772 | bool changed = false; |
| 3773 | |
| 3774 | for (int i = 0; i < _imp->dimension; ++i) { |
| 3775 | if ( (i == dimension) || (dimension == -1) ) { |
| 3776 | AnimationLevelEnum level = eAnimationLevelNone; |
| 3777 | |
| 3778 | |
| 3779 | if ( canAnimate() && |
| 3780 | isAnimated(i, view) && |
| 3781 | getExpression(i).empty() && |
| 3782 | getHolder() && getHolder()->getApp() ) { |
| 3783 | CurvePtr c = getCurve(view, i); |
| 3784 | double time = getHolder()->getApp()->getTimeLine()->currentFrame(); |
| 3785 | if (c->getKeyFramesCount() > 0) { |
| 3786 | KeyFrame kf; |
| 3787 | int nKeys = c->getNKeyFramesInRange(time, time + 1); |
| 3788 | if (nKeys > 0) { |
| 3789 | level = eAnimationLevelOnKeyframe; |
| 3790 | } else { |
| 3791 | level = eAnimationLevelInterpolatedValue; |
| 3792 | } |
| 3793 | } else { |
| 3794 | level = eAnimationLevelNone; |
| 3795 | } |
| 3796 | } else { |
| 3797 | level = eAnimationLevelNone; |
| 3798 | } |
| 3799 | { |
| 3800 | QMutexLocker l(&_imp->animationLevelMutex); |
| 3801 | assert( dimension < (int)_imp->animationLevel.size() ); |
| 3802 | if (_imp->animationLevel[i] != level) { |
| 3803 | changed = true; |
| 3804 | _imp->animationLevel[i] = level; |
| 3805 | } |
| 3806 | } |
| 3807 | } |
| 3808 | } |
| 3809 | |
| 3810 | KnobGuiIPtr hasGui = getKnobGuiPointer(); |
| 3811 | if ( changed && _signalSlotHandler && hasGui && !hasGui->isGuiFrozenForPlayback() ) { |
| 3812 | _signalSlotHandler->s_animationLevelChanged(view, dimension ); |
| 3813 | } |
| 3814 | } |
| 3815 | |
| 3816 | AnimationLevelEnum |
| 3817 | KnobHelper::getAnimationLevel(int dimension) const |
no test coverage detected