| 8981 | } |
| 8982 | |
| 8983 | void |
| 8984 | Node::onRefreshIdentityStateRequestReceived() |
| 8985 | { |
| 8986 | assert( QThread::currentThread() == qApp->thread() ); |
| 8987 | if ( (_imp->refreshIdentityStateRequestsCount == 0) || !_imp->effect ) { |
| 8988 | //was already processed |
| 8989 | return; |
| 8990 | } |
| 8991 | _imp->refreshIdentityStateRequestsCount = 0; |
| 8992 | |
| 8993 | boost::shared_ptr<Project> project = getApp()->getProject(); |
| 8994 | double time = project->currentFrame(); |
| 8995 | RenderScale scale(1.); |
| 8996 | double inputTime = 0; |
| 8997 | U64 hash = getHashValue(); |
| 8998 | bool viewAware = _imp->effect->isViewAware(); |
| 8999 | int nViews = !viewAware ? 1 : project->getProjectViewsCount(); |
| 9000 | Format frmt; |
| 9001 | project->getProjectDefaultFormat(&frmt); |
| 9002 | |
| 9003 | //The one view node might report it is identity, but we do not want it to display it |
| 9004 | |
| 9005 | |
| 9006 | bool isIdentity = false; |
| 9007 | int inputNb = -1; |
| 9008 | OneViewNode* isOneView = dynamic_cast<OneViewNode*>( _imp->effect.get() ); |
| 9009 | if (!isOneView) { |
| 9010 | for (int i = 0; i < nViews; ++i) { |
| 9011 | int identityInputNb = -1; |
| 9012 | ViewIdx identityView; |
| 9013 | bool isViewIdentity = _imp->effect->isIdentity_public(true, hash, time, scale, frmt, ViewIdx(i), &inputTime, &identityView, &identityInputNb); |
| 9014 | if ( (i > 0) && ( (isViewIdentity != isIdentity) || (identityInputNb != inputNb) || (identityView.value() != i) ) ) { |
| 9015 | isIdentity = false; |
| 9016 | inputNb = -1; |
| 9017 | break; |
| 9018 | } |
| 9019 | isIdentity |= isViewIdentity; |
| 9020 | inputNb = identityInputNb; |
| 9021 | if (!isIdentity) { |
| 9022 | break; |
| 9023 | } |
| 9024 | } |
| 9025 | } |
| 9026 | |
| 9027 | //Check for consistency across views or then say the effect is not identity since the UI cannot display 2 different states |
| 9028 | //depending on the view |
| 9029 | |
| 9030 | |
| 9031 | boost::shared_ptr<NodeGuiI> nodeUi = _imp->guiPointer.lock(); |
| 9032 | assert(nodeUi); |
| 9033 | nodeUi->onIdentityStateChanged(isIdentity ? inputNb : -1); |
| 9034 | } // Node::onRefreshIdentityStateRequestReceived |
| 9035 | |
| 9036 | void |
| 9037 | Node::refreshIdentityState() |
nothing calls this directly
no test coverage detected