[gimp] app: even more cleanup in GimpDial
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: even more cleanup in GimpDial
- Date: Sun, 25 May 2014 15:43:14 +0000 (UTC)
commit 804f3e4bbebf4d5cea9f8dd0d7c9f77f4a757798
Author: Michael Natterer <mitch gimp org>
Date: Sun May 25 17:41:14 2014 +0200
app: even more cleanup in GimpDial
app/widgets/gimpdial.c | 145 +++++++++++++++++++++++------------------------
1 files changed, 71 insertions(+), 74 deletions(-)
---
diff --git a/app/widgets/gimpdial.c b/app/widgets/gimpdial.c
index 22ae7c6..873dabf 100644
--- a/app/widgets/gimpdial.c
+++ b/app/widgets/gimpdial.c
@@ -24,8 +24,6 @@
#include "config.h"
-#include <string.h>
-
#include <gegl.h>
#include <gtk/gtk.h>
@@ -70,11 +68,10 @@ struct _GimpDialPrivate
GdkWindow *event_window;
DialTarget target;
- gdouble press_angle;
+ gdouble last_angle;
gint border_width;
guint has_grab : 1;
- GdkModifierType press_state;
};
@@ -446,61 +443,51 @@ gimp_dial_button_press_event (GtkWidget *widget,
{
GimpDial *dial = GIMP_DIAL (widget);
- if (bevent->type == GDK_BUTTON_PRESS)
+ if (bevent->type == GDK_BUTTON_PRESS &&
+ bevent->button == 1)
{
- if (gdk_event_triggers_context_menu ((GdkEvent *) bevent))
- {
- dial->priv->press_state = 0;
-
- //g_signal_emit (widget, dial_signals[CONTEXT], 0);
- }
- else if (bevent->button == 1)
- {
- GtkAllocation allocation;
- gint size;
- gdouble center_x;
- gdouble center_y;
- gdouble angle;
- gdouble distance;
-
- gtk_widget_get_allocation (widget, &allocation);
+ GtkAllocation allocation;
+ gdouble center_x;
+ gdouble center_y;
+ gint size;
+ gdouble angle;
+ gdouble distance;
- size = MIN (allocation.width, allocation.height) - 2 * dial->priv->border_width;
+ gtk_grab_add (widget);
+ dial->priv->has_grab = TRUE;
- center_x = allocation.width / 2.0;
- center_y = allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
- gtk_grab_add (widget);
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
- dial->priv->has_grab = TRUE;
- dial->priv->press_state = bevent->state;
+ size = MIN (allocation.width, allocation.height) - 2 * dial->priv->border_width;
- angle = get_angle_and_distance (center_x, center_y, size / 2.0,
- bevent->x, bevent->y,
- &distance);
- dial->priv->press_angle = angle;
+ angle = get_angle_and_distance (center_x, center_y, size / 2.0,
+ bevent->x, bevent->y,
+ &distance);
+ dial->priv->last_angle = angle;
- if (distance > SEGMENT_FRACTION &&
- MIN (get_angle_distance (dial->priv->alpha, angle),
- get_angle_distance (dial->priv->beta, angle)) < G_PI / 12)
+ if (distance > SEGMENT_FRACTION &&
+ MIN (get_angle_distance (dial->priv->alpha, angle),
+ get_angle_distance (dial->priv->beta, angle)) < G_PI / 12)
+ {
+ if (get_angle_distance (dial->priv->alpha, angle) <
+ get_angle_distance (dial->priv->beta, angle))
{
- if (get_angle_distance (dial->priv->alpha, angle) <=
- get_angle_distance (dial->priv->beta, angle))
- {
- dial->priv->target = DIAL_TARGET_ALPHA;
- g_object_set (dial, "alpha", angle, NULL);
- }
- else
- {
- dial->priv->target = DIAL_TARGET_BETA;
- g_object_set (dial, "beta", angle, NULL);
- }
+ dial->priv->target = DIAL_TARGET_ALPHA;
+ g_object_set (dial, "alpha", angle, NULL);
}
else
{
- dial->priv->target = DIAL_TARGET_BOTH;
+ dial->priv->target = DIAL_TARGET_BETA;
+ g_object_set (dial, "beta", angle, NULL);
}
}
+ else
+ {
+ dial->priv->target = DIAL_TARGET_BOTH;
+ }
}
return FALSE;
@@ -525,40 +512,50 @@ static gboolean
gimp_dial_motion_notify_event (GtkWidget *widget,
GdkEventMotion *mevent)
{
- GimpDial *dial = GIMP_DIAL (widget);
- GtkAllocation allocation;
- gdouble center_x;
- gdouble center_y;
- gfloat angle, delta;
+ GimpDial *dial = GIMP_DIAL (widget);
- gtk_widget_get_allocation (widget, &allocation);
+ if (dial->priv->has_grab)
+ {
+ GtkAllocation allocation;
+ gdouble center_x;
+ gdouble center_y;
+ gdouble angle;
+ gdouble delta;
- center_x = allocation.width / 2.0;
- center_y = allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
- angle = get_angle_and_distance (center_x, center_y, 1.0,
- mevent->x, mevent->y,
- NULL);
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
- delta = angle - dial->priv->press_angle;
- dial->priv->press_angle = angle;
+ angle = get_angle_and_distance (center_x, center_y, 1.0,
+ mevent->x, mevent->y,
+ NULL);
- if (delta)
- {
- if (dial->priv->target == DIAL_TARGET_ALPHA)
- {
- g_object_set (dial, "alpha", angle, NULL);
- }
- else if (dial->priv->target == DIAL_TARGET_BETA)
- {
- g_object_set (dial, "beta", angle, NULL);
- }
- else
+ delta = angle - dial->priv->last_angle;
+ dial->priv->last_angle = angle;
+
+ if (delta != 0.0)
{
- g_object_set (dial,
- "alpha", angle_mod_2PI (dial->priv->alpha + delta),
- "beta", angle_mod_2PI (dial->priv->beta + delta),
- NULL);
+ switch (dial->priv->target)
+ {
+ case DIAL_TARGET_ALPHA:
+ g_object_set (dial, "alpha", angle, NULL);
+ break;
+
+ case DIAL_TARGET_BETA:
+ g_object_set (dial, "beta", angle, NULL);
+ break;
+
+ case DIAL_TARGET_BOTH:
+ g_object_set (dial,
+ "alpha", angle_mod_2PI (dial->priv->alpha + delta),
+ "beta", angle_mod_2PI (dial->priv->beta + delta),
+ NULL);
+ break;
+
+ default:
+ break;
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]