19 #include "layervector.h"
20 #include "scribblearea.h"
21 #include "layermanager.h"
22 #include "toolmanager.h"
23 #include "selecttool.h"
27 static QPointF gSelectionOrigin;
29 SelectTool::SelectTool(QObject *parent) :
34 void SelectTool::loadSettings()
36 properties.width = -1;
37 properties.feather = -1;
38 properties.inpolLevel = -1;
39 properties.useAA = -1;
42 QCursor SelectTool::cursor()
44 return Qt::CrossCursor;
47 void SelectTool::mousePressEvent( QMouseEvent *event )
49 Layer *layer = mEditor->layers()->currentLayer();
50 if ( layer == NULL ) {
return; }
52 mScribbleArea->myRotatedAngle = 0;
54 if ( event->button() == Qt::LeftButton )
56 gSelectionOrigin = getLastPoint();
58 if ( layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR )
60 if ( layer->type() == Layer::VECTOR )
62 ( (
LayerVector * )layer )->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 )->deselectAll();
64 mScribbleArea->setMoveMode( ScribbleArea::NONE );
65 mEditor->backup( typeName() );
67 if ( mScribbleArea->somethingSelected )
69 if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.topLeft() ) < 6 )
71 mScribbleArea->setMoveMode( ScribbleArea::TOPLEFT );
73 if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.topRight() ) < 6 )
75 mScribbleArea->setMoveMode( ScribbleArea::TOPRIGHT );
77 if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.bottomLeft() ) < 6 )
79 mScribbleArea->setMoveMode( ScribbleArea::BOTTOMLEFT );
81 if ( BezierCurve::mLength( getLastPoint() - mScribbleArea->myTransformedSelection.bottomRight() ) < 6 )
83 mScribbleArea->setMoveMode( ScribbleArea::BOTTOMRIGHT );
88 if ( mScribbleArea->getMoveMode() == ScribbleArea::NONE )
92 mScribbleArea->deselectAll();
94 mScribbleArea->mySelection.setTopLeft( getLastPoint() );
95 mScribbleArea->mySelection.setBottomRight( getLastPoint() );
96 mScribbleArea->setSelection( mScribbleArea->mySelection,
true );
101 mScribbleArea->mySelection.setTopLeft( getLastPoint() );
102 mScribbleArea->mySelection.setBottomRight( getLastPoint() );
103 mScribbleArea->setSelection( mScribbleArea->mySelection,
true );
105 mScribbleArea->update();
110 void SelectTool::mouseReleaseEvent( QMouseEvent *event )
112 Layer *layer = mEditor->layers()->currentLayer();
113 if ( layer == NULL ) {
return; }
115 if ( event->button() == Qt::LeftButton )
117 if ( layer->type() == Layer::VECTOR )
119 if ( mScribbleArea->somethingSelected )
121 mEditor->tools()->setCurrentTool( MOVE );
123 VectorImage *vectorImage = ( (
LayerVector * )layer )->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 );
124 mScribbleArea->setSelection( vectorImage->getSelectionRect(), true );
125 if ( mScribbleArea->mySelection.width() <= 0 && mScribbleArea->mySelection.height() <= 0 )
127 mScribbleArea->deselectAll();
130 mScribbleArea->updateCurrentFrame();
131 mScribbleArea->setAllDirty();
133 else if ( layer->type() == Layer::BITMAP )
135 if ( mScribbleArea->mySelection.width() <= 0 && mScribbleArea->mySelection.height() <= 0 )
137 mScribbleArea->deselectAll();
139 mScribbleArea->updateCurrentFrame();
140 mScribbleArea->setAllDirty();
145 void SelectTool::mouseMoveEvent( QMouseEvent *event )
147 Layer* layer = mEditor->layers()->currentLayer();
148 if ( layer == NULL ) {
return; }
150 if ( ( event->buttons() & Qt::LeftButton ) && mScribbleArea->somethingSelected && ( layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR ) )
152 switch ( mScribbleArea->getMoveMode() )
154 case ScribbleArea::NONE:
159 int mouseX = getCurrentPoint().x();
160 int mouseY = getCurrentPoint().y();
161 QRectF & selectRect = mScribbleArea->mySelection;
163 if(mouseX < gSelectionOrigin.x())
165 selectRect.setLeft(mouseX);
166 selectRect.setRight(gSelectionOrigin.x());
170 selectRect.setLeft(gSelectionOrigin.x());
171 selectRect.setRight(mouseX);
174 if(mouseY < gSelectionOrigin.y())
176 selectRect.setTop(mouseY);
177 selectRect.setBottom(gSelectionOrigin.y());
181 selectRect.setTop(gSelectionOrigin.y());
182 selectRect.setBottom(mouseY);
188 case ScribbleArea::TOPLEFT:
189 mScribbleArea->mySelection.setTopLeft( getCurrentPoint() );
192 case ScribbleArea::TOPRIGHT:
193 mScribbleArea->mySelection.setTopRight( getCurrentPoint() );
196 case ScribbleArea::BOTTOMLEFT:
197 mScribbleArea->mySelection.setBottomLeft( getCurrentPoint() );
200 case ScribbleArea::BOTTOMRIGHT:
201 mScribbleArea->mySelection.setBottomRight( getCurrentPoint() );
208 mScribbleArea->myTransformedSelection = mScribbleArea->mySelection.adjusted( 0, 0, 0, 0 );
209 mScribbleArea->myTempTransformedSelection = mScribbleArea->mySelection.adjusted( 0, 0, 0, 0 );
211 if ( layer->type() == Layer::VECTOR )
213 ( (
LayerVector * )layer )->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 )->select( mScribbleArea->mySelection );
215 mScribbleArea->update();
219 bool SelectTool::keyPressEvent(QKeyEvent *event)
221 switch ( event->key() ) {
223 mScribbleArea->setTemporaryTool( MOVE );