diff --git a/src/app/GUI/canvaswindow.cpp b/src/app/GUI/canvaswindow.cpp index 05265daa6..9cf76a96c 100644 --- a/src/app/GUI/canvaswindow.cpp +++ b/src/app/GUI/canvaswindow.cpp @@ -128,6 +128,7 @@ void CanvasWindow::setCanvasMode(const CanvasMode mode) setCursor(Qt::ArrowCursor); break; case CanvasMode::pickFillStroke: + case CanvasMode::pickFillStrokeEvent: setCursor(Qt::PointingHandCursor); break; case CanvasMode::circleCreate: diff --git a/src/app/GUI/mainwindow.cpp b/src/app/GUI/mainwindow.cpp index d88f04201..570e4b846 100644 --- a/src/app/GUI/mainwindow.cpp +++ b/src/app/GUI/mainwindow.cpp @@ -1359,7 +1359,8 @@ void MainWindow::updateCanvasModeButtonsChecked() if (mColorPickLabel) { mColorPickLabel->clear(); - mColorPickLabel->setVisible(mode == CanvasMode::pickFillStroke); + mColorPickLabel->setVisible(mode == CanvasMode::pickFillStroke || + mode == CanvasMode::pickFillStrokeEvent); } } diff --git a/src/app/GUI/toolbox.cpp b/src/app/GUI/toolbox.cpp index 773107e61..7cd6af479 100644 --- a/src/app/GUI/toolbox.cpp +++ b/src/app/GUI/toolbox.cpp @@ -265,7 +265,8 @@ void MainWindow::setupToolBoxMain() &Document::canvasModeSet, this, [this, pickModeAct]() { - if (mDocument.fCanvasMode == CanvasMode::pickFillStroke) { + if (mDocument.fCanvasMode == CanvasMode::pickFillStroke || + mDocument.fCanvasMode == CanvasMode::pickFillStrokeEvent) { pickModeAct->setChecked(true); } }); diff --git a/src/core/Properties/property.h b/src/core/Properties/property.h index 227abcc6e..af995fef5 100644 --- a/src/core/Properties/property.h +++ b/src/core/Properties/property.h @@ -56,7 +56,8 @@ enum class CanvasMode : short { textCreate, nullCreate, - pickFillStroke + pickFillStroke, + pickFillStrokeEvent }; enum class UpdateReason { diff --git a/src/core/canvas.cpp b/src/core/canvas.cpp index c7a8f06ee..e52845c5c 100644 --- a/src/core/canvas.cpp +++ b/src/core/canvas.cpp @@ -770,7 +770,8 @@ void Canvas::updatePivot() void Canvas::setCanvasMode(const CanvasMode mode) { - if (mCurrentMode == CanvasMode::pickFillStroke) { + if (mCurrentMode == CanvasMode::pickFillStroke || + mCurrentMode == CanvasMode::pickFillStrokeEvent) { emit currentPickedColor(QColor()); emit currentHoverColor(QColor()); } diff --git a/src/core/canvasmouseevents.cpp b/src/core/canvasmouseevents.cpp index 1886a75da..f3e342d02 100644 --- a/src/core/canvasmouseevents.cpp +++ b/src/core/canvasmouseevents.cpp @@ -78,7 +78,8 @@ void Canvas::mouseMoveEvent(const eMouseEvent &e) const bool leftPressed = e.fButtons & Qt::LeftButton; if (!leftPressed && !e.fMouseGrabbing) { - if (mCurrentMode == CanvasMode::pickFillStroke) { + if (mCurrentMode == CanvasMode::pickFillStroke || + mCurrentMode == CanvasMode::pickFillStrokeEvent) { emit currentHoverColor(pickPixelColor(e.fGlobalPos)); return; } @@ -169,6 +170,9 @@ void Canvas::mouseReleaseEvent(const eMouseEvent &e) drawPathClear(); break; case CanvasMode::pickFillStroke: + applyPixelColor(pickPixelColor(e.fGlobalPos), false); + break; + case CanvasMode::pickFillStrokeEvent: emit currentPickedColor(QColor()); emit currentHoverColor(QColor()); break; @@ -177,6 +181,11 @@ void Canvas::mouseReleaseEvent(const eMouseEvent &e) } } if (e.fButton != Qt::LeftButton) { return; } + if (e.fButton == Qt::LeftButton && + mCurrentMode == CanvasMode::pickFillStroke) { + applyPixelColor(pickPixelColor(e.fGlobalPos), true); + return; + } schedulePivotUpdate(); /*if(mCurrentMode == CanvasMode::paint) { const auto paintMode = mDocument.fPaintMode; diff --git a/src/core/canvasmouseinteractions.cpp b/src/core/canvasmouseinteractions.cpp index 95dcc3057..6f5b0e5e6 100644 --- a/src/core/canvasmouseinteractions.cpp +++ b/src/core/canvasmouseinteractions.cpp @@ -243,7 +243,8 @@ void Canvas::handleLeftButtonMousePress(const eMouseEvent& e) { drawPathClear(); mDrawPath.lineTo(e.fPos); } - } else if(mCurrentMode == CanvasMode::pickFillStroke) { + } else if (mCurrentMode == CanvasMode::pickFillStroke || + mCurrentMode == CanvasMode::pickFillStrokeEvent) { //mPressedBox = getBoxAtFromAllDescendents(e.fPos); } else if(mCurrentMode == CanvasMode::circleCreate) { const auto newPath = enve::make_shared(); @@ -302,7 +303,8 @@ void Canvas::cancelCurrentTransform() { } } else if(mCurrentMode == CanvasMode::pathCreate) { - } else if(mCurrentMode == CanvasMode::pickFillStroke) { + } else if (mCurrentMode == CanvasMode::pickFillStroke || + mCurrentMode == CanvasMode::pickFillStrokeEvent) { //mCanvasWindow->setCanvasMode(MOVE_PATH); } mValueInput.clearAndDisableInput(); @@ -574,7 +576,7 @@ void Canvas::handleLeftMouseRelease(const eMouseEvent &e) { } else { drawPathFinish(1/e.fScale); } - } else if(mCurrentMode == CanvasMode::pickFillStroke) { + } else if (mCurrentMode == CanvasMode::pickFillStrokeEvent) { emit currentPickedColor(pickPixelColor(e.fGlobalPos)); } mValueInput.clearAndDisableInput(); diff --git a/src/ui/widgets/colorsettingswidget.cpp b/src/ui/widgets/colorsettingswidget.cpp index 5494524c9..1c0f3bf15 100644 --- a/src/ui/widgets/colorsettingswidget.cpp +++ b/src/ui/widgets/colorsettingswidget.cpp @@ -286,7 +286,7 @@ void ColorSettingsWidget::startColorPicking() const auto scene = *Document::sInstance->fActiveScene; if (!scene) { return; } CanvasMode lastMode = Document::sInstance->fCanvasMode; - Document::sInstance->setCanvasMode(CanvasMode::pickFillStroke); + Document::sInstance->setCanvasMode(CanvasMode::pickFillStrokeEvent); auto conn = std::make_shared(); *conn = connect(scene, &Canvas::currentPickedColor, this, [this, conn, lastMode](const QColor &color) {