diff --git a/src/pen-context.cpp b/src/pen-context.cpp
index 804c736bee91c1af5b30dbf913674810eefa6d43..1447173320c6cfd0b8b578eb168d65b23a824637 100644 (file)
--- a/src/pen-context.cpp
+++ b/src/pen-context.cpp
static int pen_next_paraxial_direction(const SPPenContext *const pc, Geom::Point const &pt, Geom::Point const &origin, guint state);
static void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Point &pt, guint const state);
-static Geom::Point pen_get_intermediate_horiz_vert(const SPPenContext *const pc, Geom::Point const &pt, guint const state);
static int pen_last_paraxial_dir = 0; // last used direction in horizontal/vertical mode; 0 = horizontal, 1 = vertical
pc = SP_PEN_CONTEXT(ec);
- sp_canvas_set_snap_delay_active(pc->desktop->canvas, true);
-
if (((SPEventContextClass *) pen_parent_class)->setup) {
((SPEventContextClass *) pen_parent_class)->setup(ec);
}
{
SPPenContext *pc = SP_PEN_CONTEXT(ec);
- sp_canvas_set_snap_delay_active(pc->desktop->canvas, false);
+ sp_event_context_discard_delayed_snap_event(ec);
if (pc->npoints != 0) {
pen_cancel (pc);
@@ -472,17 +469,17 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const
if (pc->npoints == 0) {
Geom::Point p;
- if (bevent.state & GDK_CONTROL_MASK) {
+ if ((bevent.state & GDK_CONTROL_MASK) && (pc->polylines_only || pc->polylines_paraxial)) {
p = event_dt;
if (!(bevent.state & GDK_SHIFT_MASK)) {
SnapManager &m = desktop->namedview->snap_manager;
m.setup(desktop);
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p);
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
}
- spdc_create_single_dot(event_context, p, "/tools/freehand/pen", bevent.state);
- ret = TRUE;
- break;
- }
+ spdc_create_single_dot(event_context, p, "/tools/freehand/pen", bevent.state);
+ ret = TRUE;
+ break;
+ }
// TODO: Perhaps it would be nicer to rearrange the following case
// distinction so that the case of a waiting LPE is treated separately
@@ -541,9 +538,6 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const
p = event_dt;
spdc_endpoint_snap(pc, p, bevent.state); /* Snap node only if not hitting anchor. */
spdc_pen_set_subsequent_point(pc, p, true);
- if (pc->polylines_only) {
- spdc_pen_finish_segment(pc, p, bevent.state);
- }
}
}
@@ -787,10 +781,8 @@ pen_handle_button_release(SPPenContext *const pc, GdkEventButton const &revent)
switch (pc->state) {
case SP_PEN_CONTEXT_POINT:
case SP_PEN_CONTEXT_CONTROL:
- if (!pc->polylines_only) {
- spdc_endpoint_snap(pc, p, revent.state);
- spdc_pen_finish_segment(pc, p, revent.state);
- }
+ spdc_endpoint_snap(pc, p, revent.state);
+ spdc_pen_finish_segment(pc, p, revent.state);
break;
case SP_PEN_CONTEXT_CLOSE:
spdc_endpoint_snap(pc, p, revent.state);
pen_handle_2button_press(SPPenContext *const pc, GdkEventButton const &bevent)
{
gint ret = FALSE;
- if (pc->npoints != 0 && bevent.button != 2) {
+ // only end on LMB double click. Otherwise horizontal scrolling causes ending of the path
+ if (pc->npoints != 0 && bevent.button == 1) {
spdc_pen_finish(pc, FALSE);
ret = TRUE;
}
}
break;
+/* TODO: this is not yet enabled?? looks like some traces of the Geometry tool
case GDK_P:
case GDK_p:
if (MOD__SHIFT_ONLY) {
ret = TRUE;
}
break;
+*/
case GDK_U:
case GDK_u:
@@ -1450,17 +1445,6 @@ void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Point &pt
}
}
-Geom::Point pen_get_intermediate_horiz_vert(const SPPenContext *const pc, Geom::Point const &pt)
-{
- Geom::Point const &origin = pc->p[0];
-
- if (pen_last_paraxial_dir == 0) {
- return Geom::Point (origin[Geom::X], pt[Geom::Y]);
- } else {
- return Geom::Point (pt[Geom::X], origin[Geom::Y]);
- }
-}
-
/*
Local Variables:
mode:c++