diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index a17f6de4b..62f6dad7c 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -89,7 +89,7 @@ void Crop::setListener(DetailedCropListener* il) EditUniqueID Crop::getCurrEditID() { - EditSubscriber *subscriber = PipetteBuffer::dataProvider ? PipetteBuffer::dataProvider->getCurrSubscriber() : nullptr; + const EditSubscriber *subscriber = PipetteBuffer::dataProvider ? PipetteBuffer::dataProvider->getCurrSubscriber() : nullptr; return subscriber ? subscriber->getEditID() : EUID_None; } @@ -102,7 +102,7 @@ void Crop::setEditSubscriber(EditSubscriber* newSubscriber) MyMutex::MyLock lock(cropMutex); // At this point, editCrop.dataProvider->currSubscriber is the old subscriber - EditSubscriber *oldSubscriber = PipetteBuffer::dataProvider ? PipetteBuffer::dataProvider->getCurrSubscriber() : nullptr; + const EditSubscriber *oldSubscriber = PipetteBuffer::dataProvider ? PipetteBuffer::dataProvider->getCurrSubscriber() : nullptr; if (newSubscriber == nullptr || (oldSubscriber != nullptr && oldSubscriber->getPipetteBufferType() != newSubscriber->getPipetteBufferType())) { if (PipetteBuffer::imgFloatBuffer != nullptr) { diff --git a/rtengine/iimage.h b/rtengine/iimage.h index a67c2051e..ff016df1a 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -1113,7 +1113,7 @@ public: } } - void getPipetteData (T &valueR, T &valueG, T &valueB, int posX, int posY, int squareSize, int tran) const + void getPipetteData (T &valueR, T &valueG, T &valueB, int posX, int posY, const int squareSize, int tran) const { int x; int y; diff --git a/rtengine/pipettebuffer.cc b/rtengine/pipettebuffer.cc index ac47deed9..a4cd71807 100644 --- a/rtengine/pipettebuffer.cc +++ b/rtengine/pipettebuffer.cc @@ -134,13 +134,17 @@ bool PipetteBuffer::bufferCreated() return false; } -void PipetteBuffer::getPipetteData(float* v, int x, int y, int squareSize) +void PipetteBuffer::getPipetteData(int x, int y, const int squareSize) { if (ready && dataProvider && dataProvider->getCurrSubscriber()) { switch (dataProvider->getCurrSubscriber()->getPipetteBufferType()) { case (BT_IMAGEFLOAT): if (imgFloatBuffer) { + float v[3]; imgFloatBuffer->getPipetteData(v[0], v[1], v[2], x, y, squareSize, 0); + dataProvider->setPipetteVal1(v[0]); + dataProvider->setPipetteVal2(v[1]); + dataProvider->setPipetteVal3(v[2]); return; } @@ -148,7 +152,11 @@ void PipetteBuffer::getPipetteData(float* v, int x, int y, int squareSize) case (BT_LABIMAGE): if (LabBuffer) { + float v[3]; LabBuffer->getPipetteData(v[0], v[1], v[2], x, y, squareSize); + dataProvider->setPipetteVal1(v[0]); + dataProvider->setPipetteVal2(v[1]); + dataProvider->setPipetteVal3(v[2]); return; } @@ -156,14 +164,19 @@ void PipetteBuffer::getPipetteData(float* v, int x, int y, int squareSize) case (BT_SINGLEPLANE_FLOAT): if (singlePlaneBuffer.data != nullptr) { - singlePlaneBuffer.getPipetteData(v[0], x, y, squareSize, 0); - v[1] = v[2] = -1.f; + float v; + singlePlaneBuffer.getPipetteData(v, x, y, squareSize, 0); + dataProvider->setPipetteVal1(v); + dataProvider->setPipetteVal2(-1.f); + dataProvider->setPipetteVal3(-1.f); return; } } } - v[0] = v[1] = v[2] = -1.f; + dataProvider->setPipetteVal1(-1.f); + dataProvider->setPipetteVal2(-1.f); + dataProvider->setPipetteVal3(-1.f); } } diff --git a/rtengine/pipettebuffer.h b/rtengine/pipettebuffer.h index 21762e026..2a534174f 100644 --- a/rtengine/pipettebuffer.h +++ b/rtengine/pipettebuffer.h @@ -90,7 +90,7 @@ public: bool bufferCreated(); // get the pipette values - void getPipetteData(float* v, int x, int y, int squareSize); + void getPipetteData(int x, int y, const int squareSize); }; } diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 11e247ffb..4b2c1a6cc 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -258,7 +258,9 @@ void CropWindow::leaveNotify (GdkEventCrossing* event) EditSubscriber* subscriber = iarea->getCurrSubscriber(); if (state == SNormal && subscriber && subscriber->getEditingType() == ET_PIPETTE) { - iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f; + iarea->setPipetteVal1(-1.f); + iarea->setPipetteVal2(-1.f); + iarea->setPipetteVal3(-1.f); if (subscriber->mouseOver(0)) { iarea->redraw(); @@ -467,7 +469,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) state = SEditDrag1; } else if (editSubscriber->isPicking()) { state = SEditPick1; - pickedObject = iarea->object; + pickedObject = iarea->getObject(); pickModifierKey = bstate; } press_x = x; @@ -501,7 +503,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) state = SEditDrag1; } else if (editSubscriber->isPicking()) { state = SEditPick1; - pickedObject = iarea->object; + pickedObject = iarea->getObject(); pickModifierKey = bstate; } @@ -535,7 +537,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) state = SEditDrag2; } else if (editSubscriber->isPicking()) { state = SEditPick2; - pickedObject = iarea->object; + pickedObject = iarea->getObject(); pickModifierKey = bstate; } @@ -555,7 +557,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) state = SEditDrag3; } else if (editSubscriber->isPicking()) { state = SEditPick3; - pickedObject = iarea->object; + pickedObject = iarea->getObject(); pickModifierKey = bstate; } @@ -678,23 +680,25 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) if (state == SEditDrag1 && editSubscriber->getEditingType() == ET_PIPETTE) { screenCoordToCropBuffer (x, y, cropPos.x, cropPos.y); - iarea->object = onArea (CropImage, x, y) && !onArea (CropObserved, x, y) ? 1 : 0; + iarea->setObject(onArea (CropImage, x, y) && !onArea (CropObserved, x, y) ? 1 : 0); - //iarea->object = cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) ? 1 : 0; - if (iarea->object) { - crop->getPipetteData(iarea->pipetteVal, cropPos.x, cropPos.y, iarea->getPipetteRectSize()); + //iarea->setObject(cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) ? 1 : 0); + if (iarea->getObject()) { + crop->getPipetteData(cropPos.x, cropPos.y, iarea->getPipetteRectSize()); //printf("PipetteData: %.3f %.3f %.3f\n", iarea->pipetteVal[0], iarea->pipetteVal[1], iarea->pipetteVal[2]); } else { - iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f; + iarea->setPipetteVal1(-1.f); + iarea->setPipetteVal2(-1.f); + iarea->setPipetteVal3(-1.f); } } else if (editSubscriber->getEditingType() == ET_OBJECTS) { screenCoordToCropCanvas (x, y, cropPos.x, cropPos.y); - iarea->object = ObjectMOBuffer::getObjectID(cropPos); + iarea->setObject(ObjectMOBuffer::getObjectID(cropPos)); } needRedraw |= editSubscriber->mouseOver(bstate); } else { - iarea->object = 0; + iarea->setObject(0); } iarea->deltaImage.set(0, 0); @@ -714,9 +718,9 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) Coord cropPos; screenCoordToCropCanvas (x, y, cropPos.x, cropPos.y); - iarea->object = ObjectMOBuffer::getObjectID(cropPos); + iarea->setObject(ObjectMOBuffer::getObjectID(cropPos)); - bool elemPicked = iarea->object == pickedObject && bstate == pickModifierKey; + bool elemPicked = iarea->getObject() == pickedObject && bstate == pickModifierKey; if (state == SEditPick1) { needRedraw = editSubscriber->pick1 (elemPicked); @@ -726,12 +730,13 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) needRedraw = editSubscriber->pick3 (elemPicked); } - iarea->object = pickedObject = -1; + pickedObject = -1; + iarea->setObject(-1); pickModifierKey = 0; needRedraw |= editSubscriber->mouseOver (bstate); } else { - iarea->object = 0; + iarea->setObject(0); } } else if (state == SDeletePicker) { needRedraw = true; @@ -760,9 +765,11 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) } if (state != SDeletePicker && state != SEditDrag3 && state != SEditPick3 && button == 3 && !(bstate & (GDK_SHIFT_MASK|GDK_CONTROL_MASK))) { - iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f; + iarea->setPipetteVal1(-1.f); + iarea->setPipetteVal2(-1.f); + iarea->setPipetteVal3(-1.f); - needRedraw = iarea->object == 1; + needRedraw = iarea->getObject() == 1; if (editSubscriber && editSubscriber->getEditingType() == ET_PIPETTE) { editSubscriber->mouseOver(0); @@ -950,18 +957,20 @@ void CropWindow::pointerMoved (int bstate, int x, int y) if (editSubscriber->getEditingType() == ET_PIPETTE) { screenCoordToCropBuffer (x, y, cropPos.x, cropPos.y); - iarea->object = onArea (CropImage, x, y) && !onArea (CropObserved, x, y) ? 1 : 0; + iarea->setObject(onArea (CropImage, x, y) && !onArea (CropObserved, x, y) ? 1 : 0); - //iarea->object = cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) ? 1 : 0; - if (iarea->object) { - crop->getPipetteData(iarea->pipetteVal, cropPos.x, cropPos.y, iarea->getPipetteRectSize()); + //iarea->setObject(cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) ? 1 : 0); + if (iarea->getObject()) { + crop->getPipetteData(cropPos.x, cropPos.y, iarea->getPipetteRectSize()); //printf("PipetteData: %.3f %.3f %.3f\n", iarea->pipetteVal[0], iarea->pipetteVal[1], iarea->pipetteVal[2]); } else { - iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f; + iarea->setPipetteVal1(-1.f); + iarea->setPipetteVal2(-1.f); + iarea->setPipetteVal3(-1.f); } } else if (editSubscriber->getEditingType() == ET_OBJECTS) { screenCoordToCropCanvas (x, y, cropPos.x, cropPos.y); - iarea->object = ObjectMOBuffer::getObjectID(cropPos); + iarea->setObject(ObjectMOBuffer::getObjectID(cropPos)); } if (editSubscriber->mouseOver(bstate)) { @@ -1910,7 +1919,7 @@ void CropWindow::expose (Cairo::RefPtr cr) if (state == SNormal && isFlawnOver) { EditSubscriber *editSubscriber = iarea->getCurrSubscriber(); - if (iarea->getToolMode () == TMHand && editSubscriber && editSubscriber->getEditingType() == ET_PIPETTE && iarea->object) { + if (iarea->getToolMode () == TMHand && editSubscriber && editSubscriber->getEditingType() == ET_PIPETTE && iarea->getObject()) { drawUnscaledSpotRectangle (cr, iarea->getPipetteRectSize ()); } else if (iarea->getToolMode () == TMSpotWB) { drawScaledSpotRectangle (cr, iarea->getSpotWBRectSize ()); diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index 3d1223bdf..fd41ba6e6 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -449,7 +449,7 @@ void CurveEditor::switchOffEditMode () EditSubscriber::switchOffEditMode(); // disconnect } -bool CurveEditor::mouseOver(const int modifierKey) +const bool CurveEditor::mouseOver(const int modifierKey) { EditDataProvider* provider = getEditProvider(); subGroup->pipetteMouseOver(provider, modifierKey); @@ -461,12 +461,12 @@ bool CurveEditor::button1Pressed(const int modifierKey) { EditDataProvider* provider = getEditProvider(); - if (provider->object) { + if (provider->getObject()) { remoteDrag = subGroup->pipetteButton1Pressed(provider, modifierKey); } if (remoteDrag) { - action = ES_ACTION_DRAGGING; + action = EditSubscriber::Action::DRAGGING; } subGroup->refresh(this); @@ -490,7 +490,7 @@ bool CurveEditor::drag1(const int modifierKey) return false; } -CursorShape CurveEditor::getCursor(const int objectID) +const CursorShape CurveEditor::getCursor(const int objectID) const { if (remoteDrag) { return CSResizeHeight; diff --git a/rtgui/curveeditor.h b/rtgui/curveeditor.h index 1faa96f15..a4eeb0971 100644 --- a/rtgui/curveeditor.h +++ b/rtgui/curveeditor.h @@ -128,11 +128,11 @@ public: sigc::signal signal_curvepoint_release(); void switchOffEditMode () override; - bool mouseOver(const int modifierKey) override; + const bool mouseOver(const int modifierKey) override; bool button1Pressed(const int modifierKey) override; bool button1Released() override; bool drag1(const int modifierKey) override; - CursorShape getCursor(const int objectID) override; + const CursorShape getCursor(const int objectID) const override; }; diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index 6fd75db2f..86ff26bb4 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -450,18 +450,18 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i editedAdjuster = nullptr; int n = 0; - if (provider->pipetteVal[0] != -1.f) { - pipetteVal += provider->pipetteVal[0]; + if (provider->getPipetteVal1() != -1.f) { + pipetteVal += provider->getPipetteVal1(); ++n; } - if (provider->pipetteVal[1] != -1.f) { - pipetteVal += provider->pipetteVal[1]; + if (provider->getPipetteVal2() != -1.f) { + pipetteVal += provider->getPipetteVal2(); ++n; } - if (provider->pipetteVal[2] != -1.f) { - pipetteVal += provider->pipetteVal[2]; + if (provider->getPipetteVal3() != -1.f) { + pipetteVal += provider->getPipetteVal3(); ++n; } diff --git a/rtgui/editcallbacks.cc b/rtgui/editcallbacks.cc index 3b43e4658..e130d7686 100644 --- a/rtgui/editcallbacks.cc +++ b/rtgui/editcallbacks.cc @@ -19,7 +19,13 @@ #include "editcallbacks.h" -EditSubscriber::EditSubscriber (EditType editType) : ID(EUID_None), editingType(editType), bufferType(BT_SINGLEPLANE_FLOAT), provider(nullptr), action(ES_ACTION_NONE) {} +EditSubscriber::EditSubscriber (EditType editType) : + ID(EUID_None), + editingType(editType), + bufferType(BT_SINGLEPLANE_FLOAT), + provider(nullptr), + action(EditSubscriber::Action::NONE) +{} void EditSubscriber::setEditProvider(EditDataProvider *provider) { @@ -32,7 +38,7 @@ void EditSubscriber::setEditID(EditUniqueID ID, BufferType buffType) bufferType = buffType; } -bool EditSubscriber::isCurrentSubscriber() +const bool EditSubscriber::isCurrentSubscriber() const { //if (provider && provider->getCurrSubscriber()) // return provider->getCurrSubscriber()->getEditID() == ID; @@ -63,39 +69,47 @@ void EditSubscriber::switchOffEditMode() unsubscribe(); } -EditUniqueID EditSubscriber::getEditID() +const EditUniqueID EditSubscriber::getEditID() const { return ID; } -EditType EditSubscriber::getEditingType() +const EditType EditSubscriber::getEditingType() const { return editingType; } -BufferType EditSubscriber::getPipetteBufferType() +const BufferType EditSubscriber::getPipetteBufferType() const { return bufferType; } -bool EditSubscriber::isDragging() +const bool EditSubscriber::isDragging() const { - return action == ES_ACTION_DRAGGING; + return action == EditSubscriber::Action::DRAGGING; } -bool EditSubscriber::isPicking() +const bool EditSubscriber::isPicking() const { - return action == ES_ACTION_PICKING; + return action == EditSubscriber::Action::PICKING; } //-------------------------------------------------------------------------------------------------- -EditDataProvider::EditDataProvider() : currSubscriber(nullptr), object(0), posScreen(-1, -1), posImage(-1, -1), - deltaScreen(0, 0), deltaImage(0, 0), deltaPrevScreen(0, 0), deltaPrevImage(0, 0) -{ - pipetteVal[0] = pipetteVal[1] = pipetteVal[2] = 0.f; -} +EditDataProvider::EditDataProvider() : + currSubscriber(nullptr), + object(0), + pipetteVal1(0.f), + pipetteVal2(0.f), + pipetteVal3(0.f), + posScreen(-1, -1), + posImage(-1, -1), + deltaScreen(0, 0), + deltaImage(0, 0), + deltaPrevScreen(0, 0), + deltaPrevImage(0, 0) +{} void EditDataProvider::subscribe(EditSubscriber *subscriber) { @@ -118,7 +132,47 @@ void EditDataProvider::switchOffEditMode() } } -CursorShape EditDataProvider::getCursor(int objectID) +int EditDataProvider::getObject() +{ + return object; +} + +void EditDataProvider::setObject(int newObject) +{ + object = newObject; +} + +float EditDataProvider::getPipetteVal1() +{ + return pipetteVal1; +} + +float EditDataProvider::getPipetteVal2() +{ + return pipetteVal2; +} + +float EditDataProvider::getPipetteVal3() +{ + return pipetteVal3; +} + +void EditDataProvider::setPipetteVal1(float newVal) +{ + pipetteVal1 = newVal; +} + +void EditDataProvider::setPipetteVal2(float newVal) +{ + pipetteVal2 = newVal; +} + +void EditDataProvider::setPipetteVal3(float newVal) +{ + pipetteVal3 = newVal; +} + +const CursorShape EditDataProvider::getCursor(int objectID) const { if (currSubscriber) { currSubscriber->getCursor(objectID); @@ -127,8 +181,79 @@ CursorShape EditDataProvider::getCursor(int objectID) return CSHandOpen; } -EditSubscriber* EditDataProvider::getCurrSubscriber() +EditSubscriber* EditDataProvider::getCurrSubscriber() const { return currSubscriber; } +EditDataProvider* EditSubscriber::getEditProvider () { + return provider; +} + +const CursorShape EditSubscriber::getCursor (int objectID) const { + return CSHandOpen; +} + +const bool EditSubscriber::mouseOver (const int modifierKey) { + return false; +} + +bool EditSubscriber::button1Pressed (const int modifierKey) { + return false; +} + +bool EditSubscriber::button1Released () { + return false; +} + +bool EditSubscriber::button2Pressed (const int modifierKey) { + return false; +} + +bool EditSubscriber::button2Released () { + return false; +} + +bool EditSubscriber::button3Pressed (const int modifierKey) { + return false; +} + +bool EditSubscriber::button3Released () { + return false; +} + +bool EditSubscriber::drag1 (const int modifierKey) { + return false; +} + +bool EditSubscriber::drag2 (const int modifierKey) { + return false; +} + +bool EditSubscriber::drag3 (const int modifierKey) { + return false; +} + +bool EditSubscriber::pick1 (const bool picked) { + return false; +} + +bool EditSubscriber::pick2 (const bool picked) { + return false; +} + +bool EditSubscriber::pick3 (const bool picked) { + return false; +} + +const std::vector& EditSubscriber::getVisibleGeometry () { + return visibleGeometry; +} + +const std::vector& EditSubscriber::getMouseOverGeometry () { + return mouseOverGeometry; +} + +const int EditDataProvider::getPipetteRectSize () const { + return 8; // TODO: make a GUI +} diff --git a/rtgui/editcallbacks.h b/rtgui/editcallbacks.h index 1c1242fe0..765c52704 100644 --- a/rtgui/editcallbacks.h +++ b/rtgui/editcallbacks.h @@ -44,38 +44,40 @@ private: protected: std::vector visibleGeometry; /// displayed geometry std::vector mouseOverGeometry; /// mouseOver geometry, drawn in a hidden buffer - enum { - ES_ACTION_NONE, /// - ES_ACTION_DRAGGING, /// set action to this value in the buttonPressed event to start dragging and ask for drag event - ES_ACTION_PICKING /// set action to this value in the buttonPressed event whenever the user is picking something through a single click. In this case, the pickX events will be called INSTEAD of buttonXReleased ! - } action; /// object mode only, ignored in Pipette mode + enum class Action { + NONE, /// + DRAGGING, /// set action to this value in the buttonPressed event to start dragging and ask for drag event + PICKING /// set action to this value in the buttonPressed event whenever the user is picking something through a single click. In this case, the pickX events will be called INSTEAD of buttonXReleased ! + }; + + Action action; /// object mode only, ignored in Pipette mode public: explicit EditSubscriber (EditType editType); - virtual ~EditSubscriber () {} + virtual ~EditSubscriber () = default; void setEditProvider(EditDataProvider *provider); EditDataProvider* getEditProvider (); void setEditID(EditUniqueID ID, BufferType buffType); - bool isCurrentSubscriber(); + const bool isCurrentSubscriber() const; virtual void subscribe(); virtual void unsubscribe(); - virtual void switchOffEditMode (); /// Occurs when the user want to stop the editing mode - EditUniqueID getEditID(); - EditType getEditingType(); - BufferType getPipetteBufferType(); - bool isDragging(); /// Returns true if something is being dragged and drag events has to be sent (object mode only) - bool isPicking(); /// Returns true if something is being picked + virtual void switchOffEditMode(); /// Occurs when the user want to stop the editing mode + const EditUniqueID getEditID() const; + const EditType getEditingType() const; + const BufferType getPipetteBufferType() const; + const bool isDragging() const; /// Returns true if something is being dragged and drag events has to be sent (object mode only) + const bool isPicking() const; /// Returns true if something is being picked /** @brief Get the cursor to be displayed when above handles @param objectID object currently "hovered" */ - virtual CursorShape getCursor (const int objectID); + virtual const CursorShape getCursor (int objectID) const; /** @brief Triggered when the mouse is moving over an object This method is also triggered when the cursor is moving over the image in ET_PIPETTE mode @param modifierKey Gtk's event modifier key (GDK_CONTROL_MASK | GDK_SHIFT_MASK | ...) @return true if the preview has to be redrawn, false otherwise */ - virtual bool mouseOver (const int modifierKey); + virtual const bool mouseOver (const int modifierKey); /** @brief Triggered when mouse button 1 is pressed, together with the CTRL modifier key if the subscriber is of type ET_PIPETTE Once the key is pressed, RT will enter in drag1 mode on subsequent mouse movements @@ -158,10 +160,12 @@ class EditDataProvider private: EditSubscriber *currSubscriber; + int object; /// ET_OBJECTS mode: Object detected under the cursor, 0 otherwise; ET_PIPETTE mode: 1 if above the image, 0 otherwise + float pipetteVal1; /// Current pipette values + float pipetteVal2; /// Current pipette values; if bufferType==BT_SINGLEPLANE_FLOAT, will be set to 0 + float pipetteVal3; /// Current pipette values; if bufferType==BT_SINGLEPLANE_FLOAT, will be set to 0 public: - int object; /// ET_OBJECTS mode: Object detected under the cursor, 0 otherwise; ET_PIPETTE mode: 1 if above the image, 0 otherwise - float pipetteVal[3]; /// Current pipette values; if bufferType==BT_SINGLEPLANE_FLOAT, #2 & #3 will be set to 0 rtengine::Coord posScreen; /// Location of the mouse button press, in preview image space rtengine::Coord posImage; /// Location of the mouse button press, in the full image space @@ -171,86 +175,21 @@ public: rtengine::Coord deltaPrevImage; /// Delta relative to the previous mouse location, in the full image space EditDataProvider(); - virtual ~EditDataProvider() {} + virtual ~EditDataProvider() = default; - virtual void subscribe(EditSubscriber *subscriber); - virtual void unsubscribe(); /// Occurs when the subscriber has been switched off first - virtual void switchOffEditMode (); /// Occurs when the user want to stop the editing mode - virtual CursorShape getCursor(int objectID); - int getPipetteRectSize (); - EditSubscriber* getCurrSubscriber(); - virtual void getImageSize (int &w, int&h) = 0; + virtual void subscribe(EditSubscriber *subscriber); + virtual void unsubscribe(); /// Occurs when the subscriber has been switched off first + virtual void switchOffEditMode (); /// Occurs when the user want to stop the editing mode + int getObject(); + void setObject(int newObject); + float getPipetteVal1(); + float getPipetteVal2(); + float getPipetteVal3(); + void setPipetteVal1(float newVal); + void setPipetteVal2(float newVal); + void setPipetteVal3(float newVal); + virtual const CursorShape getCursor(int objectID) const; + const int getPipetteRectSize () const; + EditSubscriber* getCurrSubscriber() const; + virtual void getImageSize (int &w, int&h) = 0; }; - -inline EditDataProvider* EditSubscriber::getEditProvider () { - return provider; -} - -inline CursorShape EditSubscriber::getCursor (const int objectID) { - return CSHandOpen; -} - -inline bool EditSubscriber::mouseOver (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::button1Pressed (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::button1Released () { - return false; -} - -inline bool EditSubscriber::button2Pressed (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::button2Released () { - return false; -} - -inline bool EditSubscriber::button3Pressed (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::button3Released () { - return false; -} - -inline bool EditSubscriber::drag1 (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::drag2 (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::drag3 (const int modifierKey) { - return false; -} - -inline bool EditSubscriber::pick1 (const bool picked) { - return false; -} - -inline bool EditSubscriber::pick2 (const bool picked) { - return false; -} - -inline bool EditSubscriber::pick3 (const bool picked) { - return false; -} - -inline const std::vector& EditSubscriber::getVisibleGeometry () { - return visibleGeometry; -} - -inline const std::vector& EditSubscriber::getMouseOverGeometry () { - return mouseOverGeometry; -} - -inline int EditDataProvider::getPipetteRectSize () { - return 8; // TODO: make a GUI -} - diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc index be5d455fe..a68b3e3ca 100644 --- a/rtgui/gradient.cc +++ b/rtgui/gradient.cc @@ -331,7 +331,7 @@ void Gradient::editToggled () } } -CursorShape Gradient::getCursor(const int objectID) +const CursorShape Gradient::getCursor(const int objectID) const { switch (objectID) { case (0): @@ -357,11 +357,11 @@ CursorShape Gradient::getCursor(const int objectID) } } -bool Gradient::mouseOver(const int modifierKey) +const bool Gradient::mouseOver(const int modifierKey) { EditDataProvider* editProvider = getEditProvider(); - if (editProvider && editProvider->object != lastObject) { + if (editProvider && editProvider->getObject() != lastObject) { if (lastObject > -1) { if (lastObject == 2 || lastObject == 3) { EditSubscriber::visibleGeometry.at(2)->state = Geometry::NORMAL; @@ -371,16 +371,16 @@ bool Gradient::mouseOver(const int modifierKey) } } - if (editProvider->object > -1) { - if (editProvider->object == 2 || editProvider->object == 3) { + if (editProvider->getObject() > -1) { + if (editProvider->getObject() == 2 || editProvider->getObject() == 3) { EditSubscriber::visibleGeometry.at(2)->state = Geometry::PRELIGHT; EditSubscriber::visibleGeometry.at(3)->state = Geometry::PRELIGHT; } else { - EditSubscriber::visibleGeometry.at(editProvider->object)->state = Geometry::PRELIGHT; + EditSubscriber::visibleGeometry.at(editProvider->getObject())->state = Geometry::PRELIGHT; } } - lastObject = editProvider->object; + lastObject = editProvider->getObject(); return true; } @@ -441,7 +441,7 @@ bool Gradient::button1Pressed(const int modifierKey) draggedFeatherOffset -= (feather->getValue() / 200. * diagonal); } - EditSubscriber::action = ES_ACTION_DRAGGING; + EditSubscriber::action = EditSubscriber::Action::DRAGGING; return false; } else { // should theoretically always be true // this will let this class ignore further drag events @@ -462,7 +462,7 @@ bool Gradient::button1Pressed(const int modifierKey) bool Gradient::button1Released() { draggedPointOldAngle = -1000.; - EditSubscriber::action = ES_ACTION_NONE; + EditSubscriber::action = EditSubscriber::Action::NONE; return true; } diff --git a/rtgui/gradient.h b/rtgui/gradient.h index e80661d33..49799dc7b 100644 --- a/rtgui/gradient.h +++ b/rtgui/gradient.h @@ -52,8 +52,8 @@ public: void setEditProvider (EditDataProvider* provider) override; // EditSubscriber interface - CursorShape getCursor(const int objectID) override; - bool mouseOver(const int modifierKey) override; + const CursorShape getCursor(const int objectID) const override; + const bool mouseOver(const int modifierKey) override; bool button1Pressed(const int modifierKey) override; bool button1Released() override; bool drag1(const int modifierKey) override; diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index b8711d30c..9179da6e4 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -989,9 +989,9 @@ void MyDiagonalCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provi return; } - pipetteR = provider->pipetteVal[0]; - pipetteG = provider->pipetteVal[1]; - pipetteB = provider->pipetteVal[2]; + pipetteR = provider->getPipetteVal1(); + pipetteG = provider->getPipetteVal2(); + pipetteB = provider->getPipetteVal3(); pipetteVal = 0.f; if (listener) { diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 863e125c4..03ee362a2 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -1209,9 +1209,9 @@ void MyFlatCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, return; } - pipetteR = provider->pipetteVal[0]; - pipetteG = provider->pipetteVal[1]; - pipetteB = provider->pipetteVal[2]; + pipetteR = provider->getPipetteVal1(); + pipetteG = provider->getPipetteVal2(); + pipetteB = provider->getPipetteVal3(); pipetteVal = 0.f; if (listener) {