summaryrefslogtreecommitdiffhomepage
path: root/spline-widget/spline-widget.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2016-09-05 12:40:31 +0200
committerStanislaw Halik <sthalik@misaki.pl>2016-09-05 12:40:31 +0200
commitc587590ddb8a4f76a134018155588e2470992600 (patch)
treefdbe0749ca06707a931da9d264fe58ae3c53d448 /spline-widget/spline-widget.cpp
parent063acd81a4006ac0d26da07f2f72657d76ae4153 (diff)
spline-widget: allow for non-integral snap values
Diffstat (limited to 'spline-widget/spline-widget.cpp')
-rw-r--r--spline-widget/spline-widget.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/spline-widget/spline-widget.cpp b/spline-widget/spline-widget.cpp
index 6e3a95b3..ff18a2f9 100644
--- a/spline-widget/spline-widget.cpp
+++ b/spline-widget/spline-widget.cpp
@@ -19,9 +19,9 @@
spline_widget::spline_widget(QWidget *parent) :
QWidget(parent),
_config(nullptr),
- moving_control_point_idx(-1),
snap_x(0),
snap_y(0),
+ moving_control_point_idx(-1),
_draw_function(true),
_preview_only(false)
{
@@ -472,10 +472,12 @@ QPointF spline_widget::pixel_coord_to_point(const QPointF& point)
qreal x = round((point.x() - pixel_bounds.x()) / c.x());
qreal y = round((pixel_bounds.height() - point.y() + pixel_bounds.y()) / c.y());
+ const volatile int c = 8192;
+
if (snap_x > 0)
- x -= int(x) % snap_x;
+ x = std::nearbyint(x * c - (int(x * c) % int(snap_x * c))) / double(c);
if (snap_y > 0)
- y -= int(y) % snap_y;
+ y = std::nearbyint(y * c - (int(y * c) % int(snap_y * c))) / double(c);
if (x < 0)
x = 0;