20 #include <QMouseEvent>
23 #include "layervector.h"
24 #include "layerbitmap.h"
25 #include "layermanager.h"
26 #include "colormanager.h"
27 #include "strokemanager.h"
29 #include "pencilsettings.h"
31 #include "scribblearea.h"
33 #include "buckettool.h"
35 BucketTool::BucketTool( QObject *parent ) :
41 ToolType BucketTool::type()
46 void BucketTool::loadSettings()
49 properties.feather = 10;
50 properties.inpolLevel = -1;
51 properties.useAA = -1;
52 properties.tolerance = 10;
54 m_enabledProperties[TOLERANCE] =
true;
57 QCursor BucketTool::cursor()
59 if( mEditor->preference()->isOn( SETTING::TOOL_CURSOR ) ) {
60 QPixmap pixmap(
":icons/bucketTool.png" );
61 QPainter painter( &pixmap );
64 return QCursor( pixmap, 4, 20 );
66 return Qt::CrossCursor;
70 void BucketTool::setTolerance(
const int tolerance)
73 properties.tolerance = tolerance;
76 QSettings settings( PENCIL2D, PENCIL2D );
77 settings.setValue(
"tolerance", tolerance );
82 void BucketTool::mousePressEvent( QMouseEvent *event )
84 if( event->button() == Qt::LeftButton ) {
85 mEditor->backup( typeName() );
86 mScribbleArea->setAllDirty();
92 void BucketTool::mouseReleaseEvent( QMouseEvent *event )
94 Layer* layer = mEditor->layers()->currentLayer();
95 if ( layer == NULL ) {
return; }
97 if ( event->button() == Qt::LeftButton ) {
98 if ( layer->type() == Layer::BITMAP ) {
101 else if( layer->type() == Layer::VECTOR ) {
102 paintVector(event, layer);
108 void BucketTool::mouseMoveEvent( QMouseEvent *event )
110 Layer* layer = mEditor->layers()->currentLayer();
111 if ( layer->type() == Layer::BITMAP) {
114 else if(layer->type() == Layer::VECTOR ) {
115 if( event->buttons() & Qt::LeftButton ) {
117 qDebug() <<
"DrawStroke" <<
event->pos() ;
124 void BucketTool::paintBitmap(
Layer* layer)
126 Layer *targetLayer = layer;
127 int layerNumber = mEditor->layers()->currentLayerIndex();
129 BitmapImage *targetImage = ( (
LayerBitmap * )targetLayer )->getLastBitmapImageAtFrame( mEditor->currentFrame(), 0 );
131 QPoint point = getLastPoint().toPoint();
133 QRect cameraRect = mScribbleArea->getCameraRect().toRect();
135 BitmapImage::floodFill( targetImage,
139 qPremultiply( mEditor->color()->frontColor().rgba() ),
140 properties.tolerance * 2.55 );
142 mScribbleArea->setModified( layerNumber, mEditor->currentFrame() );
143 mScribbleArea->setAllDirty();
146 void BucketTool::paintVector(QMouseEvent *event,
Layer* layer)
148 mScribbleArea->clearBitmapBuffer();
149 VectorImage *vectorImage = ( (
LayerVector * )layer )->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 );
151 if( event->modifiers() == Qt::AltModifier ) {
152 vectorImage->removeArea( getLastPoint() );
155 if (path.size() < 10) {
156 vectorImage->fill( getLastPoint(),
157 mEditor->color()->frontColorNumber(),
158 3.0 / mEditor->view()->scaling() );
160 vectorImage->fillPath( path,
161 mEditor->color()->frontColorNumber(),
162 10.0 / mEditor->view()->scaling() );
165 mScribbleArea->setModified( mEditor->layers()->currentLayerIndex(), mEditor->currentFrame() );
166 mScribbleArea->setAllDirty();
169 void BucketTool::drawStroke()
171 StrokeTool::drawStroke();
174 Layer* layer = mEditor->layers()->currentLayer();
176 if( layer->type() == Layer::BITMAP ) {
179 else if( layer->type() == Layer::VECTOR ) {
180 int rad = qRound( ( mCurrentWidth / 2 + 2 ) * mEditor->view()->scaling() );
182 QColor pathColor = mEditor->color()->frontColor();
183 pathColor.setAlpha(50);
186 mCurrentWidth * mEditor->view()->scaling(),
191 if( p.size() == 4 ) {
192 QPainterPath path( p[ 0 ] );
193 path.cubicTo( p[ 1 ],
196 mScribbleArea->drawPath( path, pen, Qt::NoBrush, QPainter::CompositionMode_Source );
197 mScribbleArea->refreshVector( path.boundingRect().toRect(), rad );