void Editor::paste() { if((cutFlag||copyFlag)&&layers()->currentLayerIndex()>2) { newBitmapLayer(); } Layer* layer = mObject->getLayer( layers()->currentLayerIndex() ); if ( layer != NULL ) { if ( layer->type() == Layer::BITMAP && g_clipboardBitmapImage.image() != NULL ) { backup( tr( "Paste" ) ); BitmapImage tobePasted = g_clipboardBitmapImage.copy(); qDebug() << "to be pasted --->" << tobePasted.image()->size(); if ( mScribbleArea->somethingSelected ) { QRectF selection = mScribbleArea->getSelection(); if ( g_clipboardBitmapImage.width() <= selection.width() && g_clipboardBitmapImage.height() <= selection.height() ) { tobePasted.moveTopLeft( selection.topLeft() ); } else { tobePasted.transform( selection, true ); } } auto pLayerBitmap = static_cast< LayerBitmap* >( layer ); pLayerBitmap->getLastBitmapImageAtFrame( currentFrame(), 0 )->paste( &tobePasted ); // paste the clipboard } else if ( layer->type() == Layer::VECTOR && clipboardVectorOk ) { backup( tr( "Paste" ) ); mScribbleArea->deselectAll(); VectorImage* vectorImage = ( ( LayerVector* )layer )->getLastVectorImageAtFrame( currentFrame(), 0 ); vectorImage->paste( g_clipboardVectorImage ); // paste the clipboard mScribbleArea->setSelection( vectorImage->getSelectionRect(), true ); //((LayerVector*)layer)->getLastVectorImageAtFrame(backupFrame, 0)->modification(); ???? } } mScribbleArea->updateCurrentFrame(); if((cutFlag&&!mScribbleArea->somethingSelected)||(copyFlag&&mScribbleArea->somethingSelected)) { mScribbleArea->mySelection=cutArea; mScribbleArea->setSelection( mScribbleArea->mySelection, true ); mScribbleArea->myTransformedSelection = mScribbleArea->mySelection.adjusted( 0, 0, 0, 0 ); mScribbleArea->myTempTransformedSelection = mScribbleArea->mySelection.adjusted( 0, 0, 0, 0 ); mScribbleArea->update(); mScribbleArea->mIncludeImg[mLayerManager->currentLayerIndex()]=mScribbleArea->mySelection; tools()->setCurrentTool(MOVE); } cutFlag =0; copyFlag =0; }
void Editor::backup( int backupLayer, int backupFrame, QString undoText ) { while ( mBackupList.size() - 1 > mBackupIndex && mBackupList.size() > 0 ) { delete mBackupList.takeLast(); } while ( mBackupList.size() > 19 ) // we authorize only 20 levels of cancellation { delete mBackupList.takeFirst(); mBackupIndex--; } Layer* layer = mObject->getLayer( backupLayer ); if ( layer != NULL ) { if ( layer->type() == Layer::BITMAP ) { BackupBitmapElement* element = new BackupBitmapElement(); element->layer = backupLayer; element->frame = backupFrame; element->undoText = undoText; element->somethingSelected = this->getScribbleArea()->somethingSelected; element->mySelection = this->getScribbleArea()->mySelection; element->myTransformedSelection = this->getScribbleArea()->myTransformedSelection; element->myTempTransformedSelection = this->getScribbleArea()->myTempTransformedSelection; BitmapImage* bitmapImage = ( ( LayerBitmap* )layer )->getLastBitmapImageAtFrame( backupFrame, 0 ); if ( bitmapImage != NULL ) { element->bitmapImage = bitmapImage->copy(); // copy the image mBackupList.append( element ); mBackupIndex++; } } if ( layer->type() == Layer::VECTOR ) { BackupVectorElement* element = new BackupVectorElement(); element->layer = backupLayer; element->frame = backupFrame; element->undoText = undoText; element->somethingSelected = this->getScribbleArea()->somethingSelected; element->mySelection = this->getScribbleArea()->mySelection; element->myTransformedSelection = this->getScribbleArea()->myTransformedSelection; element->myTempTransformedSelection = this->getScribbleArea()->myTempTransformedSelection; VectorImage* vectorImage = ( ( LayerVector* )layer )->getLastVectorImageAtFrame( backupFrame, 0 ); if ( vectorImage != NULL ) { element->vectorImage = *vectorImage; // copy the image (that works but I should also provide a copy() method) mBackupList.append( element ); mBackupIndex++; } } } }
void Editor::paste() { Layer* layer = mObject->getLayer( layers()->currentLayerIndex() ); if ( layer != NULL ) { if ( layer->type() == Layer::BITMAP && g_clipboardBitmapImage.image() != NULL ) { backup( tr( "Paste" ) ); BitmapImage tobePasted = g_clipboardBitmapImage.copy(); qDebug() << "to be pasted --->" << tobePasted.image()->size(); if ( mScribbleArea->somethingSelected ) { QRectF selection = mScribbleArea->getSelection(); if ( g_clipboardBitmapImage.width() <= selection.width() && g_clipboardBitmapImage.height() <= selection.height() ) { tobePasted.moveTopLeft( selection.topLeft() ); } else { tobePasted.transform( selection, true ); } } auto pLayerBitmap = static_cast< LayerBitmap* >( layer ); pLayerBitmap->getLastBitmapImageAtFrame( currentFrame(), 0 )->paste( &tobePasted ); // paste the clipboard } else if ( layer->type() == Layer::VECTOR && clipboardVectorOk ) { backup( tr( "Paste" ) ); mScribbleArea->deselectAll(); VectorImage* vectorImage = ( ( LayerVector* )layer )->getLastVectorImageAtFrame( currentFrame(), 0 ); vectorImage->paste( g_clipboardVectorImage ); // paste the clipboard mScribbleArea->setSelection( vectorImage->getSelectionRect(), true ); //((LayerVector*)layer)->getLastVectorImageAtFrame(backupFrame, 0)->modification(); ???? } } mScribbleArea->updateCurrentFrame(); }