[gimp] Some more text tool cleanup



commit 8e09c536376559974eadabeca34bfb0fcfde3264
Author: Michael Natterer <mitch gimp org>
Date:   Sat Jun 27 21:31:06 2009 +0200

    Some more text tool cleanup
    
    - keep around more local "buffer" variables to improve readability
    - fix all comparisons between coordinates and bounding boxes,
      they were off-by-one on one or both sides.

 app/tools/gimptexttool.c |  108 +++++++++++++++++++++-------------------------
 1 files changed, 49 insertions(+), 59 deletions(-)
---
diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c
index 4c0f93e..82a3190 100644
--- a/app/tools/gimptexttool.c
+++ b/app/tools/gimptexttool.c
@@ -37,7 +37,6 @@
 #include "core/gimplayer-floating-sel.h"
 #include "core/gimpmarshal.h"
 #include "core/gimptoolinfo.h"
-#include "core/gimpundostack.h"
 
 #include "text/gimptext.h"
 #include "text/gimptext-vectors.h"
@@ -466,8 +465,8 @@ gimp_text_tool_button_press (GimpTool            *tool,
 
       text_tool->selecting = FALSE;
 
-      if (coords->x > x1 && coords->x <= x2 &&
-          coords->y > y1 && coords->y <= y2 &&
+      if (coords->x >= x1 && coords->x < x2 &&
+          coords->y >= y1 && coords->y < y2 &&
           ! text_tool->moving)
         {
           text_tool->selecting = TRUE;
@@ -491,8 +490,8 @@ gimp_text_tool_button_press (GimpTool            *tool,
           gdouble   x    = coords->x - gimp_item_get_offset_x (item);
           gdouble   y    = coords->y - gimp_item_get_offset_y (item);
 
-          if (x < 0 || x > item->width ||
-              y < 0 || y > item->height)
+          if (x < 0 || x >= item->width ||
+              y < 0 || y >= item->height)
             {
               gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
 
@@ -511,8 +510,8 @@ gimp_text_tool_button_press (GimpTool            *tool,
       gdouble   x    = coords->x - gimp_item_get_offset_x (item);
       gdouble   y    = coords->y - gimp_item_get_offset_y (item);
 
-      if (x > 0 && x < gimp_item_get_width (item) &&
-          y > 0 && y < gimp_item_get_height (item))
+      if (x >= 0 && x < gimp_item_get_width (item) &&
+          y >= 0 && y < gimp_item_get_height (item))
         {
           /*  did the user click on a text layer?  */
           if (gimp_text_tool_set_drawable (text_tool, drawable, TRUE))
@@ -636,10 +635,13 @@ gimp_text_tool_button_release (GimpTool              *tool,
                 "y2", &y2,
                 NULL);
 
-  if (gtk_text_buffer_get_has_selection (text_tool->text_buffer))
-    gimp_text_tool_clipboard_copy (text_tool, FALSE);
+  if (text_tool->selecting)
+    {
+      if (gtk_text_buffer_get_has_selection (text_tool->text_buffer))
+        gimp_text_tool_clipboard_copy (text_tool, FALSE);
 
-  text_tool->selecting = FALSE;
+      text_tool->selecting = FALSE;
+    }
 
   if (text && text_tool->text == text)
     {
@@ -728,10 +730,9 @@ gimp_text_tool_motion (GimpTool         *tool,
               GtkTextIter start;
               GtkTextIter end;
 
-              gtk_text_buffer_get_iter_at_offset (buffer,
-                                                  &cursor, offset);
-              gtk_text_buffer_get_iter_at_offset (buffer,
-                                                  &selection,
+              gtk_text_buffer_get_iter_at_offset (buffer, &cursor,
+                                                  offset);
+              gtk_text_buffer_get_iter_at_offset (buffer, &selection,
                                                   text_tool->select_start_offset);
 
               if (offset <= text_tool->select_start_offset)
@@ -805,7 +806,6 @@ gimp_text_tool_key_press (GimpTool    *tool,
   GtkTextBuffer *buffer    = text_tool->text_buffer;
   GtkTextIter    cursor;
   GtkTextIter    selection;
-  GtkTextIter   *sel_start;
   gint           x_pos  = -1;
   gboolean       retval = TRUE;
 
@@ -834,11 +834,6 @@ gimp_text_tool_key_press (GimpTool    *tool,
   gtk_text_buffer_get_iter_at_mark (buffer, &selection,
                                     gtk_text_buffer_get_selection_bound (buffer));
 
-  if (kevent->state & GDK_SHIFT_MASK)
-    sel_start = &selection;
-  else
-    sel_start = &cursor;
-
   gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
 
   switch (kevent->keyval)
@@ -899,15 +894,15 @@ gimp_text_tool_cursor_update (GimpTool         *tool,
       gint          x1, y1;
       gint          x2, y2;
 
-      g_object_get (G_OBJECT (tool),
+      g_object_get (tool,
                     "x1", &x1,
                     "y1", &y1,
                     "x2", &x2,
                     "y2", &y2,
                     NULL);
 
-      if (coords->x > x1 && coords->x <= x2 &&
-          coords->y > y1 && coords->y <= y2 &&
+      if (coords->x >= x1 && coords->x < x2 &&
+          coords->y >= y1 && coords->y < y2 &&
           ! text_tool->moving)
         {
           gimp_tool_control_set_cursor          (tool->control, GDK_XTERM);
@@ -941,8 +936,8 @@ gimp_text_tool_get_popup (GimpTool         *tool,
                 "y2", &y2,
                 NULL);
 
-  if (coords->x > x1 && coords->x <= x2 &&
-      coords->y > y1 && coords->y <= y2)
+  if (coords->x >= x1 && coords->x < x2 &&
+      coords->y >= y1 && coords->y < y2)
     {
       if (! text_tool->ui_manager)
         {
@@ -980,7 +975,8 @@ static void
 gimp_text_tool_draw (GimpDrawTool *draw_tool)
 {
   GimpTextTool   *text_tool = GIMP_TEXT_TOOL (draw_tool);
-  GdkRectangle    cliprect;
+  GtkTextBuffer  *buffer    = text_tool->text_buffer;
+  GdkRectangle    clip_rect;
   gint            x1, x2;
   gint            y1, y2;
   gint            logical_off_x = 0;
@@ -988,7 +984,6 @@ gimp_text_tool_draw (GimpDrawTool *draw_tool)
   PangoLayout    *layout;
   PangoRectangle  ink_extents;
   PangoRectangle  logical_extents;
-  GtkTextIter     start;
 
   g_object_set (text_tool,
                 "narrow-mode", TRUE,
@@ -1012,12 +1007,12 @@ gimp_text_tool_draw (GimpDrawTool *draw_tool)
                 "y2", &y2,
                 NULL);
 
-  cliprect.x      = x1;
-  cliprect.width  = x2 - x1;
-  cliprect.y      = y1;
-  cliprect.height = y2 - y1;
+  clip_rect.x      = x1;
+  clip_rect.width  = x2 - x1;
+  clip_rect.y      = y1;
+  clip_rect.height = y2 - y1;
 
-  gimp_draw_tool_set_clip_rect (draw_tool, &cliprect, FALSE);
+  gimp_draw_tool_set_clip_rect (draw_tool, &clip_rect, FALSE);
 
   layout = gimp_text_layout_get_pango_layout (text_tool->layout);
 
@@ -1030,19 +1025,18 @@ gimp_text_tool_draw (GimpDrawTool *draw_tool)
   if (ink_extents.y < 0)
     logical_off_y = -ink_extents.y;
 
-  gtk_text_buffer_get_start_iter (text_tool->text_buffer, &start);
-
-  if (! gtk_text_buffer_get_has_selection (text_tool->text_buffer))
+  if (! gtk_text_buffer_get_has_selection (buffer))
     {
       /* If the text buffer has no selection, draw the text cursor */
 
-      GtkTextBuffer  *buffer = text_tool->text_buffer;
-      gint            cursor_index;
+      GtkTextIter     start;
       GtkTextIter     cursor;
+      gint            cursor_index;
       PangoRectangle  crect;
       gchar          *string;
       gboolean        overwrite_cursor;
 
+      gtk_text_buffer_get_start_iter (buffer, &start);
       gtk_text_buffer_get_iter_at_mark (buffer, &cursor,
                                         gtk_text_buffer_get_insert (buffer));
 
@@ -1195,6 +1189,7 @@ gimp_text_tool_draw_selection (GimpDrawTool *draw_tool,
                                gint          logical_off_y)
 {
   GimpTextTool    *text_tool = GIMP_TEXT_TOOL (draw_tool);
+  GtkTextBuffer   *buffer    = text_tool->text_buffer;
   PangoLayout     *layout;
   PangoLayoutIter *line_iter;
   GtkTextIter      start;
@@ -1203,17 +1198,14 @@ gimp_text_tool_draw_selection (GimpDrawTool *draw_tool,
   gint             min, max;
   gchar           *string;
 
-  gtk_text_buffer_get_selection_bounds (text_tool->text_buffer,
-                                        &sel_start, &sel_end);
-  gtk_text_buffer_get_start_iter (text_tool->text_buffer, &start);
+  gtk_text_buffer_get_selection_bounds (buffer, &sel_start, &sel_end);
+  gtk_text_buffer_get_start_iter (buffer, &start);
 
-  string = gtk_text_buffer_get_text (text_tool->text_buffer,
-                                     &start, &sel_start, FALSE);
+  string = gtk_text_buffer_get_text (buffer, &start, &sel_start, FALSE);
   min = strlen (string);
   g_free (string);
 
-  string = gtk_text_buffer_get_text (text_tool->text_buffer,
-                                     &start, &sel_end, FALSE);
+  string = gtk_text_buffer_get_text (buffer, &start, &sel_end, FALSE);
   max = strlen (string);
   g_free (string);
 
@@ -2282,20 +2274,18 @@ gimp_text_tool_canvas_editor (GimpTextTool *text_tool)
 static gchar *
 gimp_text_tool_canvas_editor_get_text (GimpTextTool *text_tool)
 {
-  GtkTextIter  start, end;
-  GtkTextIter  selstart, selend;
-  gchar       *string;
-  gchar       *fb;
-  gchar       *lb;
+  GtkTextBuffer *buffer = text_tool->text_buffer;
+  GtkTextIter    start, end;
+  GtkTextIter    selstart, selend;
+  gchar         *string;
+  gchar         *fb;
+  gchar         *lb;
 
-  gtk_text_buffer_get_bounds (text_tool->text_buffer, &start, &end);
-  gtk_text_buffer_get_selection_bounds (text_tool->text_buffer,
-                                        &selstart, &selend);
+  gtk_text_buffer_get_bounds (buffer, &start, &end);
+  gtk_text_buffer_get_selection_bounds (buffer, &selstart, &selend);
 
-  fb = gtk_text_buffer_get_text (text_tool->text_buffer,
-                                 &start, &selstart, TRUE);
-  lb = gtk_text_buffer_get_text (text_tool->text_buffer,
-                                 &selstart, &end, TRUE);
+  fb = gtk_text_buffer_get_text (buffer, &start, &selstart, TRUE);
+  lb = gtk_text_buffer_get_text (buffer, &selstart, &end, TRUE);
 
   if (text_tool->preedit_string)
     {
@@ -2825,9 +2815,9 @@ gimp_text_tool_create_vectors (GimpTextTool *text_tool)
 void
 gimp_text_tool_create_vectors_warped (GimpTextTool *text_tool)
 {
-  GimpVectors   *vectors0;
-  GimpVectors   *vectors;
-  gdouble        box_height;
+  GimpVectors *vectors0;
+  GimpVectors *vectors;
+  gdouble      box_height;
 
   g_return_if_fail (GIMP_IS_TEXT_TOOL (text_tool));
 



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