summaryrefslogtreecommitdiffstats
path: root/src/desktop-events.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-06-14 21:30:29 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-06-14 21:30:29 +0000
commit14d03386c171fca906cb3e08e713a85c091f94c4 (patch)
treea1d25596c964e598b299519f5d4a3b34916d6e9a /src/desktop-events.cpp
parenttoggle units in the measure tool (diff)
downloadinkscape-14d03386c171fca906cb3e08e713a85c091f94c4.tar.gz
inkscape-14d03386c171fca906cb3e08e713a85c091f94c4.zip
shift+ctrl dragging a guideline: fix to snap to angles with original angle as offset, like rotating normal objects
(bzr r10303)
Diffstat (limited to 'src/desktop-events.cpp')
-rw-r--r--src/desktop-events.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index b7b7529a1..a0ceb77e3 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -17,6 +17,7 @@
#include <map>
#include <string>
#include <2geom/line.h>
+#include <2geom/angle.h>
#include <glibmm/i18n.h>
#include "desktop.h"
@@ -314,16 +315,18 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
case SP_DRAG_ROTATE:
{
Geom::Point pt = motion_dt - guide->point_on_line;
- double angle = std::atan2(pt[Geom::Y], pt[Geom::X]);
+ Geom::Angle angle(pt);
if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
if (snaps) {
- double sections = floor(angle * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections;
+ 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();
}
}
- sp_guide_set_normal(*guide, Geom::Point(1,0) * Geom::Rotate(angle + M_PI_2), false);
+ sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), false);
break;
}
case SP_DRAG_MOVE_ORIGIN:
@@ -380,16 +383,18 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
case SP_DRAG_ROTATE:
{
Geom::Point pt = event_dt - guide->point_on_line;
- double angle = std::atan2(pt[Geom::Y], pt[Geom::X]);
- if (event->motion.state & GDK_CONTROL_MASK) {
+ Geom::Angle angle(pt);
+ if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
if (snaps) {
- double sections = floor(angle * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections;
+ 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();
}
}
- sp_guide_set_normal(*guide, Geom::Point(1,0) * Geom::Rotate(angle + M_PI_2), true);
+ sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), true);
break;
}
case SP_DRAG_MOVE_ORIGIN: