Use enums for on-preview geometry

This commit is contained in:
Lawrence Lee
2021-05-30 11:51:49 -07:00
parent 3441854a19
commit 5f88cf240e
4 changed files with 212 additions and 107 deletions

View File

@@ -12,6 +12,14 @@
using namespace rtengine;
using namespace rtengine::procparams;
enum GeometryIndex {
H_LINE,
V_LINE,
FEATHER_LINE_1,
FEATHER_LINE_2,
CENTER_CIRCLE,
};
Gradient::Gradient () : FoldableToolPanel(this, "gradient", M("TP_GRADIENT_LABEL"), false, true), EditSubscriber(ET_OBJECTS), lastObject(-1), draggedPointOldAngle(-1000.)
{
@@ -191,24 +199,24 @@ void Gradient::updateGeometry(const int centerX, const int centerY, const double
};
// update horizontal line
updateLine (visibleGeometry.at(0), 1500., 0., 180.);
updateLine (mouseOverGeometry.at(0), 1500., 0., 180.);
updateLine (visibleGeometry.at(H_LINE), 1500., 0., 180.);
updateLine (mouseOverGeometry.at(H_LINE), 1500., 0., 180.);
// update vertical line
updateLine (visibleGeometry.at(1), 700., 90., 270.);
updateLine (mouseOverGeometry.at(1), 700., 90., 270.);
updateLine (visibleGeometry.at(V_LINE), 700., 90., 270.);
updateLine (mouseOverGeometry.at(V_LINE), 700., 90., 270.);
// update upper feather line
updateLineWithDecay (visibleGeometry.at(2), 350., 270.);
updateLineWithDecay (mouseOverGeometry.at(2), 350., 270.);
updateLineWithDecay (visibleGeometry.at(FEATHER_LINE_1), 350., 270.);
updateLineWithDecay (mouseOverGeometry.at(FEATHER_LINE_1), 350., 270.);
// update lower feather line
updateLineWithDecay (visibleGeometry.at(3), 350., 90.);
updateLineWithDecay (mouseOverGeometry.at(3), 350., 90.);
updateLineWithDecay (visibleGeometry.at(FEATHER_LINE_2), 350., 90.);
updateLineWithDecay (mouseOverGeometry.at(FEATHER_LINE_2), 350., 90.);
// update circle's position
updateCircle (visibleGeometry.at(4));
updateCircle (mouseOverGeometry.at(4));
updateCircle (visibleGeometry.at(CENTER_CIRCLE));
updateCircle (mouseOverGeometry.at(CENTER_CIRCLE));
}
void Gradient::write (ProcParams* pp, ParamsEdited* pedited)
@@ -333,12 +341,12 @@ void Gradient::editToggled ()
CursorShape Gradient::getCursor(int objectID, int xPos, int yPos) const
{
switch (objectID) {
case (0):
case (1):
case (H_LINE):
case (V_LINE):
return CSMoveRotate;
case (2):
case (3): {
case (FEATHER_LINE_1):
case (FEATHER_LINE_2): {
int angle = degree->getIntValue();
if (angle < -135 || (angle >= -45 && angle <= 45) || angle > 135) {
@@ -348,7 +356,7 @@ CursorShape Gradient::getCursor(int objectID, int xPos, int yPos) const
return CSMove1DH;
}
case (4):
case (CENTER_CIRCLE):
return CSMove2D;
default:
@@ -362,18 +370,18 @@ bool Gradient::mouseOver(int modifierKey)
if (editProvider && editProvider->getObject() != lastObject) {
if (lastObject > -1) {
if (lastObject == 2 || lastObject == 3) {
EditSubscriber::visibleGeometry.at(2)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(3)->state = Geometry::NORMAL;
if (lastObject == FEATHER_LINE_1 || lastObject == FEATHER_LINE_2) {
EditSubscriber::visibleGeometry.at(FEATHER_LINE_1)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(FEATHER_LINE_2)->state = Geometry::NORMAL;
} else {
EditSubscriber::visibleGeometry.at(lastObject)->state = Geometry::NORMAL;
}
}
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;
if (editProvider->getObject() == FEATHER_LINE_1 || editProvider->getObject() == FEATHER_LINE_2) {
EditSubscriber::visibleGeometry.at(FEATHER_LINE_1)->state = Geometry::PRELIGHT;
EditSubscriber::visibleGeometry.at(FEATHER_LINE_2)->state = Geometry::PRELIGHT;
} else {
EditSubscriber::visibleGeometry.at(editProvider->getObject())->state = Geometry::PRELIGHT;
}
@@ -415,7 +423,7 @@ bool Gradient::button1Pressed(int modifierKey)
//printf("\ndraggedPointOldAngle=%.3f\n\n", draggedPointOldAngle);
draggedPointAdjusterAngle = degree->getValue();
if (lastObject == 2 || lastObject == 3) {
if (lastObject == FEATHER_LINE_1 || lastObject == FEATHER_LINE_2) {
// Dragging a line to change the angle
PolarCoord draggedPoint;
rtengine::Coord currPos;
@@ -431,7 +439,7 @@ bool Gradient::button1Pressed(int modifierKey)
// compute the projected value of the dragged point
draggedFeatherOffset = draggedPoint.radius * sin((draggedPoint.angle - degree->getValue()) / 180.*rtengine::RT_PI);
if (lastObject == 3) {
if (lastObject == FEATHER_LINE_2) {
draggedFeatherOffset = -draggedFeatherOffset;
}
@@ -442,9 +450,9 @@ bool Gradient::button1Pressed(int modifierKey)
return false;
} else { // should theoretically always be true
// this will let this class ignore further drag events
if (lastObject == 2 || lastObject == 3) {
EditSubscriber::visibleGeometry.at(2)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(3)->state = Geometry::NORMAL;
if (lastObject == FEATHER_LINE_1 || lastObject == FEATHER_LINE_2) {
EditSubscriber::visibleGeometry.at(FEATHER_LINE_1)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(FEATHER_LINE_2)->state = Geometry::NORMAL;
} else {
EditSubscriber::visibleGeometry.at(lastObject)->state = Geometry::NORMAL;
}
@@ -472,7 +480,7 @@ bool Gradient::drag1(int modifierKey)
double halfSizeW = imW / 2.;
double halfSizeH = imH / 2.;
if (lastObject == 0 || lastObject == 1) {
if (lastObject == H_LINE || lastObject == V_LINE) {
// Dragging a line to change the angle
PolarCoord draggedPoint;
@@ -516,7 +524,7 @@ bool Gradient::drag1(int modifierKey)
return true;
}
} else if (lastObject == 2 || lastObject == 3) {
} else if (lastObject == FEATHER_LINE_1 || lastObject == FEATHER_LINE_2) {
// Dragging the upper or lower feather bar
PolarCoord draggedPoint;
rtengine::Coord currPos;
@@ -533,11 +541,11 @@ bool Gradient::drag1(int modifierKey)
draggedPoint = currPos - centerPos;
double currDraggedFeatherOffset = draggedPoint.radius * sin((draggedPoint.angle - degree->getValue()) / 180.*rtengine::RT_PI);
if (lastObject == 2)
if (lastObject == FEATHER_LINE_1)
// Dragging the upper feather bar
{
currDraggedFeatherOffset -= draggedFeatherOffset;
} else if (lastObject == 3)
} else if (lastObject == FEATHER_LINE_2)
// Dragging the lower feather bar
{
currDraggedFeatherOffset = -currDraggedFeatherOffset + draggedFeatherOffset;
@@ -555,7 +563,7 @@ bool Gradient::drag1(int modifierKey)
return true;
}
} else if (lastObject == 4) {
} else if (lastObject == CENTER_CIRCLE) {
// Dragging the circle to change the center
rtengine::Coord currPos;
draggedCenter += provider->deltaPrevImage;
@@ -583,9 +591,9 @@ bool Gradient::drag1(int modifierKey)
void Gradient::releaseEdit()
{
if (lastObject >= 0) {
if (lastObject == 2 || lastObject == 3) {
EditSubscriber::visibleGeometry.at(2)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(3)->state = Geometry::NORMAL;
if (lastObject == FEATHER_LINE_1 || lastObject == FEATHER_LINE_2) {
EditSubscriber::visibleGeometry.at(FEATHER_LINE_1)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at(FEATHER_LINE_2)->state = Geometry::NORMAL;
} else {
EditSubscriber::visibleGeometry.at(lastObject)->state = Geometry::NORMAL;
}