void Editor::addKeyFame( int layerNumber, int frameIndex ) { Layer* layer = mObject->getLayer( layerNumber ); if ( layer == NULL ) { return; } bool isOK = false; switch ( layer->type() ) { case Layer::BITMAP: case Layer::VECTOR: case Layer::CAMERA: isOK = layer->addNewKeyAt( frameIndex ); break; default: break; } if ( isOK ) { scrubTo( frameIndex ); getScribbleArea()->updateCurrentFrame(); } else { addKeyFame( layerNumber, frameIndex + 1 ); } }
bool Editor::importBitmapImage( QString filePath ) { backup( tr( "ImportImg" ) ); QImageReader reader( filePath ); Q_ASSERT( layers()->currentLayer()->type() == Layer::BITMAP ); auto layer = static_cast<LayerBitmap*>( layers()->currentLayer() ); QImage img( reader.size(), QImage::Format_ARGB32_Premultiplied ); while ( reader.read( &img ) ) { if ( img.isNull() || reader.nextImageDelay() <= 0 ) { break; } if ( !layer->keyExists( currentFrame() ) ) { addNewKey(); } BitmapImage* bitmapImage = layer->getBitmapImageAtFrame( currentFrame() ); QRect boundaries = img.rect(); boundaries.moveTopLeft( mScribbleArea->getCentralPoint().toPoint() - QPoint( boundaries.width() / 2, boundaries.height() / 2 ) ); BitmapImage* importedBitmapImage = new BitmapImage( boundaries, img ); bitmapImage->paste( importedBitmapImage ); scrubTo( currentFrame() + 1 ); } return true; }
void Editor::scrubBackward() { if ( currentFrame() > 1 ) { scrubTo( currentFrame() - 1 ); } }
void Editor::scrubPreviousKeyFrame() { Layer* layer = mObject->getLayer( layers()->currentLayerIndex() ); Q_ASSERT( layer ); int prevPosition = layer->getPreviousKeyFramePosition( currentFrame() ); scrubTo( prevPosition ); }
void Editor::scrubNextKeyFrame() { Layer* layer = layers()->currentLayer(); Q_ASSERT( layer ); int nextPosition = layer->getNextKeyFramePosition( currentFrame() ); scrubTo( nextPosition ); }
bool Editor::importBitmapImage(QString filePath, int space) { QImageReader reader(filePath); Q_ASSERT(layers()->currentLayer()->type() == Layer::BITMAP); auto layer = static_cast<LayerBitmap*>(layers()->currentLayer()); QImage img(reader.size(), QImage::Format_ARGB32_Premultiplied); if (img.isNull()) { return false; } while (reader.read(&img)) { if (!layer->keyExists(currentFrame())) { addNewKey(); } BitmapImage* bitmapImage = layer->getBitmapImageAtFrame(currentFrame()); BitmapImage importedBitmapImage(mScribbleArea->getCentralPoint().toPoint() - QPoint(img.width() / 2, img.height() / 2), img); bitmapImage->paste(&importedBitmapImage); if (space > 1) { scrubTo(currentFrame() + space); } else { scrubTo(currentFrame() + 1); } backup(tr("Import Image")); // Workaround for tiff import getting stuck in this loop if (!reader.supportsAnimation()) { break; } } return true; }
void Editor::updateObject() { scrubTo(mObject->data()->getCurrentFrame()); setCurrentLayerIndex(mObject->data()->getCurrentLayer()); mAutosaveCounter = 0; mAutosaveNerverAskAgain = false; if (mScribbleArea) { mScribbleArea->updateAllFrames(); } if (mPreferenceManager) { mObject->setActiveFramePoolSize(mPreferenceManager->getInt(SETTING::FRAME_POOL_SIZE)); } emit updateLayerCount(); }
KeyFrame* Editor::addKeyFrame(int layerNumber, int frameIndex) { Layer* layer = mObject->getLayer(layerNumber); if (layer == nullptr) { Q_ASSERT(false); return nullptr; } while (layer->keyExists(frameIndex)) { frameIndex += 1; } bool ok = layer->addNewKeyFrameAt(frameIndex); if (ok) { scrubTo(frameIndex); // currentFrameChanged() emit inside. } return layer->getKeyFrameAt(frameIndex); }
void Editor::scrubForward() { scrubTo( currentFrame() + 1 ); }
void Editor::resetUI() { updateObject(); scrubTo( 0 ); }