X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Farc-context.cpp;h=b485dd1835c2d3446f4a7d058ff74f9bdad29cb3;hb=a401603e1e2635fadeec3b7a3a48de442da93472;hp=9cb6e822285101a46d81eb2e12b1996ff5e5f297;hpb=f200d31b8a03050faa7243929bbd5698db488399;p=inkscape.git diff --git a/src/arc-context.cpp b/src/arc-context.cpp index 9cb6e8222..b485dd183 100644 --- a/src/arc-context.cpp +++ b/src/arc-context.cpp @@ -107,6 +107,7 @@ static void sp_arc_context_init(SPArcContext *arc_context) event_context->tolerance = 0; event_context->within_tolerance = false; event_context->item_to_select = NULL; + event_context->tool_url = "/tools/shapes/arc"; arc_context->item = NULL; @@ -116,15 +117,15 @@ static void sp_arc_context_init(SPArcContext *arc_context) static void sp_arc_context_finish(SPEventContext *ec) { SPArcContext *ac = SP_ARC_CONTEXT(ec); - SPDesktop *desktop = ec->desktop; + SPDesktop *desktop = ec->desktop; - sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), GDK_CURRENT_TIME); - sp_arc_finish(ac); + sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), GDK_CURRENT_TIME); + sp_arc_finish(ac); ac->sel_changed_connection.disconnect(); if (((SPEventContextClass *) parent_class)->finish) { - ((SPEventContextClass *) parent_class)->finish(ec); - } + ((SPEventContextClass *) parent_class)->finish(ec); + } } static void sp_arc_context_dispose(GObject *object) @@ -251,6 +252,7 @@ static gint sp_arc_context_root_handler(SPEventContext *event_context, GdkEvent GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK, NULL, event->button.time); ret = TRUE; + m.unSetup(); } break; case GDK_MOTION_NOTIFY: @@ -274,6 +276,14 @@ static gint sp_arc_context_root_handler(SPEventContext *event_context, GdkEvent gobble_motion_events(GDK_BUTTON1_MASK); ret = TRUE; + } else if (!sp_event_context_knot_mouseover(ac)){ + SnapManager &m = desktop->namedview->snap_manager; + m.setup(desktop); + + Geom::Point const motion_w(event->motion.x, event->motion.y); + Geom::Point motion_dt(desktop->w2d(motion_w)); + m.preSnap(Inkscape::SnapCandidatePoint(motion_dt, Inkscape::SNAPSOURCE_NODE_HANDLE)); + m.unSetup(); } break; case GDK_BUTTON_RELEASE: @@ -283,7 +293,7 @@ static gint sp_arc_context_root_handler(SPEventContext *event_context, GdkEvent sp_event_context_discard_delayed_snap_event(event_context); if (!event_context->within_tolerance) { // we've been dragging, finish the arc - sp_arc_finish(ac); + sp_arc_finish(ac); } else if (event_context->item_to_select) { // no dragging, select clicked item if any if (event->button.state & GDK_SHIFT_MASK) { @@ -335,14 +345,14 @@ static gint sp_arc_context_root_handler(SPEventContext *event_context, GdkEvent } break; case GDK_Escape: - if (dragging) { - dragging = false; - sp_event_context_discard_delayed_snap_event(event_context); - // if drawing, cancel, otherwise pass it up for deselecting - sp_arc_cancel(ac); - ret = TRUE; - } - break; + if (dragging) { + dragging = false; + sp_event_context_discard_delayed_snap_event(event_context); + // if drawing, cancel, otherwise pass it up for deselecting + sp_arc_cancel(ac); + ret = TRUE; + } + break; case GDK_space: if (dragging) { sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), @@ -480,13 +490,13 @@ static void sp_arc_finish(SPArcContext *ac) if (ac->item != NULL) { - SPGenericEllipse *ge = SP_GENERICELLIPSE(SP_ARC(ac->item)); - if (ge->rx.computed == 0 || ge->ry.computed == 0) { - sp_arc_cancel(ac); // Don't allow the creating of zero sized arc, for example when the start and and point snap to the snap grid point - return; - } + SPGenericEllipse *ge = SP_GENERICELLIPSE(SP_ARC(ac->item)); + if (ge->rx.computed == 0 || ge->ry.computed == 0) { + sp_arc_cancel(ac); // Don't allow the creating of zero sized arc, for example when the start and and point snap to the snap grid point + return; + } - SPDesktop *desktop = SP_EVENT_CONTEXT(ac)->desktop; + SPDesktop *desktop = SP_EVENT_CONTEXT(ac)->desktop; SP_OBJECT(ac->item)->updateRepr(); @@ -502,14 +512,14 @@ static void sp_arc_finish(SPArcContext *ac) static void sp_arc_cancel(SPArcContext *ac) { - SPDesktop *desktop = SP_EVENT_CONTEXT(ac)->desktop; + SPDesktop *desktop = SP_EVENT_CONTEXT(ac)->desktop; - sp_desktop_selection(desktop)->clear(); - sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), 0); + sp_desktop_selection(desktop)->clear(); + sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), 0); if (ac->item != NULL) { - SP_OBJECT(ac->item)->deleteObject(); - ac->item = NULL; + SP_OBJECT(ac->item)->deleteObject(); + ac->item = NULL; } ac->within_tolerance = false; @@ -532,4 +542,4 @@ static void sp_arc_cancel(SPArcContext *ac) fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :