X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdesktop-events.cpp;h=98e96c38c166205d3686cdef20d6e7f46d4f0726;hb=963f23115db07f460bdd862b957f8bd9dba88b9b;hp=7f9ce0b04158d08d3e5b96c86a93179de54dcf9e;hpb=5d34a7de8fd25b5ff22b5ca5ae2a631611a18f6f;p=inkscape.git diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 7f9ce0b04..98e96c38c 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -34,7 +34,7 @@ /* Root item handler */ -int sp_desktop_root_handler(SPCanvasItem *item, GdkEvent *event, SPDesktop *desktop) +int sp_desktop_root_handler(SPCanvasItem */*item*/, GdkEvent *event, SPDesktop *desktop) { return sp_event_context_root_handler(desktop->event_context, event); } @@ -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); @@ -90,15 +95,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge if (dragging && event->button.button == 1) { gdk_pointer_ungrab(event->button.time); 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(); + dragging = false; gtk_object_destroy(GTK_OBJECT(guide)); guide = NULL; - if ( ( horiz - ? wy - : wx ) - >= 0 ) - { + if ((horiz ? wy : wx) >= 0) { Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc()); Inkscape::XML::Node *repr = xml_doc->createElement("sodipodi:guide"); repr->setAttribute("orientation", (horiz) ? "horizontal" : "vertical"); @@ -141,7 +146,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) SPGuide *guide = SP_GUIDE(data); SPDesktop *desktop = static_cast(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; @@ -185,11 +192,8 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) event->button.y); NR::Point event_dt(desktop->w2d(event_w)); - //If we don't snap here again, it will end up at the current mouse position - //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);