[gimp] app: add GimpToolCompass::effective-orientation property
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add GimpToolCompass::effective-orientation property
- Date: Mon, 4 Feb 2019 21:53:20 +0000 (UTC)
commit 40c091317865feac875dd935b2496f4eadcfb8bc
Author: Ell <ell_se yahoo com>
Date: Mon Feb 4 09:40:15 2019 -0500
app: add GimpToolCompass::effective-orientation property
In GimpToolCompass, add a read-only "effective-orientation"
property, which returns the actual orientation of the compass; in
particular, if the "orientation" property is set to AUTO,
"effective-orientation" returns HORIZONTAL or VERTICAL, depending
on the current compass direction. In 3-point mode, the property
always returns AUTO.
app/display/gimptoolcompass.c | 52 ++++++++++++++++++++++++++++++++-----------
1 file changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/app/display/gimptoolcompass.c b/app/display/gimptoolcompass.c
index 28e7d43b54..472d57a6e4 100644
--- a/app/display/gimptoolcompass.c
+++ b/app/display/gimptoolcompass.c
@@ -77,7 +77,8 @@ enum
PROP_X3,
PROP_Y3,
PROP_PIXEL_ANGLE,
- PROP_UNIT_ANGLE
+ PROP_UNIT_ANGLE,
+ PROP_EFFECTIVE_ORIENTATION
};
enum
@@ -98,6 +99,7 @@ struct _GimpToolCompassPrivate
gdouble display_angle;
gdouble pixel_angle;
gdouble unit_angle;
+ GimpCompassOrientation effective_orientation;
CompassFunction function;
gdouble mouse_x;
@@ -274,6 +276,12 @@ gimp_tool_compass_class_init (GimpToolCompassClass *klass)
g_param_spec_double ("unit-angle", NULL, NULL,
-G_PI, G_PI, 0.0,
GIMP_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_EFFECTIVE_ORIENTATION,
+ g_param_spec_enum ("effective-orientation", NULL, NULL,
+ GIMP_TYPE_COMPASS_ORIENTATION,
+ GIMP_COMPASS_ORIENTATION_AUTO,
+ GIMP_PARAM_READABLE));
}
static void
@@ -362,6 +370,9 @@ gimp_tool_compass_set_property (GObject *object,
switch (property_id)
{
+ case PROP_ORIENTATION:
+ private->orientation = g_value_get_enum (value);
+ break;
case PROP_N_POINTS:
private->n_points = g_value_get_int (value);
break;
@@ -383,9 +394,6 @@ gimp_tool_compass_set_property (GObject *object,
case PROP_Y3:
private->y[2] = g_value_get_int (value);
break;
- case PROP_ORIENTATION:
- private->orientation = g_value_get_enum (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -404,6 +412,9 @@ gimp_tool_compass_get_property (GObject *object,
switch (property_id)
{
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, private->orientation);
+ break;
case PROP_N_POINTS:
g_value_set_int (value, private->n_points);
break;
@@ -425,15 +436,15 @@ gimp_tool_compass_get_property (GObject *object,
case PROP_Y3:
g_value_set_int (value, private->y[2]);
break;
- case PROP_ORIENTATION:
- g_value_set_enum (value, private->orientation);
- break;
case PROP_PIXEL_ANGLE:
g_value_set_double (value, private->pixel_angle);
break;
case PROP_UNIT_ANGLE:
g_value_set_double (value, private->unit_angle);
break;
+ case PROP_EFFECTIVE_ORIENTATION:
+ g_value_set_enum (value, private->effective_orientation);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1086,6 +1097,8 @@ gimp_tool_compass_update_angle (GimpToolCompass *compass,
if (private->n_points == 3)
{
+ orientation = GIMP_COMPASS_ORIENTATION_AUTO;
+
private->radius2.x = private->x[2] - private->x[0];
private->radius2.y = private->y[2] - private->y[0];
}
@@ -1144,14 +1157,20 @@ gimp_tool_compass_update_angle (GimpToolCompass *compass,
return;
}
- else if (orientation == GIMP_COMPASS_ORIENTATION_AUTO &&
- fabs (private->display_angle) > G_PI / 4.0 + EPSILON)
+ else if (orientation == GIMP_COMPASS_ORIENTATION_AUTO)
{
- gimp_tool_compass_update_angle (compass,
- GIMP_COMPASS_ORIENTATION_VERTICAL,
- FALSE);
+ if (fabs (private->display_angle) <= G_PI / 4.0 + EPSILON)
+ {
+ orientation = GIMP_COMPASS_ORIENTATION_HORIZONTAL;
+ }
+ else
+ {
+ gimp_tool_compass_update_angle (compass,
+ GIMP_COMPASS_ORIENTATION_VERTICAL,
+ FALSE);
- return;
+ return;
+ }
}
}
@@ -1168,6 +1187,13 @@ gimp_tool_compass_update_angle (GimpToolCompass *compass,
g_object_notify (G_OBJECT (compass), "unit-angle");
}
+
+ if (orientation != private->effective_orientation)
+ {
+ private->effective_orientation = orientation;
+
+ g_object_notify (G_OBJECT (compass), "effective-orientation");
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]