From dc282cc4f6e376f45d24087e76527560d21e495b Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Mon, 4 Aug 2008 21:09:10 +0000 Subject: While drawing and constraining to specific angles (using CTRL): don't try a freeSnap() after we've already tried a constrainedSnap() (bzr r6560) --- src/pen-context.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 1c9b30dc3..4fb7fbc99 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -276,11 +276,18 @@ sp_pen_context_set(SPEventContext *ec, gchar const *key, gchar const *val) static void spdc_endpoint_snap(SPPenContext const *const pc, NR::Point &p, guint const state) { - if (pc->npoints > 0) { - spdc_endpoint_snap_rotation(pc, p, pc->p[0], state); + + if ((state & GDK_CONTROL_MASK)) { //CTRL enables angular snapping + if (pc->npoints > 0) { + spdc_endpoint_snap_rotation(pc, p, pc->p[0], state); + } + } else { + if (!(state & GDK_SHIFT_MASK)) { //SHIFT disables all snapping, except the angular snapping above + //After all, the user explicitely asked for angular snapping by + //pressing CTRL + spdc_endpoint_snap_free(pc, p, state); + } } - - spdc_endpoint_snap_free(pc, p, state); } /** @@ -292,8 +299,13 @@ spdc_endpoint_snap_handle(SPPenContext const *const pc, NR::Point &p, guint cons g_return_if_fail(( pc->npoints == 2 || pc->npoints == 5 )); - spdc_endpoint_snap_rotation(pc, p, pc->p[pc->npoints - 2], state); - spdc_endpoint_snap_free(pc, p, state); + if ((state & GDK_CONTROL_MASK)) { //CTRL enables angular snapping + spdc_endpoint_snap_rotation(pc, p, pc->p[pc->npoints - 2], state); + } else { + if (!(state & GDK_SHIFT_MASK)) { //SHIFT disables all snapping, except the angular snapping above + spdc_endpoint_snap_free(pc, p, state); + } + } } static gint -- cgit v1.2.3