[gimp/gimp-2-10] app: in GimpToolCompass, add visual distinction between angle lines
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: in GimpToolCompass, add visual distinction between angle lines
- Date: Mon, 16 Jul 2018 06:19:21 +0000 (UTC)
commit 7ab213d9183109359c2afa3239cab465dec19f2a
Author: Ell <ell_se yahoo com>
Date: Mon Jul 16 02:13:26 2018 -0400
app: in GimpToolCompass, add visual distinction between angle lines
When using a GimpToolCompass in 3-point mode, add a small gap after
the angle arc to the line corresponding to the "second" non-origin
point, so that it's visually distinguishable from the line
corresponding to the "first" point. This has significance for the
measure tool, since it determines the direction of the rotation
when straightening the image (the first point is rotated toward the
second point.)
(cherry picked from commit 0f03f9e9f5ed2a39359f3de67b9ff7075850d835)
app/display/gimptoolcompass.c | 74 ++++++++++++++++++++++++++++++++-----------
1 file changed, 56 insertions(+), 18 deletions(-)
---
diff --git a/app/display/gimptoolcompass.c b/app/display/gimptoolcompass.c
index 1eb6095d56..f1cba0d312 100644
--- a/app/display/gimptoolcompass.c
+++ b/app/display/gimptoolcompass.c
@@ -50,6 +50,7 @@
#define ARC_RADIUS 30
+#define ARC_GAP (ARC_RADIUS / 2)
#define EPSILON 1e-6
@@ -438,12 +439,14 @@ gimp_tool_compass_get_property (GObject *object,
static void
gimp_tool_compass_changed (GimpToolWidget *widget)
{
- GimpToolCompass *compass = GIMP_TOOL_COMPASS (widget);
- GimpToolCompassPrivate *private = compass->private;
- GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget);
+ GimpToolCompass *compass = GIMP_TOOL_COMPASS (widget);
+ GimpToolCompassPrivate *private = compass->private;
+ GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget);
gdouble angle1;
gdouble angle2;
- gint draw_arc = 0;
+ gint draw_arc = 0;
+ gboolean draw_arc_line = FALSE;
+ gdouble arc_line_display_length;
gdouble arc_line_length;
gimp_tool_compass_update_angle (compass, private->orientation, FALSE);
@@ -468,20 +471,55 @@ gimp_tool_compass_changed (GimpToolWidget *widget)
draw_arc++;
}
- gimp_canvas_line_set (private->line2,
- private->x[0],
- private->y[0],
- private->x[2],
- private->y[2]);
- gimp_canvas_item_set_visible (private->line2, private->n_points > 2);
- if (private->n_points > 2 &&
- gimp_canvas_item_transform_distance (private->line2,
- private->x[0],
- private->y[0],
- private->x[2],
- private->y[2]) > ARC_RADIUS)
+
+ arc_line_display_length = ARC_RADIUS +
+ (GIMP_CANVAS_HANDLE_SIZE_CROSS >> 1) +
+ ARC_GAP;
+ arc_line_length = arc_line_display_length /
+ hypot (private->radius2.x * shell->scale_x,
+ private->radius2.y * shell->scale_y);
+
+ if (private->n_points > 2)
{
- draw_arc++;
+ gdouble length = gimp_canvas_item_transform_distance (private->line2,
+ private->x[0],
+ private->y[0],
+ private->x[2],
+ private->y[2]);
+
+ if (length > ARC_RADIUS)
+ {
+ draw_arc++;
+ draw_arc_line = TRUE;
+
+ if (length > arc_line_display_length)
+ {
+ gimp_canvas_line_set (
+ private->line2,
+ private->x[0] + private->radius2.x * arc_line_length,
+ private->y[0] + private->radius2.y * arc_line_length,
+ private->x[2],
+ private->y[2]);
+ gimp_canvas_item_set_visible (private->line2, TRUE);
+ }
+ else
+ {
+ gimp_canvas_item_set_visible (private->line2, FALSE);
+ }
+ }
+ else
+ {
+ gimp_canvas_line_set (private->line2,
+ private->x[0],
+ private->y[0],
+ private->x[2],
+ private->y[2]);
+ gimp_canvas_item_set_visible (private->line2, TRUE);
+ }
+ }
+ else
+ {
+ gimp_canvas_item_set_visible (private->line2, FALSE);
}
gimp_canvas_handle_set_position (private->arc,
@@ -502,7 +540,7 @@ gimp_tool_compass_changed (GimpToolWidget *widget)
private->x[0] + private->radius2.x * arc_line_length,
private->y[0] + private->radius2.y * arc_line_length);
gimp_canvas_item_set_visible (private->arc_line,
- private->n_points == 2 &&
+ (private->n_points == 2 || draw_arc_line) &&
fabs (angle2) > EPSILON);
gimp_canvas_handle_set_position (private->handles[0],
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]