void HandTool::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() != Qt::NoButton) { if (event->modifiers() & Qt::ControlModifier || event->modifiers() & Qt::AltModifier || event->buttons() & Qt::RightButton) { QPoint centralPixel(m_pScribbleArea->width() / 2, m_pScribbleArea->height() / 2); if (getLastPressPixel().x() != centralPixel.x()) { qreal scale = 1.0; qreal cosine = 1.0; qreal sine = 0.0; if (event->modifiers() & Qt::AltModifier) // rotation { QPointF V1 = getLastPressPixel() - centralPixel; QPointF V2 = getCurrentPixel() - centralPixel; cosine = (V1.x() * V2.x() + V1.y() * V2.y()) / (BezierCurve::eLength(V1) * BezierCurve::eLength(V2)); sine = (-V1.x() * V2.y() + V1.y() * V2.x()) / (BezierCurve::eLength(V1) * BezierCurve::eLength(V2)); } if (event->modifiers() & Qt::ControlModifier || event->buttons() & Qt::RightButton) // scale { scale = exp(0.01 * (getCurrentPixel().y() - getLastPressPixel().y())); } m_pScribbleArea->setTransformationMatrix(QMatrix( scale * cosine, -scale * sine, scale * sine, scale * cosine, 0.0, 0.0 )); } } else // translation { m_pScribbleArea->setTransformationMatrix(QMatrix( 1.0, 0.0, 0.0, 1.0, getCurrentPixel().x() - getLastPressPixel().x(), getCurrentPixel().y() - getLastPressPixel().y())); } } }
void MoveTool::mouseMoveEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( layer == NULL ) { return; } if ( layer->type() != Layer::BITMAP && layer->type() != Layer::VECTOR ) { return; } if ( event->buttons() & Qt::LeftButton ) // the user is also pressing the mouse (dragging) { if ( mScribbleArea->somethingSelected ) // there is something selected { if ( event->modifiers() != Qt::ShiftModifier ) // (and the user doesn't press shift) { switch ( mScribbleArea->mMoveMode ) { case ScribbleArea::MIDDLE: if ( QLineF( getLastPressPixel(), getCurrentPixel() ).length() > 4 ) { mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection.translated( mScribbleArea->mOffset ); } break; case ScribbleArea::TOPRIGHT: mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection.adjusted( 0, mScribbleArea->mOffset.y(), mScribbleArea->mOffset.x(), 0 ); break; case ScribbleArea::TOPLEFT: mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection.adjusted( mScribbleArea->mOffset.x(), mScribbleArea->mOffset.y(), 0, 0 ); break; // TOPRIGHT XXX case ScribbleArea::BOTTOMLEFT: mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection.adjusted( mScribbleArea->mOffset.x(), 0, 0, mScribbleArea->mOffset.y() ); break; case ScribbleArea::BOTTOMRIGHT: mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection.adjusted( 0, 0, mScribbleArea->mOffset.x(), mScribbleArea->mOffset.y() ); break; case ScribbleArea::ROTATION: mScribbleArea->myTempTransformedSelection = mScribbleArea->myTransformedSelection; // @ necessary? mScribbleArea->myRotatedAngle = getCurrentPixel().x() - getLastPressPixel().x(); //qDebug() << "rotation" << m_pScribbleArea->myRotatedAngle; break; } mScribbleArea->calculateSelectionTransformation(); mScribbleArea->update(); mScribbleArea->setAllDirty(); } } else // there is nothing selected { // we switch to the select tool mEditor->tools()->setCurrentTool( SELECT ); mScribbleArea->mMoveMode = ScribbleArea::MIDDLE; mScribbleArea->mySelection.setTopLeft( getLastPoint() ); mScribbleArea->mySelection.setBottomRight( getLastPoint() ); mScribbleArea->setSelection( mScribbleArea->mySelection, true ); } } else // the user is moving the mouse without pressing it { if ( layer->type() == Layer::VECTOR ) { auto layerVector = static_cast< LayerVector* >( layer ); VectorImage* pVecImg = layerVector->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 ); mScribbleArea->mClosestCurves = pVecImg->getCurvesCloseTo( getCurrentPoint(), mScribbleArea->tol / mEditor->view()->scaling() ); } mScribbleArea->update(); } }
QPointF BaseTool::getLastPressPoint() { return m_pScribbleArea->pixelToPoint(getLastPressPixel()); }
QPointF BaseTool::getLastPressPoint() { return mEditor->view()->mapScreenToCanvas( getLastPressPixel() ); }
void MoveTool::mouseMoveEvent(QMouseEvent *event) { Layer *layer = m_pEditor->getCurrentLayer(); if (layer == NULL) { return; } if (layer->type == Layer::BITMAP || layer->type == Layer::VECTOR) { if (event->buttons() & Qt::LeftButton) // the user is also pressing the mouse (dragging) { if (m_pScribbleArea->somethingSelected) // there is something selected { if (event->modifiers() != Qt::ShiftModifier) // (and the user doesn't press shift) { switch (m_pScribbleArea->m_moveMode) { case ScribbleArea::MIDDLE: if (QLineF(getLastPressPixel(), getCurrentPixel()).length() > 4) { m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection.translated(m_pScribbleArea->offset); } break; case ScribbleArea::TOPRIGHT: m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection.adjusted(0, m_pScribbleArea->offset.y(), m_pScribbleArea->offset.x(), 0); break; case ScribbleArea::TOPLEFT: m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection.adjusted(m_pScribbleArea->offset.x(), m_pScribbleArea->offset.y(), 0, 0); break; // TOPRIGHT XXX case ScribbleArea::BOTTOMLEFT: m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection.adjusted(m_pScribbleArea->offset.x(), 0, 0, m_pScribbleArea->offset.y()); break; case ScribbleArea::BOTTOMRIGHT: m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection.adjusted(0, 0, m_pScribbleArea->offset.x(), m_pScribbleArea->offset.y()); break; case ScribbleArea::ROTATION: m_pScribbleArea->myTempTransformedSelection = m_pScribbleArea->myTransformedSelection; // @ necessary? m_pScribbleArea->myRotatedAngle = getCurrentPixel().x() - getLastPressPixel().x(); //qDebug() << "rotation" << m_pScribbleArea->myRotatedAngle; break; } m_pScribbleArea->calculateSelectionTransformation(); m_pScribbleArea->update(); m_pScribbleArea->setAllDirty(); } } else // there is nothing selected { //selectionTransformation = selectionTransformation.translate(offset.x(), offset.y()); //if (layer->type == Layer::VECTOR) ((LayerVector*)layer)->getLastVectorImageAtFrame(editor->currentFrame, 0)->setSelectionTransformation(selectionTransformation); //VectorImage* vectorImage = ((LayerVector*)layer)->getLastVectorImageAtFrame(editor->currentFrame, 0); //setSelection( vectorImage->getSelectionRect() ); // we switch to the select tool m_pScribbleArea->switchTool(SELECT); m_pScribbleArea->m_moveMode = ScribbleArea::MIDDLE; m_pScribbleArea->mySelection.setTopLeft(getLastPoint()); m_pScribbleArea->mySelection.setBottomRight(getLastPoint()); m_pScribbleArea->setSelection(m_pScribbleArea->mySelection, true); } } else // the user is moving the mouse without pressing it { 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->update(); } } }