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"
40 void EyedropperTool::loadSettings()
42 properties.width = -1;
43 properties.feather = -1;
44 properties.useFeather =
false;
45 properties.useAA = -1;
48 QCursor EyedropperTool::cursor()
50 if (mEditor->preference()->isOn(SETTING::TOOL_CURSOR))
62 QPixmap icon(
":icons/eyedropper.png");
68 painter.drawPixmap(0, 0, icon);
71 painter.drawRect(17, 17, 13, 13);
73 painter.setBrush(color);
74 painter.drawRect(16, 16, 15, 15);
85 Layer* layer = mEditor->layers()->currentLayer();
86 if (layer ==
nullptr) {
return; }
88 if (layer->type() == Layer::BITMAP)
93 mScribbleArea->
setCursor(cursor(pickedColor));
100 if (layer->type() == Layer::VECTOR)
102 int pickedColor =
getVectorColor(static_cast<LayerVector*>(layer));
103 if (pickedColor >= 0)
105 mScribbleArea->
setCursor(cursor(mEditor->object()->getColor(pickedColor).color));
114 void EyedropperTool::pointerReleaseEvent(
PointerEvent* event)
127 Layer* layer = mEditor->layers()->currentLayer();
128 if (layer ==
nullptr) {
return; }
129 if (layer->type() == Layer::BITMAP)
134 mEditor->color()->setColor(pickedColor);
137 else if (layer->type() == Layer::VECTOR)
139 int pickedColor =
getVectorColor(static_cast<LayerVector*>(layer));
140 if (pickedColor >= 0)
142 mEditor->color()->setColorNumber(pickedColor);
149 BitmapImage* targetImage = layer->getLastBitmapImageAtFrame(mEditor->currentFrame(), 0);
150 if (targetImage ==
nullptr || !targetImage->contains(getCurrentPoint()))
return QColor();
153 const QRgb pixelColor = targetImage->constScanLine(qFloor(getCurrentPoint().x()),
154 qFloor(getCurrentPoint().y()));
155 pickedColour.
setRgba(pixelColor);
157 if (pickedColour.
alpha() <= 0) pickedColour =
QColor();
163 auto vectorImage =
static_cast<VectorImage*
>(layer->getLastKeyFrameAtPosition(mEditor->currentFrame()));
164 if (vectorImage ==
nullptr)
return -1;
167 const qreal toleranceDistance = 10.0;
168 const QList<int> closestCurves = vectorImage->getCurvesCloseTo(getCurrentPoint(), toleranceDistance);
169 const QList<int> visibleClosestCurves = filter(closestCurves, [vectorImage](
int i) {
return vectorImage->isCurveVisible(i); });
171 if (!visibleClosestCurves.
isEmpty())
173 return vectorImage->getCurvesColor(visibleClosestCurves.
last());
177 int colorNumber = vectorImage->getColorNumber(getCurrentPoint());
bool isEmpty() const const
Qt::MouseButton button() const
Returns Qt::MouseButton()
bool isValid() const const