[gegl] transform-core.c: finish converting to tracking pixel centers



commit f5b269e4229f9db677959149c69dccb32e7ed539
Author: Nicolas Robidoux <nrobidoux git gnome org>
Date:   Wed Dec 5 11:43:43 2012 -0500

    transform-core.c: finish converting to tracking pixel centers

 operations/transform/transform-core.c |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)
---
diff --git a/operations/transform/transform-core.c b/operations/transform/transform-core.c
index 8a9d55a..52d15e8 100644
--- a/operations/transform/transform-core.c
+++ b/operations/transform/transform-core.c
@@ -522,7 +522,7 @@ gegl_transform_get_bounding_box (GeglOperation *op)
   have_points [0] = in_rect.x + (gdouble) 0.5;
   have_points [1] = in_rect.y + (gdouble) 0.5;
 
-  have_points [2] = have_points [0] + (in_rect.width - (gint) 1);
+  have_points [2] = have_points [0] + (in_rect.width  - (gint) 1);
   have_points [3] = have_points [1];
 
   have_points [4] = have_points [2];
@@ -609,14 +609,17 @@ gegl_transform_get_required_for_output (GeglOperation       *op,
       gegl_matrix3_is_identity (&inverse))
     return requested_rect;
 
-  need_points [0] = requested_rect.x;
-  need_points [1] = requested_rect.y;
+  /*
+   * Convert indices to absolute positions:
+   */
+  need_points [0] = requested_rect.x + (gdouble) 0.5;
+  need_points [1] = requested_rect.y + (gdouble) 0.5;
 
-  need_points [2] = need_points [0] + requested_rect.width;
+  need_points [2] = need_points [0] + (requested_rect.width  - (gint) 1);
   need_points [3] = need_points [1];
 
   need_points [4] = need_points [2];
-  need_points [5] = need_points [3] + requested_rect.height;
+  need_points [5] = need_points [3] + (requested_rect.height - (gint) 1);
 
   need_points [6] = need_points [0];
   need_points [7] = need_points [5];
@@ -625,10 +628,11 @@ gegl_transform_get_required_for_output (GeglOperation       *op,
     gegl_matrix3_transform_point (&inverse,
                                   need_points + i,
                                   need_points + i + 1);
+
   gegl_transform_bounding_box (need_points, 4, &need_rect);
 
-  need_rect.x      += context_rect.x;
-  need_rect.y      += context_rect.y;
+  need_rect.x += context_rect.x;
+  need_rect.y += context_rect.y;
   /*
    * One of the pixels of the width (resp. height) has to be
    * already in the rectangle; It does not need to be counted
@@ -682,14 +686,17 @@ gegl_transform_get_invalidated_by_change (GeglOperation       *op,
   region.width  += context_rect.width  - (gint) 1;
   region.height += context_rect.height - (gint) 1;
 
-  affected_points [0] = region.x;
-  affected_points [1] = region.y;
+  /*
+   * Convert indices to absolute positions:
+   */
+  affected_points [0] = region.x + (gdouble) 0.5;
+  affected_points [1] = region.y + (gdouble) 0.5;
 
-  affected_points [2] = affected_points [0] + region.width;
+  affected_points [2] = affected_points [0] + ( region.width  - (gint) 1);
   affected_points [3] = affected_points [1];
 
   affected_points [4] = affected_points [2];
-  affected_points [5] = affected_points [3] + region.height;
+  affected_points [5] = affected_points [3] + ( region.height - (gint) 1);
 
   affected_points [6] = affected_points [0];
   affected_points [7] = affected_points [5];



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]