void PenTool::mouseReleaseEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( event->button() == Qt::LeftButton ) { if ( isLayerPaintable( layer ) ) { drawStroke(); } if ( layer->type() == Layer::BITMAP ) { mScribbleArea->paintBitmapBuffer(); mScribbleArea->setAllDirty(); } else if ( layer->type() == Layer::VECTOR && mStrokePoints.size() > -1 ) { // Clear the temporary pixel path mScribbleArea->clearBitmapBuffer(); qreal tol = mScribbleArea->getCurveSmoothing() / mEditor->view()->scaling(); BezierCurve curve( mStrokePoints, mStrokePressures, tol ); curve.setWidth( properties.width ); curve.setFeather( properties.feather ); curve.setInvisibility( false ); curve.setVariableWidth( properties.pressure ); curve.setColourNumber( mEditor->color()->frontColorNumber() ); auto pLayerVector = static_cast< LayerVector* >( layer ); VectorImage* vectorImage = pLayerVector->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 ); vectorImage->addCurve( curve, mEditor->view()->scaling() ); mScribbleArea->setModified( mEditor->layers()->currentLayerIndex(), mEditor->currentFrame() ); mScribbleArea->setAllDirty(); } } endStroke(); }
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(); }