void SmudgeTool::mousePressEvent(QMouseEvent *event) { //qDebug() << "smudgetool: mousePressEvent"; Layer *layer = m_pEditor->getCurrentLayer(); if (layer == NULL) { return; } if (event->button() == Qt::LeftButton) { if (layer->type == Layer::BITMAP) { m_pEditor->backup(typeName()); m_pScribbleArea->setAllDirty(); startStroke(); lastBrushPoint = getCurrentPoint(); } else if (layer->type == Layer::VECTOR) { m_pScribbleArea->closestCurves = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0) ->getCurvesCloseTo(getCurrentPoint(), m_pScribbleArea->tol / m_pScribbleArea->getTempViewScaleX()); m_pScribbleArea->closestVertices = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0) ->getVerticesCloseTo(getCurrentPoint(), m_pScribbleArea->tol / m_pScribbleArea->getTempViewScaleX()); if (m_pScribbleArea->closestVertices.size() > 0 || m_pScribbleArea->closestCurves.size() > 0) // the user clicks near a vertex or a curve { //qDebug() << "closestCurves:" << closestCurves << " | closestVertices" << closestVertices; m_pEditor->backup(typeName()); VectorImage *vectorImage = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0); if (event->modifiers() != Qt::ShiftModifier && !vectorImage->isSelected(m_pScribbleArea->closestVertices)) { m_pScribbleArea->paintTransformedSelection(); m_pScribbleArea->deselectAll(); } vectorImage->setSelected(m_pScribbleArea->closestVertices, true); m_pScribbleArea->vectorSelection.add(m_pScribbleArea->closestCurves); m_pScribbleArea->vectorSelection.add(m_pScribbleArea->closestVertices); m_pScribbleArea->update(); } else { m_pScribbleArea->deselectAll(); } } } }
void PencilTool::paintVectorStroke(Layer* layer) { if (mStrokePoints.empty()) return; // Clear the temporary pixel path mScribbleArea->clearBitmapBuffer(); qreal tol = mScribbleArea->getCurveSmoothing() / mEditor->view()->scaling(); BezierCurve curve(mStrokePoints, mStrokePressures, tol); curve.setWidth(0); curve.setFeather(0); curve.setFilled(false); curve.setInvisibility(true); curve.setVariableWidth(false); curve.setColourNumber(mEditor->color()->frontColorNumber()); VectorImage* vectorImage = ((LayerVector *)layer)->getLastVectorImageAtFrame(mEditor->currentFrame(), 0); vectorImage->addCurve(curve, qAbs(mEditor->view()->scaling()), properties.vectorMergeEnabled); if (properties.useFillContour) { vectorImage->fillContour(mStrokePoints, mEditor->color()->frontColorNumber()); } if (vectorImage->isAnyCurveSelected() || mScribbleArea->isSomethingSelected()) { mScribbleArea->deselectAll(); } // select last/newest curve vectorImage->setSelected(vectorImage->getLastCurveNumber(), true); // TODO: selection doesn't apply on enter mScribbleArea->setModified(mEditor->layers()->currentLayerIndex(), mEditor->currentFrame()); mScribbleArea->setAllDirty(); }
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(); } } } } } } } }