summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2007-09-07 19:22:55 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2007-09-07 19:22:55 +0000
commitb6007747868547d2535eb8e1d9c01064179a0468 (patch)
tree34837db6e415cc63daa979797a5cf786bdf47e41 /src
parentmore consistent coverage of all shift-modes of + and - (diff)
downloadinkscape-b6007747868547d2535eb8e1d9c01064179a0468.tar.gz
inkscape-b6007747868547d2535eb8e1d9c01064179a0468.zip
Also snap new guides, which are being dragged off the ruler.
(bzr r3701)
Diffstat (limited to 'src')
-rw-r--r--src/desktop-events.cpp15
-rw-r--r--src/snap.cpp6
-rw-r--r--src/snap.h2
3 files changed, 15 insertions, 8 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index 7f9ce0b04..90c02a772 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -77,10 +77,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
case GDK_MOTION_NOTIFY:
if (dragging) {
NR::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));
- NR::Point const event_dt(desktop->w2d(event_w));
+ NR::Point event_dt(desktop->w2d(event_w));
+
+ SnapManager const &m = desktop->namedview->snap_manager;
+ event_dt = m.guideSnap(event_dt, component_vectors[horiz ? NR::Y : NR::X]).getPoint();
+
double const guide_pos_dt = event_dt[ horiz
? NR::Y
: NR::X ];
+
sp_guideline_set_position(SP_GUIDELINE(guide), guide_pos_dt);
desktop->set_coordinate_status(event_dt);
desktop->setPosition (event_dt);
@@ -141,7 +146,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
SPGuide *guide = SP_GUIDE(data);
SPDesktop *desktop = static_cast<SPDesktop*>(gtk_object_get_data(GTK_OBJECT(item->canvas), "SPDesktop"));
- switch (event->type) {
+ switch (event->type) {
case GDK_2BUTTON_PRESS:
if (event->button.button == 1) {
dragging = false;
@@ -168,8 +173,10 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
event->motion.y);
NR::Point motion_dt(desktop->w2d(motion_w));
+ // This is for snapping while dragging existing guidelines. New guidelines,
+ // which are dragged off the ruler, are being snapped in sp_dt_ruler_event
SnapManager const &m = desktop->namedview->snap_manager;
- motion_dt = m.guideSnap(motion_dt, *guide).getPoint();
+ motion_dt = m.guideSnap(motion_dt, guide->normal).getPoint();
sp_guide_moveto(*guide, sp_guide_position_from_pt(guide, motion_dt), false);
moved = true;
@@ -189,7 +196,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
//whereas it might have been at a snapped position a millisecond before.
//See GDK_MOTION_NOTIFY above. Why's that????
SnapManager const &m = desktop->namedview->snap_manager;
- event_dt = m.guideSnap(event_dt, *guide).getPoint();
+ event_dt = m.guideSnap(event_dt, guide->normal).getPoint();
if (sp_canvas_world_pt_inside_window(item->canvas, event_w)) {
sp_guide_moveto(*guide, sp_guide_position_from_pt(guide, event_dt), true);
diff --git a/src/snap.cpp b/src/snap.cpp
index 7a451f5d5..886a1216f 100644
--- a/src/snap.cpp
+++ b/src/snap.cpp
@@ -352,12 +352,12 @@ Inkscape::SnappedPoint SnapManager::constrainedSnap(Inkscape::Snapper::PointType
}
Inkscape::SnappedPoint SnapManager::guideSnap(NR::Point const &p,
- SPGuide const &guide) const
+ NR::Point const &guide_normal) const
{
Inkscape::ObjectSnapper::DimensionToSnap snap_dim;
- if (guide.normal == component_vectors[NR::Y]) {
+ if (guide_normal == component_vectors[NR::Y]) {
snap_dim = Inkscape::ObjectSnapper::SNAP_Y;
- } else if (guide.normal == component_vectors[NR::X]) {
+ } else if (guide_normal == component_vectors[NR::X]) {
snap_dim = Inkscape::ObjectSnapper::SNAP_X;
} else {
g_warning("WARNING: snapping of angled guides is not supported yet!");
diff --git a/src/snap.h b/src/snap.h
index cdd707d01..f44df8923 100644
--- a/src/snap.h
+++ b/src/snap.h
@@ -84,7 +84,7 @@ public:
std::list<SPItem const *> const &it) const;
Inkscape::SnappedPoint guideSnap(NR::Point const &p,
- SPGuide const &guide) const;
+ NR::Point const &guide_normal) const;
std::pair<NR::Point, bool> freeSnapTranslation(Inkscape::Snapper::PointType t,
std::vector<NR::Point> const &p,