17 #include "buckettool.h"
23 #include "pointerevent.h"
26 #include "layervector.h"
27 #include "layerbitmap.h"
28 #include "layermanager.h"
29 #include "colormanager.h"
30 #include "strokemanager.h"
31 #include "viewmanager.h"
32 #include "vectorimage.h"
34 #include "scribblearea.h"
41 ToolType BucketTool::type()
46 void BucketTool::loadSettings()
48 mPropertyEnabled[TOLERANCE] =
true;
49 mPropertyEnabled[WIDTH] =
true;
53 properties.width = settings.value(
"fillThickness", 4.0).toDouble();
54 properties.feather = 10;
55 properties.stabilizerLevel = StabilizationLevel::NONE;
56 properties.useAA = DISABLED;
57 properties.tolerance = settings.value(
"tolerance", 32.0).toDouble();
60 void BucketTool::resetToDefault()
68 if (mEditor->preference()->isOn(SETTING::TOOL_CURSOR))
70 QPixmap pixmap(
":icons/bucketTool.png");
90 properties.width = width;
94 settings.
setValue(
"fillThickness", width);
98 void BucketTool::setTolerance(
const int tolerance)
101 properties.tolerance = tolerance;
105 settings.setValue(
"tolerance", tolerance);
111 startStroke(event->inputType());
114 mScribbleArea->setAllDirty();
122 Layer* layer = mEditor->layers()->currentLayer();
123 if (layer->type() == Layer::VECTOR)
130 void BucketTool::pointerReleaseEvent(
PointerEvent* event)
132 if (event->inputType() != mCurrentInputType)
return;
134 Layer* layer = editor()->layers()->currentLayer();
135 if (layer ==
nullptr) {
return; }
139 mEditor->backup(typeName());
141 switch (layer->type())
143 case Layer::BITMAP: paintBitmap(layer);
break;
144 case Layer::VECTOR: paintVector(layer);
break;
154 mQuickSizingProperties.
clear();
155 if (mEditor->layers()->currentLayer()->type() == Layer::VECTOR)
163 return BaseTool::startAdjusting(modifiers, argStep);
166 void BucketTool::paintBitmap(
Layer* layer)
168 Layer* targetLayer = layer;
169 int layerNumber = editor()->layers()->currentLayerIndex();
171 BitmapImage* targetImage =
static_cast<LayerBitmap*
>(targetLayer)->getLastBitmapImageAtFrame(editor()->currentFrame(), 0);
172 if (targetImage ==
nullptr) {
return; }
174 QPoint point =
QPoint(qFloor(getLastPoint().x()), qFloor(getLastPoint().y()));
175 QRect cameraRect = mScribbleArea->getCameraRect().
toRect();
176 BitmapImage::floodFill(targetImage,
179 qPremultiply(mEditor->color()->frontColor().
rgba()),
180 properties.tolerance);
182 mScribbleArea->setModified(layerNumber, mEditor->currentFrame());
183 mScribbleArea->setAllDirty();
186 void BucketTool::paintVector(
Layer* layer)
188 mScribbleArea->clearBitmapBuffer();
190 VectorImage* vectorImage =
static_cast<LayerVector*
>(layer)->getLastVectorImageAtFrame(mEditor->currentFrame(), 0);
191 if (vectorImage ==
nullptr) {
return; }
204 mScribbleArea->setModified(mEditor->layers()->currentLayerIndex(), mEditor->currentFrame());
205 mScribbleArea->setAllDirty();
208 void BucketTool::applyChanges()
210 mScribbleArea->applyTransformedSelection();
213 void BucketTool::drawStroke()
215 StrokeTool::drawStroke();
217 if (properties.stabilizerLevel != strokeManager()->getStabilizerLevel())
219 strokeManager()->setStabilizerLevel(properties.stabilizerLevel);
224 Layer* layer = mEditor->layers()->currentLayer();
226 if (layer->type() == Layer::VECTOR)
229 int rad = qRound((mCurrentWidth / 2 + 2) * mEditor->view()->scaling());
231 QColor pathColor = qPremultiply(mEditor->color()->frontColor().
rgba());
235 mCurrentWidth * mEditor->view()->scaling(),
243 path.cubicTo(p[1], p[2], p[3]);
245 mScribbleArea->refreshVector(path.boundingRect().toRect(), rad);
typedef KeyboardModifiers
QHash::iterator insert(const Key &key, const T &value)
void applyColorToSelectedArea(int colorNumber)
VectorImage::applyColorToSelectedArea.
QRect toRect() const const
bool isPathFilled()
VectorImage::isPathFilled.
void fillSelectedPath(int color)
VectorImage::fillSelectedPath.
void setValue(const QString &key, const QVariant &value)
void applyWidthToSelection(qreal width)
VectorImage::applyWidthToSelection.
Qt::MouseButtons buttons() const
Returns Qt::MouseButtons()
void applyColorToSelectedCurve(int colorNumber)
VectorImage::applyColorToSelectedCurve.
Qt::MouseButton button() const
Returns Qt::MouseButton()