Beispiel #1
0
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()));
        }
    }
}
Beispiel #2
0
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();
    }
}
Beispiel #3
0
QPointF BaseTool::getCurrentPoint()
{
    return m_pScribbleArea->pixelToPoint(getCurrentPixel());
}
Beispiel #4
0
QPointF BaseTool::getCurrentPoint()
{
    return mEditor->view()->mapScreenToCanvas( getCurrentPixel() );
}
Beispiel #5
0
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();
        }
    }

}