diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 4ac0d60fb..7bc81ba62 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -623,6 +623,8 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) if (state != SEditDrag3 && state != SEditPick3 && button == 3 && !(bstate & (GDK_SHIFT_MASK|GDK_CONTROL_MASK))) { iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f; + needRedraw = iarea->object == 1; + if (editSubscriber && editSubscriber->getEditingType() == ET_PIPETTE) { editSubscriber->mouseOver(0); } diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index 8ad521d06..c9d02d9a3 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -405,8 +405,11 @@ bool CurveEditor::button1Pressed(const int modifierKey) EditDataProvider* provider = getEditProvider(); if (provider->object) { - subGroup->pipetteButton1Pressed(provider, modifierKey); - remoteDrag = true; + remoteDrag = subGroup->pipetteButton1Pressed(provider, modifierKey); + } + + if (remoteDrag) { + action = ES_ACTION_DRAGGING; } subGroup->refresh(this); diff --git a/rtgui/curveeditorgroup.h b/rtgui/curveeditorgroup.h index 1f1120f83..09cbb8167 100644 --- a/rtgui/curveeditorgroup.h +++ b/rtgui/curveeditorgroup.h @@ -141,7 +141,7 @@ public: virtual void stopNumericalAdjustment() = 0; virtual void pipetteMouseOver(EditDataProvider *provider, int modifierKey) = 0; - virtual void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) = 0; + virtual bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) = 0; virtual void pipetteButton1Released(EditDataProvider *provider) = 0; virtual void pipetteDrag(EditDataProvider *provider, int modifierKey) = 0; diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index 4ca2bb159..657186a12 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -468,13 +468,15 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i } } -void DiagonalCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) +bool DiagonalCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) { CurveEditor *curveEditor = static_cast(parent->displayedCurve); + bool isDragging = false; + switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) { case (DCT_Spline): - customCurve->pipetteButton1Pressed(provider, modifierKey); + isDragging = customCurve->pipetteButton1Pressed(provider, modifierKey); break; case (DCT_Parametric): @@ -485,13 +487,15 @@ void DiagonalCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provid break; case (DCT_NURBS): - NURBSCurve->pipetteButton1Pressed(provider, modifierKey); + isDragging = NURBSCurve->pipetteButton1Pressed(provider, modifierKey); break; default: // (DCT_Linear, DCT_Unchanged) // ... do nothing break; } + + return isDragging; } void DiagonalCurveEditorSubGroup::pipetteButton1Released(EditDataProvider *provider) diff --git a/rtgui/diagonalcurveeditorsubgroup.h b/rtgui/diagonalcurveeditorsubgroup.h index 8178eb56a..5b6d845d5 100644 --- a/rtgui/diagonalcurveeditorsubgroup.h +++ b/rtgui/diagonalcurveeditorsubgroup.h @@ -83,7 +83,7 @@ public: void refresh(CurveEditor *curveToRefresh); void editModeSwitchedOff (); void pipetteMouseOver(EditDataProvider *provider, int modifierKey); - void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); + bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); void pipetteButton1Released(EditDataProvider *provider); void pipetteDrag(EditDataProvider *provider, int modifierKey); void showCoordinateAdjuster(CoordinateProvider *provider); diff --git a/rtgui/flatcurveeditorsubgroup.cc b/rtgui/flatcurveeditorsubgroup.cc index 691fbe3dd..fd975de5e 100644 --- a/rtgui/flatcurveeditorsubgroup.cc +++ b/rtgui/flatcurveeditorsubgroup.cc @@ -216,13 +216,15 @@ void FlatCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, int m } } -void FlatCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) +bool FlatCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) { CurveEditor *curveEditor = static_cast(parent->displayedCurve); + bool isDragging = false; + switch((FlatCurveType)(curveEditor->curveType->getSelected())) { case (FCT_MinMaxCPoints): - CPointsCurve->pipetteButton1Pressed(provider, modifierKey); + isDragging = CPointsCurve->pipetteButton1Pressed(provider, modifierKey); CPointsCurve->setDirty(true); break; @@ -230,6 +232,8 @@ void FlatCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, // ... do nothing break; } + + return isDragging; } void FlatCurveEditorSubGroup::pipetteButton1Released(EditDataProvider *provider) diff --git a/rtgui/flatcurveeditorsubgroup.h b/rtgui/flatcurveeditorsubgroup.h index 8cd2a6d9a..7772dcebd 100644 --- a/rtgui/flatcurveeditorsubgroup.h +++ b/rtgui/flatcurveeditorsubgroup.h @@ -54,7 +54,7 @@ public: void refresh(CurveEditor *curveToRefresh); void editModeSwitchedOff(); void pipetteMouseOver(EditDataProvider *provider, int modifierKey); - void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); + bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); void pipetteButton1Released(EditDataProvider *provider); void pipetteDrag(EditDataProvider *provider, int modifierKey); void showCoordinateAdjuster(CoordinateProvider *provider); diff --git a/rtgui/mycurve.h b/rtgui/mycurve.h index 96574e12a..ba3158ac9 100644 --- a/rtgui/mycurve.h +++ b/rtgui/mycurve.h @@ -146,7 +146,7 @@ public: virtual void reset (const std::vector &resetCurve, double identityValue = 0.5) = 0; virtual void pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, int modifierKey) = 0; - virtual void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) = 0; + virtual bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) = 0; virtual void pipetteButton1Released(EditDataProvider *provider) = 0; virtual void pipetteDrag(EditDataProvider *provider, int modifierKey) = 0; diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index 98eb6c283..2a70e9b7c 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -1071,11 +1071,11 @@ void MyDiagonalCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provi } } - -void MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) +// returns true if a point is being dragged +bool MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) { if (edited_point > 1) { - return; + return false; } int num = (int)curve.x.size(); @@ -1086,7 +1086,7 @@ void MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modi double minDistanceX = double(MIN_DISTANCE) / double(graphW - 1); if ((graphW < 0) || (graphH < 0)) { - return; + return false; } snapToElmt = -100; @@ -1141,7 +1141,11 @@ void MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modi lit_point = closest_point; ugpX = curve.x.at(closest_point); ugpY = curve.y.at(closest_point); + + return true; } + + return false; } void MyDiagonalCurve::pipetteButton1Released(EditDataProvider *provider) diff --git a/rtgui/mydiagonalcurve.h b/rtgui/mydiagonalcurve.h index 033ba9f95..45b23e965 100644 --- a/rtgui/mydiagonalcurve.h +++ b/rtgui/mydiagonalcurve.h @@ -90,7 +90,7 @@ public: void updateBackgroundHistogram (LUTu & hist); void pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, int modifierKey); - void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); + bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); void pipetteButton1Released(EditDataProvider *provider); void pipetteDrag(EditDataProvider *provider, int modifierKey); diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 474756834..fe53565d2 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -1288,10 +1288,11 @@ void MyFlatCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, } } -void MyFlatCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) +// returns true if a point is being dragged +bool MyFlatCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifierKey) { if (edited_point > -1) { - return; + return false; } buttonPressed = true; @@ -1368,6 +1369,7 @@ void MyFlatCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifier break; } + return true; } void MyFlatCurve::pipetteButton1Released(EditDataProvider *provider) diff --git a/rtgui/myflatcurve.h b/rtgui/myflatcurve.h index cd08edf89..7949a4df6 100644 --- a/rtgui/myflatcurve.h +++ b/rtgui/myflatcurve.h @@ -130,7 +130,7 @@ public: //void updateBackgroundHistogram (unsigned int* hist); void pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, int modifierKey); - void pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); + bool pipetteButton1Pressed(EditDataProvider *provider, int modifierKey); void pipetteButton1Released(EditDataProvider *provider); void pipetteDrag(EditDataProvider *provider, int modifierKey);