bool changeFrameSkippingHolds(QKeyEvent *e) { if ((e->modifiers() & Qt::ShiftModifier) == 0 || e->key() != Qt::Key_Down && e->key() != Qt::Key_Up) return false; TApp *app = TApp::instance(); TFrameHandle *fh = app->getCurrentFrame(); if (!fh->isEditingScene()) return false; int row = fh->getFrame(); int col = app->getCurrentColumn()->getColumnIndex(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(row, col); if (e->key() == Qt::Key_Down) { if (cell.isEmpty()) { int r0, r1; if (xsh->getCellRange(col, r0, r1)) { while (row <= r1 && xsh->getCell(row, col).isEmpty()) row++; if (xsh->getCell(row, col).isEmpty()) return false; } else return false; } else { while (xsh->getCell(row, col) == cell) row++; } } else { // Key_Up while (row >= 0 && xsh->getCell(row, col) == cell) row--; if (row < 0) return false; cell = xsh->getCell(row, col); while (row > 0 && xsh->getCell(row - 1, col) == cell) row--; } fh->setFrame(row); return true; }
void ComboViewerPanel::onDrawFrame( int frame, const ImagePainter::VisualSettings &settings) { TApp *app = TApp::instance(); m_sceneViewer->setVisual(settings); TFrameHandle *frameHandle = app->getCurrentFrame(); if (m_sceneViewer->isPreviewEnabled()) { class Previewer *pr = Previewer::instance(m_sceneViewer->getPreviewMode() == SceneViewer::SUBCAMERA_PREVIEW); pr->getRaster(frame - 1); // the 'getRaster' starts the render of the frame // is not already started int curFrame = frame; if (frameHandle->isPlaying() && !pr->isFrameReady( frame - 1)) // stops on last rendered frame until current is ready! { while (frame > 0 && !pr->isFrameReady(frame - 1)) frame--; if (frame == 0) frame = curFrame; // if no frame is ready, I stay on current...no use // to rewind m_flipConsole->setCurrentFrame(frame); } } assert(frame >= 0); if (frame != frameHandle->getFrameIndex() + 1) { if (frameHandle->isEditingScene()) { TXshColumn *column = app->getCurrentXsheet()->getXsheet()->getColumn( app->getCurrentColumn()->getColumnIndex()); if (column) { TXshSoundColumn *soundColumn = column->getSoundColumn(); if (soundColumn && !soundColumn->isPlaying()) app->getCurrentFrame()->scrubColumn(frame, frame, soundColumn); } } frameHandle->setCurrentFrame(frame); } else if (settings.m_blankColor != TPixel::Transparent) m_sceneViewer->update(); }