void SelectTool::mouseReleaseEvent( QMouseEvent *event ) { Layer *layer = mEditor->layers()->currentLayer(); if ( layer == NULL ) { return; } if ( event->button() == Qt::LeftButton ) { if ( layer->type() == Layer::VECTOR ) { if ( mScribbleArea->somethingSelected ) { mEditor->tools()->setCurrentTool( MOVE ); VectorImage *vectorImage = ( ( LayerVector * )layer )->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 ); mScribbleArea->setSelection( vectorImage->getSelectionRect(), true ); if ( mScribbleArea->mySelection.size() == QSizeF( 0, 0 ) ) { mScribbleArea->somethingSelected = false; } } mScribbleArea->updateCurrentFrame(); mScribbleArea->setAllDirty(); } else if ( layer->type() == Layer::BITMAP ) { mScribbleArea->updateCurrentFrame(); mScribbleArea->setAllDirty(); } } }
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::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(); }
void MoveTool::mousePressEvent( QMouseEvent *event ) { Layer *layer = mEditor->layers()->currentLayer(); if ( layer == NULL ) { return; } if ( event->button() == Qt::LeftButton ) { // ---------------------------------------------------------------------- if ( (layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR) ) { mEditor->backup( tr( "Move" ) ); mScribbleArea->setMoveMode( ScribbleArea::MIDDLE ); if ( mScribbleArea->somethingSelected ) // there is an area selection { if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.topLeft() ) < 6 ) { mScribbleArea->setMoveMode( ScribbleArea::TOPLEFT ); } if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.topRight() ) < 6 ) { mScribbleArea->setMoveMode( ScribbleArea::TOPRIGHT ); } if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.bottomLeft() ) < 6 ) { mScribbleArea->setMoveMode( ScribbleArea::BOTTOMLEFT ); } if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.bottomRight() ) < 6 ) { mScribbleArea->setMoveMode( ScribbleArea::BOTTOMRIGHT ); } } if ( mScribbleArea->getMoveMode() == ScribbleArea::MIDDLE ) { if ( layer->type() == Layer::BITMAP ) { if ( !(mScribbleArea->myTransformedSelection.contains( getLastPoint() )) ) // click is outside the transformed selection with the MOVE tool { mScribbleArea->paintTransformedSelection(); mScribbleArea->deselectAll(); } else if ( event->modifiers() == Qt::ControlModifier ) // --- rotation { mScribbleArea->setMoveMode( ScribbleArea::ROTATION ); //qDebug() << "ROTATION"; } else if (event->modifiers() == Qt::AltModifier ) // --- symmetry { mScribbleArea->setMoveMode(ScribbleArea::SYMMETRY ); //qDebug() << "SYMMETRY"; } } else if ( layer->type() == Layer::VECTOR ) { VectorImage *vectorImage = ((LayerVector *)layer)->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 ); if ( mScribbleArea->mClosestCurves.size() > 0 ) // the user clicks near a curve { // editor->backup(); if ( !vectorImage->isSelected( mScribbleArea->mClosestCurves ) ) { mScribbleArea->paintTransformedSelection(); if ( event->modifiers() != Qt::ShiftModifier ) { mScribbleArea->deselectAll(); } vectorImage->setSelected( mScribbleArea->mClosestCurves, true ); mScribbleArea->setSelection( vectorImage->getSelectionRect(), true ); mScribbleArea->update(); } } else { int areaNumber = vectorImage->getLastAreaNumber( getLastPoint() ); if ( areaNumber != -1 ) // the user clicks on an area { if ( !vectorImage->isAreaSelected( areaNumber ) ) { if ( event->modifiers() != Qt::ShiftModifier ) { mScribbleArea->deselectAll(); } vectorImage->setAreaSelected( areaNumber, true ); //setSelection( vectorImage->getSelectionRect() ); mScribbleArea->setSelection( QRectF( 0, 0, 0, 0 ), true ); mScribbleArea->update(); } } else // the user doesn't click near a curve or an area { if ( !(mScribbleArea->myTransformedSelection.contains( getLastPoint() )) ) // click is outside the transformed selection with the MOVE tool { mScribbleArea->paintTransformedSelection(); mScribbleArea->deselectAll(); } } } } } } } }