diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-06-14 21:30:29 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-06-14 21:30:29 +0000 |
| commit | 14d03386c171fca906cb3e08e713a85c091f94c4 (patch) | |
| tree | a1d25596c964e598b299519f5d4a3b34916d6e9a /src/desktop-events.cpp | |
| parent | toggle units in the measure tool (diff) | |
| download | inkscape-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.cpp | 23 |
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: |
