diff options
Diffstat (limited to 'src/pen-context.cpp')
| -rw-r--r-- | src/pen-context.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
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 |
