[gimp] app: some cleanup and fixes in GimpToolRectangle
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: some cleanup and fixes in GimpToolRectangle
- Date: Tue, 27 Jun 2017 15:47:35 +0000 (UTC)
commit 94bb1a78c13e16c130377621a85785e826f09e58
Author: Michael Natterer <mitch gimp org>
Date: Tue Jun 27 17:23:58 2017 +0200
app: some cleanup and fixes in GimpToolRectangle
- unset "rect_adjusting" before bailing out on button_release()
- update the integer rectangle when the double properties change
- don't try to show handles with a size of < 3
- remove unused members
- shorten some variable names
app/display/gimptoolrectangle.c | 193 ++++++++++++++++++---------------------
1 files changed, 89 insertions(+), 104 deletions(-)
---
diff --git a/app/display/gimptoolrectangle.c b/app/display/gimptoolrectangle.c
index 8716d82..168b0f7 100644
--- a/app/display/gimptoolrectangle.c
+++ b/app/display/gimptoolrectangle.c
@@ -212,14 +212,6 @@ struct _GimpToolRectanglePrivate
gboolean round_corners;
gboolean corner_radius;
- /* For what scale the handle sizes is calculated. We must cache this
- * so that we can differentiate between when the tool is resumed
- * because of zoom level just has changed or because the highlight
- * has just been updated.
- */
- gdouble scale_x_used_for_handle_size_calculations;
- gdouble scale_y_used_for_handle_size_calculations;
-
/* For saving in case of cancelation. */
gdouble saved_x1;
gdouble saved_y1;
@@ -981,8 +973,15 @@ gimp_tool_rectangle_notify (GObject *object,
if (G_OBJECT_CLASS (parent_class)->notify)
G_OBJECT_CLASS (parent_class)->notify (object, pspec);
- if (! strcmp (pspec->name, "x") &&
- ! PIXEL_FEQUAL (private->x1, private->x))
+ if (! strcmp (pspec->name, "x1") ||
+ ! strcmp (pspec->name, "y1") ||
+ ! strcmp (pspec->name, "x2") ||
+ ! strcmp (pspec->name, "y2"))
+ {
+ gimp_tool_rectangle_update_int_rect (rectangle);
+ }
+ else if (! strcmp (pspec->name, "x") &&
+ ! PIXEL_FEQUAL (private->x1, private->x))
{
gimp_tool_rectangle_synthesize_motion (rectangle,
GIMP_TOOL_RECTANGLE_MOVING,
@@ -1256,8 +1255,7 @@ gimp_tool_rectangle_changed (GimpToolWidget *widget)
{
gimp_canvas_corner_set (private->creating_corners[i],
x1, y1, x2 - x1, y2 - y1,
- private->corner_handle_w,
- private->corner_handle_h,
+ handle_width, handle_height,
private->narrow_mode);
gimp_canvas_item_set_visible (private->creating_corners[i], TRUE);
}
@@ -1265,13 +1263,11 @@ gimp_tool_rectangle_changed (GimpToolWidget *widget)
case GIMP_TOOL_RECTANGLE_RESIZING_TOP:
case GIMP_TOOL_RECTANGLE_RESIZING_BOTTOM:
- handle_width = private->top_and_bottom_handle_w;
- handle_height = private->corner_handle_h;
+ handle_width = private->top_and_bottom_handle_w;
break;
case GIMP_TOOL_RECTANGLE_RESIZING_LEFT:
case GIMP_TOOL_RECTANGLE_RESIZING_RIGHT:
- handle_width = private->corner_handle_w;
handle_height = private->left_and_right_handle_h;
break;
@@ -1279,8 +1275,8 @@ gimp_tool_rectangle_changed (GimpToolWidget *widget)
break;
}
- if (handle_width > 0 &&
- handle_height > 0 &&
+ if (handle_width >= 3 &&
+ handle_height >= 3 &&
private->function >= GIMP_TOOL_RECTANGLE_RESIZING_UPPER_LEFT &&
private->function <= GIMP_TOOL_RECTANGLE_RESIZING_BOTTOM)
{
@@ -1350,8 +1346,6 @@ gimp_tool_rectangle_button_press (GimpToolWidget *widget,
private->x1 = private->x2 = snapped_x;
private->y1 = private->y2 = snapped_y;
- gimp_tool_rectangle_update_handle_sizes (rectangle);
-
/* Created rectangles should not be started in narrow-mode */
private->narrow_mode = FALSE;
@@ -1410,6 +1404,9 @@ gimp_tool_rectangle_button_release (GimpToolWidget *widget,
g_object_ref (rectangle);
+ /* On button release, we are not rubber-banding the rectangle any longer. */
+ private->rect_adjusting = FALSE;
+
gimp_tool_widget_set_snap_offsets (widget, 0, 0, 0, 0);
switch (release_type)
@@ -1452,9 +1449,6 @@ gimp_tool_rectangle_button_release (GimpToolWidget *widget,
private->center_x_on_fixed_center = (private->x1 + private->x2) / 2;
private->center_y_on_fixed_center = (private->y1 + private->y2) / 2;
- /* On button release, we are not rubber-banding the rectangle any longer. */
- private->rect_adjusting = FALSE;
-
gimp_tool_rectangle_update_options (rectangle);
gimp_tool_rectangle_changed (widget);
@@ -2061,12 +2055,6 @@ gimp_tool_rectangle_update_handle_sizes (GimpToolRectangle *rectangle)
MIN_HANDLE_SIZE,
G_MAXINT);
}
-
- /* Keep track of when we need to calculate handle sizes because of a
- * display shell change.
- */
- private->scale_x_used_for_handle_size_calculations = shell->scale_x;
- private->scale_y_used_for_handle_size_calculations = shell->scale_y;
}
static void
@@ -2237,7 +2225,7 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
{
GimpToolRectanglePrivate *private = rectangle->private;
GimpDisplayShell *shell;
- gdouble pub_x1, pub_y1, pub_x2, pub_y2;
+ gdouble x1, y1, x2, y2;
gdouble rect_w, rect_h;
gdouble handle_x = 0;
gdouble handle_y = 0;
@@ -2248,17 +2236,16 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
shell = gimp_tool_widget_get_shell (GIMP_TOOL_WIDGET (rectangle));
- gimp_tool_rectangle_get_public_rect (rectangle,
- &pub_x1, &pub_y1, &pub_x2, &pub_y2);
+ gimp_tool_rectangle_get_public_rect (rectangle, &x1, &y1, &x2, &y2);
- rect_w = pub_x2 - pub_x1;
- rect_h = pub_y2 - pub_y1;
+ rect_w = x2 - x1;
+ rect_h = y2 - y1;
switch (anchor)
{
case GIMP_HANDLE_ANCHOR_NORTH_WEST:
- handle_x = pub_x1;
- handle_y = pub_y1;
+ handle_x = x1;
+ handle_y = y1;
handle_width = private->corner_handle_w;
handle_height = private->corner_handle_h;
@@ -2267,8 +2254,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_SOUTH_EAST:
- handle_x = pub_x2;
- handle_y = pub_y2;
+ handle_x = x2;
+ handle_y = y2;
handle_width = private->corner_handle_w;
handle_height = private->corner_handle_h;
@@ -2277,8 +2264,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_NORTH_EAST:
- handle_x = pub_x2;
- handle_y = pub_y1;
+ handle_x = x2;
+ handle_y = y1;
handle_width = private->corner_handle_w;
handle_height = private->corner_handle_h;
@@ -2287,8 +2274,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_SOUTH_WEST:
- handle_x = pub_x1;
- handle_y = pub_y2;
+ handle_x = x1;
+ handle_y = y2;
handle_width = private->corner_handle_w;
handle_height = private->corner_handle_h;
@@ -2297,8 +2284,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_WEST:
- handle_x = pub_x1;
- handle_y = pub_y1 + rect_h / 2;
+ handle_x = x1;
+ handle_y = y1 + rect_h / 2;
handle_width = private->corner_handle_w;
handle_height = private->left_and_right_handle_h;
@@ -2307,8 +2294,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_EAST:
- handle_x = pub_x2;
- handle_y = pub_y1 + rect_h / 2;
+ handle_x = x2;
+ handle_y = y1 + rect_h / 2;
handle_width = private->corner_handle_w;
handle_height = private->left_and_right_handle_h;
@@ -2317,8 +2304,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_NORTH:
- handle_x = pub_x1 + rect_w / 2;
- handle_y = pub_y1;
+ handle_x = x1 + rect_w / 2;
+ handle_y = y1;
handle_width = private->top_and_bottom_handle_w;
handle_height = private->corner_handle_h;
@@ -2327,8 +2314,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_SOUTH:
- handle_x = pub_x1 + rect_w / 2;
- handle_y = pub_y2;
+ handle_x = x1 + rect_w / 2;
+ handle_y = y2;
handle_width = private->top_and_bottom_handle_w;
handle_height = private->corner_handle_h;
@@ -2337,8 +2324,8 @@ gimp_tool_rectangle_coord_on_handle (GimpToolRectangle *rectangle,
break;
case GIMP_HANDLE_ANCHOR_CENTER:
- handle_x = pub_x1 + rect_w / 2;
- handle_y = pub_y1 + rect_h / 2;
+ handle_x = x1 + rect_w / 2;
+ handle_y = y1 + rect_h / 2;
if (private->narrow_mode)
{
@@ -2411,17 +2398,17 @@ gimp_tool_rectangle_rect_rubber_banding_func (GimpToolRectangle *rectangle)
switch (private->function)
{
- case GIMP_TOOL_RECTANGLE_CREATING:
- case GIMP_TOOL_RECTANGLE_RESIZING_LEFT:
- case GIMP_TOOL_RECTANGLE_RESIZING_RIGHT:
- case GIMP_TOOL_RECTANGLE_RESIZING_TOP:
- case GIMP_TOOL_RECTANGLE_RESIZING_BOTTOM:
- case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_LEFT:
- case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_RIGHT:
- case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_LEFT:
- case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_RIGHT:
- case GIMP_TOOL_RECTANGLE_AUTO_SHRINK:
- return TRUE;
+ case GIMP_TOOL_RECTANGLE_CREATING:
+ case GIMP_TOOL_RECTANGLE_RESIZING_LEFT:
+ case GIMP_TOOL_RECTANGLE_RESIZING_RIGHT:
+ case GIMP_TOOL_RECTANGLE_RESIZING_TOP:
+ case GIMP_TOOL_RECTANGLE_RESIZING_BOTTOM:
+ case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_LEFT:
+ case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_RIGHT:
+ case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_LEFT:
+ case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_RIGHT:
+ case GIMP_TOOL_RECTANGLE_AUTO_SHRINK:
+ return TRUE;
case GIMP_TOOL_RECTANGLE_MOVING:
case GIMP_TOOL_RECTANGLE_DEAD:
@@ -2640,15 +2627,13 @@ gimp_tool_rectangle_setup_snap_offsets (GimpToolRectangle *rectangle,
{
GimpToolWidget *widget = GIMP_TOOL_WIDGET (rectangle);
GimpToolRectanglePrivate *private = rectangle->private;
- gdouble pub_x1, pub_y1;
- gdouble pub_x2, pub_y2;
- gdouble pub_coord_x, pub_coord_y;
+ gdouble x1, y1, x2, y2;
+ gdouble coord_x, coord_y;
- gimp_tool_rectangle_get_public_rect (rectangle,
- &pub_x1, &pub_y1, &pub_x2, &pub_y2);
+ gimp_tool_rectangle_get_public_rect (rectangle, &x1, &y1, &x2, &y2);
gimp_tool_rectangle_adjust_coord (rectangle,
coords->x, coords->y,
- &pub_coord_x, &pub_coord_y);
+ &coord_x, &coord_y);
switch (private->function)
{
@@ -2657,62 +2642,62 @@ gimp_tool_rectangle_setup_snap_offsets (GimpToolRectangle *rectangle,
case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_LEFT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x1 - pub_coord_x,
- pub_y1 - pub_coord_y,
+ x1 - coord_x,
+ y1 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_UPPER_RIGHT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x2 - pub_coord_x,
- pub_y1 - pub_coord_y,
+ x2 - coord_x,
+ y1 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_LEFT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x1 - pub_coord_x,
- pub_y2 - pub_coord_y,
+ x1 - coord_x,
+ y2 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_LOWER_RIGHT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x2 - pub_coord_x,
- pub_y2 - pub_coord_y,
+ x2 - coord_x,
+ y2 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_LEFT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x1 - pub_coord_x, 0,
+ x1 - coord_x, 0,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_RIGHT:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x2 - pub_coord_x, 0,
+ x2 - coord_x, 0,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_TOP:
gimp_tool_widget_set_snap_offsets (widget,
- 0, pub_y1 - pub_coord_y,
+ 0, y1 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_RESIZING_BOTTOM:
gimp_tool_widget_set_snap_offsets (widget,
- 0, pub_y2 - pub_coord_y,
+ 0, y2 - coord_y,
0, 0);
break;
case GIMP_TOOL_RECTANGLE_MOVING:
gimp_tool_widget_set_snap_offsets (widget,
- pub_x1 - pub_coord_x,
- pub_y1 - pub_coord_y,
- pub_x2 - pub_x1,
- pub_y2 - pub_y1);
+ x1 - coord_x,
+ y1 - coord_y,
+ x2 - x1,
+ y2 - y1);
break;
default:
@@ -3751,46 +3736,46 @@ gimp_tool_rectangle_get_constraint (GimpToolRectangle *rectangle)
/**
* gimp_tool_rectangle_get_public_rect:
* @rectangle:
- * @pub_x1:
- * @pub_y1:
- * @pub_x2:
- * @pub_y2:
+ * @x1:
+ * @y1:
+ * @x2:
+ * @y2:
*
* This function returns the rectangle as it appears to be publicly
* (based on integer or double precision-mode).
**/
void
gimp_tool_rectangle_get_public_rect (GimpToolRectangle *rectangle,
- gdouble *pub_x1,
- gdouble *pub_y1,
- gdouble *pub_x2,
- gdouble *pub_y2)
+ gdouble *x1,
+ gdouble *y1,
+ gdouble *x2,
+ gdouble *y2)
{
GimpToolRectanglePrivate *priv;
g_return_if_fail (GIMP_IS_TOOL_RECTANGLE (rectangle));
- g_return_if_fail (pub_x1 != NULL);
- g_return_if_fail (pub_y1 != NULL);
- g_return_if_fail (pub_x2 != NULL);
- g_return_if_fail (pub_y2 != NULL);
+ g_return_if_fail (x1 != NULL);
+ g_return_if_fail (y1 != NULL);
+ g_return_if_fail (x2 != NULL);
+ g_return_if_fail (y2 != NULL);
priv = rectangle->private;
switch (priv->precision)
{
case GIMP_RECTANGLE_PRECISION_INT:
- *pub_x1 = priv->x1_int;
- *pub_y1 = priv->y1_int;
- *pub_x2 = priv->x1_int + priv->width_int;
- *pub_y2 = priv->y1_int + priv->height_int;
+ *x1 = priv->x1_int;
+ *y1 = priv->y1_int;
+ *x2 = priv->x1_int + priv->width_int;
+ *y2 = priv->y1_int + priv->height_int;
break;
case GIMP_RECTANGLE_PRECISION_DOUBLE:
default:
- *pub_x1 = priv->x1;
- *pub_y1 = priv->y1;
- *pub_x2 = priv->x2;
- *pub_y2 = priv->y2;
+ *x1 = priv->x1;
+ *y1 = priv->y1;
+ *x2 = priv->x2;
+ *y2 = priv->y2;
break;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]