diff --git a/app/widgets/gimpdial.c b/app/widgets/gimpdial.c index 7d13436f10687a0530236f7e2461f28f59579c8c..90a297531d542f97067ad45022baca8b3b99921b 100644 --- a/app/widgets/gimpdial.c +++ b/app/widgets/gimpdial.c @@ -41,6 +41,8 @@ #define SEGMENT_FRACTION 0.3 +/* round n to the nearest multiple of m */ +#define SNAP(n, m) (RINT((n) / (m)) * (m)) enum { @@ -310,6 +312,9 @@ gimp_dial_button_press_event (GtkWidget *widget, if (dial->priv->clockwise_angles && angle) angle = 2.0 * G_PI - angle; + if (bevent->state & GDK_SHIFT_MASK) + angle = SNAP (angle, G_PI / 12.0); + dial->priv->last_angle = angle; switch (dial->priv->target) @@ -349,11 +354,16 @@ gimp_dial_motion_notify_event (GtkWidget *widget, { gdouble delta; + if (mevent->state & GDK_SHIFT_MASK) + angle = SNAP (angle, G_PI / 12.0); + delta = angle - dial->priv->last_angle; dial->priv->last_angle = angle; if (delta != 0.0) { + gdouble alpha = dial->priv->alpha; + switch (dial->priv->target) { case DIAL_TARGET_ALPHA: @@ -365,6 +375,10 @@ gimp_dial_motion_notify_event (GtkWidget *widget, break; case DIAL_TARGET_BOTH: + /* snap both by the alpha value */ + if (mevent->state & GDK_SHIFT_MASK) + delta = SNAP (alpha + delta, G_PI / 12.0) - alpha; + g_object_set (dial, "alpha", gimp_dial_normalize_angle (dial->priv->alpha + delta), "beta", gimp_dial_normalize_angle (dial->priv->beta + delta), diff --git a/app/widgets/gimppolar.c b/app/widgets/gimppolar.c index 06484c0de5174e99260525b6d68d877da5122eac..2cf3abd8056d2cbc7f0f8135e522920b2ab45c87 100644 --- a/app/widgets/gimppolar.c +++ b/app/widgets/gimppolar.c @@ -38,6 +38,8 @@ #include "gimppolar.h" +/* round n to the nearest multiple of m */ +#define SNAP(n, m) (RINT((n) / (m)) * (m)) enum { @@ -235,6 +237,9 @@ gimp_polar_button_press_event (GtkWidget *widget, angle = _gimp_circle_get_angle_and_distance (GIMP_CIRCLE (polar), bevent->x, bevent->y, &radius); + if (bevent->state & GDK_SHIFT_MASK) + angle = SNAP (angle, G_PI / 12.0); + radius = MIN (radius, 1.0); g_object_set (polar, @@ -262,6 +267,9 @@ gimp_polar_motion_notify_event (GtkWidget *widget, { radius = MIN (radius, 1.0); + if (mevent->state & GDK_SHIFT_MASK) + angle = SNAP (angle, G_PI / 12.0); + g_object_set (polar, "angle", angle, "radius", radius,