[gimp] app: add boolean draw_beta property to GimpDial
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add boolean draw_beta property to GimpDial
- Date: Sun, 25 May 2014 18:27:10 +0000 (UTC)
commit 5fbcc70c0c7dc9bca4e93fd5d0ae48d24bd7abdf
Author: Michael Natterer <mitch gimp org>
Date: Sun May 25 20:24:47 2014 +0200
app: add boolean draw_beta property to GimpDial
so it can be used to pick just one angle.
app/widgets/gimpdial.c | 121 +++++++++++++++++++++++++++++-------------------
1 files changed, 74 insertions(+), 47 deletions(-)
---
diff --git a/app/widgets/gimpdial.c b/app/widgets/gimpdial.c
index 22666b4..78a5635 100644
--- a/app/widgets/gimpdial.c
+++ b/app/widgets/gimpdial.c
@@ -46,6 +46,7 @@ enum
PROP_0,
PROP_BORDER_WIDTH,
PROP_BACKGROUND,
+ PROP_DRAW_BETA,
PROP_ALPHA,
PROP_BETA,
PROP_CLOCKWISE
@@ -63,6 +64,7 @@ struct _GimpDialPrivate
{
gint border_width;
GimpDialBackground background;
+ gboolean draw_beta;
gdouble alpha;
gdouble beta;
@@ -113,7 +115,8 @@ static void gimp_dial_draw_arrows (cairo_t *cr,
gint size,
gdouble alpha,
gdouble beta,
- gboolean clockwise);
+ gboolean clockwise,
+ gboolean draw_beta);
G_DEFINE_TYPE (GimpDial, gimp_dial, GTK_TYPE_WIDGET)
@@ -157,6 +160,13 @@ gimp_dial_class_init (GimpDialClass *klass)
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class, PROP_DRAW_BETA,
+ g_param_spec_boolean ("draw-beta",
+ NULL, NULL,
+ TRUE,
+ GIMP_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
g_object_class_install_property (object_class, PROP_ALPHA,
g_param_spec_double ("alpha",
NULL, NULL,
@@ -221,6 +231,11 @@ gimp_dial_set_property (GObject *object,
gtk_widget_queue_draw (GTK_WIDGET (dial));
break;
+ case PROP_DRAW_BETA:
+ dial->priv->draw_beta = g_value_get_boolean (value);
+ gtk_widget_queue_draw (GTK_WIDGET (dial));
+ break;
+
case PROP_ALPHA:
dial->priv->alpha = g_value_get_double (value);
gtk_widget_queue_draw (GTK_WIDGET (dial));
@@ -260,6 +275,10 @@ gimp_dial_get_property (GObject *object,
g_value_set_enum (value, dial->priv->background);
break;
+ case PROP_DRAW_BETA:
+ g_value_set_boolean (value, dial->priv->draw_beta);
+ break;
+
case PROP_ALPHA:
g_value_set_double (value, dial->priv->alpha);
break;
@@ -406,7 +425,8 @@ gimp_dial_expose_event (GtkWidget *widget,
gimp_dial_draw_background (cr, size, dial->priv->background);
gimp_dial_draw_arrows (cr, size,
dial->priv->alpha, dial->priv->beta,
- dial->priv->clockwise);
+ dial->priv->clockwise,
+ dial->priv->draw_beta);
cairo_destroy (cr);
}
@@ -485,7 +505,8 @@ gimp_dial_button_press_event (GtkWidget *widget,
&distance);
dial->priv->last_angle = angle;
- if (distance > SEGMENT_FRACTION &&
+ if (dial->priv->draw_beta &&
+ distance > SEGMENT_FRACTION &&
MIN (get_angle_distance (dial->priv->alpha, angle),
get_angle_distance (dial->priv->beta, angle)) < G_PI / 12)
{
@@ -677,16 +698,14 @@ gimp_dial_draw_arrows (cairo_t *cr,
gint size,
gdouble alpha,
gdouble beta,
- gboolean clockwise)
+ gboolean clockwise,
+ gboolean draw_beta)
{
- gint radius = size / 2.0 - 1.5;
- gint direction = clockwise ? -1 : 1;
- gint slice_dist;
- gdouble slice;
+ gint radius = size / 2.0 - 1.5;
+ gint direction = clockwise ? -1 : 1;
-#define REL 0.8
-#define DEL 0.1
-#define TICK 10
+#define REL 0.8
+#define DEL 0.1
cairo_save (cr);
@@ -711,45 +730,53 @@ gimp_dial_draw_arrows (cairo_t *cr,
ROUND (radius + radius * REL * cos (alpha + DEL)),
ROUND (radius - radius * REL * sin (alpha + DEL)));
- cairo_move_to (cr, radius, radius);
- cairo_line_to (cr,
- ROUND (radius + radius * cos (beta)),
- ROUND (radius - radius * sin (beta)));
-
- cairo_move_to (cr,
- radius + radius * cos (beta),
- radius - radius * sin (beta));
- cairo_line_to (cr,
- ROUND (radius + radius * REL * cos (beta - DEL)),
- ROUND (radius - radius * REL * sin (beta - DEL)));
-
- cairo_move_to (cr,
- radius + radius * cos (beta),
- radius - radius * sin (beta));
- cairo_line_to (cr,
- ROUND (radius + radius * REL * cos (beta + DEL)),
- ROUND (radius - radius * REL * sin (beta + DEL)));
-
- slice_dist = radius * SEGMENT_FRACTION;
-
- cairo_move_to (cr,
- radius + slice_dist * cos (beta),
- radius - slice_dist * sin (beta));
- cairo_line_to (cr,
- ROUND (radius + slice_dist * cos (beta) +
- direction * TICK * sin (beta)),
- ROUND (radius - slice_dist * sin(beta) +
- direction * TICK * cos (beta)));
+ if (draw_beta)
+ {
+ gint slice_dist;
+ gdouble slice;
- cairo_new_sub_path (cr);
+#define TICK 10
- if (clockwise)
- slice = -normalize_angle (alpha - beta);
- else
- slice = normalize_angle (beta - alpha);
+ cairo_move_to (cr, radius, radius);
+ cairo_line_to (cr,
+ ROUND (radius + radius * cos (beta)),
+ ROUND (radius - radius * sin (beta)));
+
+ cairo_move_to (cr,
+ radius + radius * cos (beta),
+ radius - radius * sin (beta));
+ cairo_line_to (cr,
+ ROUND (radius + radius * REL * cos (beta - DEL)),
+ ROUND (radius - radius * REL * sin (beta - DEL)));
+
+ cairo_move_to (cr,
+ radius + radius * cos (beta),
+ radius - radius * sin (beta));
+ cairo_line_to (cr,
+ ROUND (radius + radius * REL * cos (beta + DEL)),
+ ROUND (radius - radius * REL * sin (beta + DEL)));
+
+ slice_dist = radius * SEGMENT_FRACTION;
+
+ cairo_move_to (cr,
+ radius + slice_dist * cos (beta),
+ radius - slice_dist * sin (beta));
+ cairo_line_to (cr,
+ ROUND (radius + slice_dist * cos (beta) +
+ direction * TICK * sin (beta)),
+ ROUND (radius - slice_dist * sin(beta) +
+ direction * TICK * cos (beta)));
+
+ cairo_new_sub_path (cr);
+
+ if (clockwise)
+ slice = -normalize_angle (alpha - beta);
+ else
+ slice = normalize_angle (beta - alpha);
- gimp_cairo_add_arc (cr, radius, radius, slice_dist,
- alpha, slice);
+ gimp_cairo_add_arc (cr, radius, radius, slice_dist,
+ alpha, slice);
+ }
cairo_set_line_width (cr, 3.0);
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.6);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]