[gimp] Use the new item iter API instead of the image APIs in some straightforward places



commit 01c77b18d5f23262886fc6e9a5bf1f46e16f0195
Author: Michael Natterer <mitch gimp org>
Date:   Sat Aug 1 23:07:07 2009 +0200

    Use the new item iter API instead of the image APIs in some straightforward places

 app/core/gimpimage.c                |   63 +++++++++++++++++++++--------------
 app/display/gimpdisplayshell-draw.c |    9 +++--
 app/tools/gimpdrawtool.c            |   11 ++++--
 app/widgets/gimplayertreeview.c     |    9 +++--
 4 files changed, 58 insertions(+), 34 deletions(-)
---
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index 717f78a..841732e 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -1067,30 +1067,31 @@ static void
 gimp_image_size_changed (GimpViewable *viewable)
 {
   GimpImage *image = GIMP_IMAGE (viewable);
+  GList     *all_items;
   GList     *list;
 
   if (GIMP_VIEWABLE_CLASS (parent_class)->size_changed)
     GIMP_VIEWABLE_CLASS (parent_class)->size_changed (viewable);
 
-  gimp_container_foreach (image->layers,
-                          (GFunc) gimp_viewable_size_changed,
-                          NULL);
-  gimp_container_foreach (image->channels,
-                          (GFunc) gimp_viewable_size_changed,
-                          NULL);
-  gimp_container_foreach (image->vectors,
-                          (GFunc) gimp_viewable_size_changed,
-                          NULL);
-
-  for (list = gimp_image_get_layer_iter (image);
-       list;
-       list = g_list_next (list))
+  all_items = gimp_image_get_layer_list (image);
+  for (list = all_items; list; list = g_list_next (list))
     {
       GimpLayerMask *mask = gimp_layer_get_mask (GIMP_LAYER (list->data));
 
+      gimp_viewable_size_changed (GIMP_VIEWABLE (list->data));
+
       if (mask)
         gimp_viewable_size_changed (GIMP_VIEWABLE (mask));
     }
+  g_list_free (all_items);
+
+  all_items = gimp_image_get_channel_list (image);
+  g_list_foreach (all_items, (GFunc) gimp_viewable_size_changed, NULL);
+  g_list_free (all_items);
+
+  all_items = gimp_image_get_vectors_list (image);
+  g_list_foreach (all_items, (GFunc) gimp_viewable_size_changed, NULL);
+  g_list_free (all_items);
 
   gimp_viewable_size_changed (GIMP_VIEWABLE (gimp_image_get_mask (image)));
 
@@ -2542,6 +2543,7 @@ gboolean
 gimp_image_set_tattoo_state (GimpImage  *image,
                              GimpTattoo  val)
 {
+  GList      *all_items;
   GList      *list;
   gboolean    retval = TRUE;
   GimpTattoo  maxval = 0;
@@ -2549,9 +2551,9 @@ gimp_image_set_tattoo_state (GimpImage  *image,
   g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
   /* Check that the layer tattoos don't overlap with channel or vector ones */
-  for (list = gimp_image_get_layer_iter (image);
-       list;
-       list = g_list_next (list))
+  all_items = gimp_image_get_layer_list (image);
+
+  for (list = all_items; list; list = g_list_next (list))
     {
       GimpTattoo ltattoo;
 
@@ -2566,10 +2568,12 @@ gimp_image_set_tattoo_state (GimpImage  *image,
         retval = FALSE; /* Oopps duplicated tattoo in vectors */
     }
 
+  g_list_free (all_items);
+
   /* Now check that the channel and vectors tattoos don't overlap */
-  for (list = gimp_image_get_channel_iter (image);
-       list;
-       list = g_list_next (list))
+  all_items = gimp_image_get_channel_list (image);
+
+  for (list = all_items; list; list = g_list_next (list))
     {
       GimpTattoo ctattoo;
 
@@ -2581,10 +2585,12 @@ gimp_image_set_tattoo_state (GimpImage  *image,
         retval = FALSE; /* Oopps duplicated tattoo in vectors */
     }
 
+  g_list_free (all_items);
+
   /* Find the max tattoo value in the vectors */
-  for (list = gimp_image_get_vectors_iter (image);
-       list;
-       list = g_list_next (list))
+  all_items = gimp_image_get_vectors_list (image);
+
+  for (list = all_items; list; list = g_list_next (list))
     {
       GimpTattoo vtattoo;
 
@@ -2593,6 +2599,8 @@ gimp_image_set_tattoo_state (GimpImage  *image,
         maxval = vtattoo;
     }
 
+  g_list_free (all_items);
+
   if (val < maxval)
     retval = FALSE;
 
@@ -3818,13 +3826,14 @@ gimp_image_pick_correlate_layer (const GimpImage *image,
                                  gint             x,
                                  gint             y)
 {
+  GList *all_layers;
   GList *list;
 
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
-  for (list = gimp_image_get_layer_iter (image);
-       list;
-       list = g_list_next (list))
+  all_layers = gimp_image_get_layer_list (image);
+
+  for (list = all_layers; list; list = g_list_next (list))
     {
       GimpLayer *layer = list->data;
       gint       off_x, off_y;
@@ -3834,10 +3843,14 @@ gimp_image_pick_correlate_layer (const GimpImage *image,
       if (gimp_pickable_get_opacity_at (GIMP_PICKABLE (layer),
                                         x - off_x, y - off_y) > 63)
         {
+          g_list_free (all_layers);
+
           return layer;
         }
     }
 
+  g_list_free (all_layers);
+
   return NULL;
 }
 
diff --git a/app/display/gimpdisplayshell-draw.c b/app/display/gimpdisplayshell-draw.c
index 5c95aa0..a80eb00 100644
--- a/app/display/gimpdisplayshell-draw.c
+++ b/app/display/gimpdisplayshell-draw.c
@@ -534,17 +534,20 @@ gimp_display_shell_draw_vectors (const GimpDisplayShell *shell)
   if (shell->display->image &&
       TRUE /* gimp_display_shell_get_show_vectors (shell) */)
     {
+      GList *all_vectors;
       GList *list;
 
-      for (list = gimp_image_get_vectors_iter (shell->display->image);
-           list;
-           list = list->next)
+      all_vectors = gimp_image_get_vectors_list (shell->display->image);
+
+      for (list = all_vectors; list; list = list->next)
         {
           GimpVectors *vectors = list->data;
 
           if (gimp_item_get_visible (GIMP_ITEM (vectors)))
             gimp_display_shell_draw_vector (shell, vectors);
         }
+
+      g_list_free (all_vectors);
     }
 }
 
diff --git a/app/tools/gimpdrawtool.c b/app/tools/gimpdrawtool.c
index b7427a7..00133a8 100644
--- a/app/tools/gimpdrawtool.c
+++ b/app/tools/gimpdrawtool.c
@@ -1799,6 +1799,7 @@ gimp_draw_tool_on_vectors (GimpDrawTool      *draw_tool,
                            GimpStroke       **ret_stroke,
                            GimpVectors      **ret_vectors)
 {
+  GList *all_vectors;
   GList *list;
 
   if (ret_coords)        *ret_coords         = *coords;
@@ -1808,9 +1809,9 @@ gimp_draw_tool_on_vectors (GimpDrawTool      *draw_tool,
   if (ret_stroke)        *ret_stroke         = NULL;
   if (ret_vectors)       *ret_vectors        = NULL;
 
-  for (list = gimp_image_get_vectors_iter (display->image);
-       list;
-       list = g_list_next (list))
+  all_vectors = gimp_image_get_vectors_list (display->image);
+
+  for (list = all_vectors; list; list = g_list_next (list))
     {
       GimpVectors *vectors = list->data;
 
@@ -1830,10 +1831,14 @@ gimp_draw_tool_on_vectors (GimpDrawTool      *draw_tool,
           if (ret_vectors)
             *ret_vectors = vectors;
 
+          g_list_free (all_vectors);
+
           return TRUE;
         }
     }
 
+  g_list_free (all_vectors);
+
   return FALSE;
 }
 
diff --git a/app/widgets/gimplayertreeview.c b/app/widgets/gimplayertreeview.c
index e413c4b..3fccc65 100644
--- a/app/widgets/gimplayertreeview.c
+++ b/app/widgets/gimplayertreeview.c
@@ -902,11 +902,12 @@ gimp_layer_tree_view_floating_selection_changed (GimpImage         *image,
     }
   else
     {
+      GList *all_layers;
       GList *list;
 
-      for (list = gimp_image_get_layer_iter (image);
-           list;
-           list = g_list_next (list))
+      all_layers = gimp_image_get_layer_list (image);
+
+      for (list = all_layers; list; list = g_list_next (list))
         {
           GimpDrawable *drawable = list->data;
 
@@ -919,6 +920,8 @@ gimp_layer_tree_view_floating_selection_changed (GimpImage         *image,
                                 NULL : layer_view->priv->bold_attrs,
                                 -1);
         }
+
+      g_list_free (all_layers);
     }
 }
 



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