18#include "eyedroppertool.h"
24#include "pointerevent.h"
26#include "vectorimage.h"
27#include "layervector.h"
28#include "layerbitmap.h"
29#include "colormanager.h"
32#include "layermanager.h"
33#include "scribblearea.h"
40void EyedropperTool::loadSettings()
42 properties.width = -1;
43 properties.feather = -1;
44 properties.useFeather =
false;
45 properties.useAA = -1;
48void EyedropperTool::saveSettings()
54 if (mEditor->preference()->isOn(SETTING::TOOL_CURSOR))
56 return QCursor(
QPixmap(
":icons/general/cursor-eyedropper.svg"), 0, 15);
66 QPixmap icon(
":icons/general/cursor-eyedropper.svg");
72 painter.drawPixmap(0, 0, icon);
75 painter.drawRect(17, 17, 13, 13);
77 painter.setBrush(color);
78 painter.drawRect(16, 16, 15, 15);
87void EyedropperTool::pointerMoveEvent(
PointerEvent* event)
89 Layer* layer = mEditor->layers()->currentLayer();
90 if (layer ==
nullptr) {
return; }
92 if (layer->type() == Layer::BITMAP)
97 mScribbleArea->
setCursor(cursor(pickedColor));
104 if (layer->type() == Layer::VECTOR)
107 if (pickedColor >= 0)
109 mScribbleArea->
setCursor(cursor(mEditor->object()->getColor(pickedColor).color));
118void EyedropperTool::pointerReleaseEvent(
PointerEvent* event)
131 Layer* layer = mEditor->layers()->currentLayer();
132 if (layer ==
nullptr) {
return; }
134 if (layer->type() == Layer::BITMAP)
139 mEditor->color()->setFrontColor(pickedColor);
142 else if (layer->type() == Layer::VECTOR)
145 if (pickedColor >= 0)
147 mEditor->color()->setColorNumber(pickedColor);
154 BitmapImage* targetImage = layer->getLastBitmapImageAtFrame(mEditor->currentFrame(), 0);
155 if (targetImage ==
nullptr || !targetImage->contains(pos))
return QColor();
158 const QRgb pixelColor = targetImage->constScanLine(qFloor(pos.
x()),
160 pickedColour.
setRgba(pixelColor);
162 if (pickedColour.
alpha() <= 0) pickedColour =
QColor();
168 auto vectorImage =
static_cast<VectorImage*
>(layer->getLastKeyFrameAtPosition(mEditor->currentFrame()));
169 if (vectorImage ==
nullptr)
return -1;
172 const qreal toleranceDistance = 10.0;
173 const QList<int> closestCurves = vectorImage->getCurvesCloseTo(pos, toleranceDistance);
174 const QList<int> visibleClosestCurves = filter(closestCurves, [vectorImage](
int i) {
return vectorImage->isCurveVisible(i); });
176 if (!visibleClosestCurves.
isEmpty())
178 return vectorImage->getCurvesColor(visibleClosestCurves.
last());
182 int colorNumber = vectorImage->getColorNumber(pos);
bool isValid() const const
bool isEmpty() const const
virtual bool event(QEvent *e)