summaryrefslogtreecommitdiffstats
path: root/src/desktop-events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop-events.cpp')
-rw-r--r--src/desktop-events.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index a0ceb77e3..eb2b3a093 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -319,11 +319,17 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
+ bool const relative_snaps = abs(prefs->getBool("/options/relativeguiderotationsnap/value", false));
if (snaps) {
- Geom::Angle orig_angle(guide->normal_to_line);
- Geom::Angle snap_angle = angle - orig_angle;
- double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ if (relative_snaps) {
+ Geom::Angle orig_angle(guide->normal_to_line);
+ Geom::Angle snap_angle = angle - orig_angle;
+ double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ } else {
+ double sections = floor(angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections;
+ }
}
}
sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), false);
@@ -387,11 +393,17 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
+ bool const relative_snaps = abs(prefs->getBool("/options/relativeguiderotationsnap/value", false));
if (snaps) {
- Geom::Angle orig_angle(guide->normal_to_line);
- Geom::Angle snap_angle = angle - orig_angle;
- double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ if (relative_snaps) {
+ Geom::Angle orig_angle(guide->normal_to_line);
+ Geom::Angle snap_angle = angle - orig_angle;
+ double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ } else {
+ double sections = floor(angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections;
+ }
}
}
sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), true);