diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-06-01 00:13:36 +0000 |
|---|---|---|
| committer | John Smith <removethis.john.q.public@bigmail.com> | 2012-06-01 00:13:36 +0000 |
| commit | e095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a (patch) | |
| tree | 6ad9cba2a5dc09bae951c2cd1f02e0da955bd4bb /src | |
| parent | Gtkmm fixes for sp-widget (diff) | |
| download | inkscape-e095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a.tar.gz inkscape-e095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a.zip | |
Fix for 951580 : Ruler click toggles guide visibility
(bzr r11448)
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop-events.cpp | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 7a0c144ce..57a07fee3 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -82,10 +82,12 @@ int sp_desktop_root_handler(SPCanvasItem */*item*/, GdkEvent *event, SPDesktop * static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw, bool horiz) { - static bool dragging = false; + static bool clicked = false; + static bool dragged = false; static SPCanvasItem *guide = NULL; static Geom::Point normal; int wx, wy; + static gint xp = 0, yp = 0; // where drag started SPDesktop *desktop = dtw->desktop; GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(dtw->canvas)); @@ -103,14 +105,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge switch (event->type) { case GDK_BUTTON_PRESS: if (event->button.button == 1) { - dragging = true; + clicked = true; + dragged = false; + // save click origin + xp = (gint) event->button.x; + yp = (gint) event->button.y; Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win)); Geom::Point const event_dt(desktop->w2d(event_w)); - // explicitly show guidelines; if I draw a guide, I want them on - desktop->namedview->setGuides(true); - // calculate the normal of the guidelines when dragged from the edges of rulers. Geom::Point normal_bl_to_tr(-1.,1.); //bottomleft to topright Geom::Point normal_tr_to_bl(1.,1.); //topright to bottomleft @@ -157,10 +160,24 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge } break; case GDK_MOTION_NOTIFY: - if (dragging) { + if (clicked) { Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win)); Geom::Point event_dt(desktop->w2d(event_w)); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gint tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100); + if ( ( abs( (gint) event->motion.x - xp ) < tolerance ) + && ( abs( (gint) event->motion.y - yp ) < tolerance ) ) { + break; + } + + dragged = true; + + // explicitly show guidelines; if I draw a guide, I want them on + if ((horiz ? wy : wx) >= 0) { + desktop->namedview->setGuides(true); + } + if (!(event->motion.state & GDK_SHIFT_MASK)) { sp_dt_ruler_snap_new_guide(desktop, guide, event_dt, normal); } @@ -172,7 +189,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge } break; case GDK_BUTTON_RELEASE: - if (dragging && event->button.button == 1) { + if (clicked && event->button.button == 1) { sp_event_context_discard_delayed_snap_event(desktop->event_context); gdk_pointer_ungrab(event->button.time); @@ -183,8 +200,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge sp_dt_ruler_snap_new_guide(desktop, guide, event_dt, normal); } - dragging = false; - gtk_object_destroy(GTK_OBJECT(guide)); guide = NULL; if ((horiz ? wy : wx) >= 0) { @@ -198,6 +213,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge _("Create guide")); } desktop->set_coordinate_status(event_dt); + + if (!dragged) { + // Ruler click (without drag) toggle the guide visibility on and off + Inkscape::XML::Node *repr = desktop->namedview->getRepr(); + sp_namedview_toggle_guides(sp_desktop_document(desktop), repr); + } + + clicked = false; + dragged = false; } default: break; |
