diff --git a/app/common/bezier.cpp b/app/common/bezier.cpp index 1b49d00af..9f59252e2 100644 --- a/app/common/bezier.cpp +++ b/app/common/bezier.cpp @@ -22,6 +22,8 @@ #include +#include "common/clamp.h" + namespace olive { double Bezier::QuadraticXtoT(double x, double a, double b, double c) @@ -38,6 +40,9 @@ double Bezier::CubicXtoT(double x_target, double a, double b, double c, double d { const double tolerance = 0.0001; + // Clamp to prevent deadlocks + x_target = clamp(x_target, a, d); + double lower = 0.0; double upper = 1.0; diff --git a/app/widget/nodeview/nodeviewedge.cpp b/app/widget/nodeview/nodeviewedge.cpp index 3326cd2fa..15d0bfae2 100644 --- a/app/widget/nodeview/nodeviewedge.cpp +++ b/app/widget/nodeview/nodeviewedge.cpp @@ -26,7 +26,6 @@ #include #include "common/bezier.h" -#include "common/clamp.h" #include "common/lerp.h" #include "nodeview.h" #include "nodeviewscene.h" @@ -153,7 +152,7 @@ void NodeViewEdge::SetPoints(const QPointF &start, const QPointF &end, bool inpu y4 = start.y(); } - double t = Bezier::CubicXtoT(clamp(continue_x, x1, x4), x1, x2, x3, x4); + double t = Bezier::CubicXtoT(continue_x, x1, x2, x3, x4); double y = Bezier::CubicTtoY(y1, y2, y3, y4, t); angle = qAtan2(end.y() - y, end.x() - continue_x);