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()
46 if (mEditor->preference()->isOn(SETTING::TOOL_CURSOR))
48 return QCursor(
QPixmap(
":icons/general/cursor-eyedropper.svg"), 0, 15);
58 QPixmap icon(
":icons/general/cursor-eyedropper.svg");
64 painter.drawPixmap(0, 0, icon);
67 painter.drawRect(17, 17, 13, 13);
69 painter.setBrush(color);
70 painter.drawRect(16, 16, 15, 15);
79void EyedropperTool::pointerMoveEvent(
PointerEvent* event)
81 Layer* layer = mEditor->layers()->currentLayer();
82 if (layer ==
nullptr) {
return; }
84 if (layer->type() == Layer::BITMAP)
89 mScribbleArea->
setCursor(cursor(pickedColor));
96 if (layer->type() == Layer::VECTOR)
101 mScribbleArea->
setCursor(cursor(mEditor->object()->getColor(pickedColor).color));
110void EyedropperTool::pointerReleaseEvent(
PointerEvent* event)
123 Layer* layer = mEditor->layers()->currentLayer();
124 if (layer ==
nullptr) {
return; }
126 if (layer->type() == Layer::BITMAP)
131 mEditor->color()->setFrontColor(pickedColor);
134 else if (layer->type() == Layer::VECTOR)
137 if (pickedColor >= 0)
139 mEditor->color()->setColorNumber(pickedColor);
146 BitmapImage* targetImage = layer->getLastBitmapImageAtFrame(mEditor->currentFrame(), 0);
147 if (targetImage ==
nullptr || !targetImage->contains(pos))
return QColor();
150 const QRgb pixelColor = targetImage->constScanLine(qFloor(pos.
x()),
152 pickedColour.
setRgba(pixelColor);
154 if (pickedColour.
alpha() <= 0) pickedColour =
QColor();
160 auto vectorImage =
static_cast<VectorImage*
>(layer->getLastKeyFrameAtPosition(mEditor->currentFrame()));
161 if (vectorImage ==
nullptr)
return -1;
164 const qreal toleranceDistance = 10.0;
165 const QList<int> closestCurves = vectorImage->getCurvesCloseTo(pos, toleranceDistance);
166 const QList<int> visibleClosestCurves = filter(closestCurves, [vectorImage](
int i) {
return vectorImage->isCurveVisible(i); });
168 if (!visibleClosestCurves.
isEmpty())
170 return vectorImage->getCurvesColor(visibleClosestCurves.
last());
174 int colorNumber = vectorImage->getColorNumber(pos);
bool isValid() const const
bool isEmpty() const const
virtual bool event(QEvent *e)