| 285 | } // ProgressTaskInfo::cancelTask |
| 286 | |
| 287 | void |
| 288 | ProgressTaskInfo::restartTask() |
| 289 | { |
| 290 | { |
| 291 | QMutexLocker k(&_imp->canceledMutex); |
| 292 | _imp->canceled = false; |
| 293 | } |
| 294 | _imp->updatedProgressOnce = false; |
| 295 | _imp->timer.reset(new TimeLapse); |
| 296 | _imp->refreshLabelTimer->start(NATRON_PROGRESS_DIALOG_ETA_REFRESH_MS); |
| 297 | |
| 298 | _imp->pauseTasksButton->setEnabled(true); |
| 299 | _imp->restartTasksButton->setEnabled(false); |
| 300 | |
| 301 | |
| 302 | NodePtr node = _imp->getNode(); |
| 303 | if (!node) { |
| 304 | return; |
| 305 | } |
| 306 | EffectInstancePtr effect = node->getEffectInstance(); |
| 307 | if (!effect) { |
| 308 | return; |
| 309 | } |
| 310 | if ( effect->isOutput() ) { |
| 311 | int firstFrame; |
| 312 | if ( (_imp->lastRenderedFrame == _imp->lastFrame) || (_imp->lastRenderedFrame == -1) ) { |
| 313 | firstFrame = _imp->firstFrame; |
| 314 | _imp->nFramesRendered = 0; |
| 315 | } else { |
| 316 | firstFrame = _imp->lastRenderedFrame; |
| 317 | } |
| 318 | AppInstance::RenderWork w( dynamic_cast<OutputEffectInstance*>( node->getEffectInstance().get() ), |
| 319 | firstFrame, |
| 320 | _imp->lastFrame, |
| 321 | _imp->frameStep, |
| 322 | node->getApp()->isRenderStatsActionChecked() ); |
| 323 | w.isRestart = true; |
| 324 | _imp->statusItem->setTextColor(Qt::yellow); |
| 325 | _imp->status = eProgressTaskStatusQueued; |
| 326 | _imp->statusItem->setText( tr("Queued") ); |
| 327 | _imp->refreshButtons(); |
| 328 | std::list<AppInstance::RenderWork> works; |
| 329 | works.push_back(w); |
| 330 | node->getApp()->startWritersRendering(false, works); |
| 331 | } |
| 332 | } |
| 333 | |
| 334 | void |
| 335 | ProgressTaskInfo::onRenderEngineFrameComputed(int frame, |
nothing calls this directly
no test coverage detected