/** * @brief MoveTool::createVectorSelection * In vector the selection rectangle is based on the bounding box of the curves * We can therefore create a selection just by clicking near/on a curve */ void MoveTool::createVectorSelection(Qt::KeyboardModifiers keyMod, Layer* layer) { assert(layer->type() == Layer::VECTOR); LayerVector* vecLayer = static_cast<LayerVector*>(layer); VectorImage* vectorImage = vecLayer->getLastVectorImageAtFrame(mEditor->currentFrame(), 0); if (!mScribbleArea->mClosestCurves.empty()) // the user clicks near a curve { setCurveSelected(vectorImage, keyMod); } else if (vectorImage->getLastAreaNumber(getLastPoint()) > -1) { setAreaSelected(vectorImage, keyMod); } mScribbleArea->update(); }
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(); } } } } } } } }