summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2007-03-20 21:14:34 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2007-03-20 21:14:34 +0000
commit8c6aca4358672a5c71a922ead85f2a9fc327a861 (patch)
tree8d0bca07eeef55a497d578d0b128a468a16ee2a6 /src
parentMonster commit. New grid infrastructure. The old gridmanagement code is still... (diff)
downloadinkscape-8c6aca4358672a5c71a922ead85f2a9fc327a861.tar.gz
inkscape-8c6aca4358672a5c71a922ead85f2a9fc327a861.zip
Implementing feature request #1673807: snapping of gradient handles
(bzr r2722)
Diffstat (limited to 'src')
-rw-r--r--src/arc-context.cpp2
-rw-r--r--src/gradient-context.cpp8
-rw-r--r--src/gradient-drag.cpp33
-rw-r--r--src/spiral-context.cpp2
4 files changed, 29 insertions, 16 deletions
diff --git a/src/arc-context.cpp b/src/arc-context.cpp
index 1071d6f5d..db64d7951 100644
--- a/src/arc-context.cpp
+++ b/src/arc-context.cpp
@@ -274,7 +274,7 @@ static gint sp_arc_context_root_handler(SPEventContext *event_context, GdkEvent
}
break;
case GDK_MOTION_NOTIFY:
- if (dragging && event->motion.state && GDK_BUTTON1_MASK) {
+ if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
if ( event_context->within_tolerance
&& ( abs( (gint) event->motion.x - event_context->xp ) < event_context->tolerance )
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp
index c44cf1c59..42b4df578 100644
--- a/src/gradient-context.cpp
+++ b/src/gradient-context.cpp
@@ -44,7 +44,8 @@
#include "sp-stop.h"
#include "svg/css-ostringstream.h"
#include "svg/svg-color.h"
-
+#include "snap.h"
+#include "sp-namedview.h"
@@ -410,8 +411,9 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
/* Position center */
NR::Point const button_dt = desktop->w2d(button_w);
/* Snap center to nearest magnetic point */
-
- rc->origin = button_dt;
+
+ SnapManager const &m = desktop->namedview->snap_manager;
+ rc->origin = m.freeSnap(Inkscape::Snapper::BBOX_POINT | Inkscape::Snapper::SNAP_POINT, button_dt, NULL).getPoint();
ret = TRUE;
}
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp
index 4a8f7e8ed..d671b4823 100644
--- a/src/gradient-drag.cpp
+++ b/src/gradient-drag.cpp
@@ -41,6 +41,10 @@
#include "gradient-drag.h"
#include "sp-stop.h"
+#include "snap.h"
+#include "sp-namedview.h"
+
+
#define GR_KNOT_COLOR_NORMAL 0xffffff00
#define GR_KNOT_COLOR_SELECTED 0x0000ff00
@@ -429,19 +433,26 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
}
}
-
if (!((state & GDK_SHIFT_MASK) || ((state & GDK_CONTROL_MASK) && (state & GDK_MOD1_MASK)))) {
- // See if we need to snap to any of the levels
- for (guint i = 0; i < dragger->parent->hor_levels.size(); i++) {
- if (fabs(p[NR::Y] - dragger->parent->hor_levels[i]) < snap_dist) {
- p[NR::Y] = dragger->parent->hor_levels[i];
- sp_knot_moveto (knot, &p);
+ // Try snapping to the grid or guides
+ SnapManager const &m = dragger->parent->desktop->namedview->snap_manager;
+ Inkscape::SnappedPoint s = m.freeSnap(Inkscape::Snapper::SNAP_POINT | Inkscape::Snapper::BBOX_POINT, p, NULL);
+ if (s.getDistance() < 1e6) {
+ p = s.getPoint();
+ sp_knot_moveto (knot, &p);
+ } else {
+ // No snapping so far, let's see if we need to snap to any of the levels
+ for (guint i = 0; i < dragger->parent->hor_levels.size(); i++) {
+ if (fabs(p[NR::Y] - dragger->parent->hor_levels[i]) < snap_dist) {
+ p[NR::Y] = dragger->parent->hor_levels[i];
+ sp_knot_moveto (knot, &p);
+ }
}
- }
- for (guint i = 0; i < dragger->parent->vert_levels.size(); i++) {
- if (fabs(p[NR::X] - dragger->parent->vert_levels[i]) < snap_dist) {
- p[NR::X] = dragger->parent->vert_levels[i];
- sp_knot_moveto (knot, &p);
+ for (guint i = 0; i < dragger->parent->vert_levels.size(); i++) {
+ if (fabs(p[NR::X] - dragger->parent->vert_levels[i]) < snap_dist) {
+ p[NR::X] = dragger->parent->vert_levels[i];
+ sp_knot_moveto (knot, &p);
+ }
}
}
}
diff --git a/src/spiral-context.cpp b/src/spiral-context.cpp
index ef3e3470b..f912d6614 100644
--- a/src/spiral-context.cpp
+++ b/src/spiral-context.cpp
@@ -276,7 +276,7 @@ sp_spiral_context_root_handler(SPEventContext *event_context, GdkEvent *event)
}
break;
case GDK_MOTION_NOTIFY:
- if (dragging && event->motion.state && GDK_BUTTON1_MASK) {
+ if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
if ( event_context->within_tolerance
&& ( abs( (gint) event->motion.x - event_context->xp ) < event_context->tolerance )