summaryrefslogtreecommitdiffstats
path: root/src/pen-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pen-context.cpp')
-rw-r--r--src/pen-context.cpp24
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