[gimp] Move get_item_by_name() from GimpItemStack to GimpItemTree



commit 217d80bb7889c00f98d7d18ab024ba01266f343b
Author: Michael Natterer <mitch gimp org>
Date:   Sun Feb 7 16:34:44 2010 +0100

    Move get_item_by_name() from GimpItemStack to GimpItemTree
    
    and turn its code into a simple hash table lookup.

 app/core/gimpimage.c     |   18 ++++++------
 app/core/gimpitemstack.c |   31 --------------------
 app/core/gimpitemstack.h |    2 -
 app/core/gimpitemtree.c  |   11 +++++++
 app/core/gimpitemtree.h  |   69 ++++++++++++++++++++++++----------------------
 5 files changed, 56 insertions(+), 75 deletions(-)
---
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index a270fa9..1c39687 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -3226,42 +3226,42 @@ GimpLayer *
 gimp_image_get_layer_by_name (const GimpImage *image,
                               const gchar     *name)
 {
-  GimpItemStack *stack;
+  GimpItemTree *tree;
 
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
   g_return_val_if_fail (name != NULL, NULL);
 
-  stack = GIMP_ITEM_STACK (gimp_image_get_layers (image));
+  tree = gimp_image_get_layer_tree (image);
 
-  return GIMP_LAYER (gimp_item_stack_get_item_by_name (stack, name));
+  return GIMP_LAYER (gimp_item_tree_get_item_by_name (tree, name));
 }
 
 GimpChannel *
 gimp_image_get_channel_by_name (const GimpImage *image,
                                 const gchar     *name)
 {
-  GimpItemStack *stack;
+  GimpItemTree *tree;
 
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
   g_return_val_if_fail (name != NULL, NULL);
 
-  stack = GIMP_ITEM_STACK (gimp_image_get_channels (image));
+  tree = gimp_image_get_channel_tree (image);
 
-  return GIMP_CHANNEL (gimp_item_stack_get_item_by_name (stack, name));
+  return GIMP_CHANNEL (gimp_item_tree_get_item_by_name (tree, name));
 }
 
 GimpVectors *
 gimp_image_get_vectors_by_name (const GimpImage *image,
                                 const gchar     *name)
 {
-  GimpItemStack *stack;
+  GimpItemTree *tree;
 
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
   g_return_val_if_fail (name != NULL, NULL);
 
-  stack = GIMP_ITEM_STACK (gimp_image_get_vectors (image));
+  tree = gimp_image_get_vectors_tree (image);
 
-  return GIMP_VECTORS (gimp_item_stack_get_item_by_name (stack, name));
+  return GIMP_VECTORS (gimp_item_tree_get_item_by_name (tree, name));
 }
 
 gboolean
diff --git a/app/core/gimpitemstack.c b/app/core/gimpitemstack.c
index 38d40f1..0a3cec4 100644
--- a/app/core/gimpitemstack.c
+++ b/app/core/gimpitemstack.c
@@ -234,37 +234,6 @@ gimp_item_stack_get_item_by_tattoo (GimpItemStack *stack,
 }
 
 GimpItem *
-gimp_item_stack_get_item_by_name (GimpItemStack *stack,
-                                  const gchar   *name)
-{
-  GList *list;
-
-  g_return_val_if_fail (GIMP_IS_ITEM_STACK (stack), NULL);
-
-  for (list = GIMP_LIST (stack)->list; list; list = g_list_next (list))
-    {
-      GimpItem      *item = list->data;
-      GimpContainer *children;
-
-      if (! strcmp (gimp_object_get_name (item), name))
-        return item;
-
-      children = gimp_viewable_get_children (GIMP_VIEWABLE (item));
-
-      if (children)
-        {
-          item = gimp_item_stack_get_item_by_name (GIMP_ITEM_STACK (children),
-                                                   name);
-
-          if (item)
-            return item;
-        }
-    }
-
-  return NULL;
-}
-
-GimpItem *
 gimp_item_stack_get_parent_by_path (GimpItemStack *stack,
                                     GList         *path,
                                     gint          *index)
diff --git a/app/core/gimpitemstack.h b/app/core/gimpitemstack.h
index 339d9b4..f86aa45 100644
--- a/app/core/gimpitemstack.h
+++ b/app/core/gimpitemstack.h
@@ -53,8 +53,6 @@ GList         * gimp_item_stack_get_item_iter       (GimpItemStack *stack);
 GList         * gimp_item_stack_get_item_list       (GimpItemStack *stack);
 GimpItem      * gimp_item_stack_get_item_by_tattoo  (GimpItemStack *stack,
                                                      GimpTattoo     tattoo);
-GimpItem      * gimp_item_stack_get_item_by_name    (GimpItemStack *stack,
-                                                     const gchar   *name);
 GimpItem      * gimp_item_stack_get_parent_by_path  (GimpItemStack *stack,
                                                      GList         *path,
                                                      gint          *index);
diff --git a/app/core/gimpitemtree.c b/app/core/gimpitemtree.c
index 360c4d5..07e8460 100644
--- a/app/core/gimpitemtree.c
+++ b/app/core/gimpitemtree.c
@@ -314,6 +314,17 @@ gimp_item_tree_set_active_item (GimpItemTree *tree,
 }
 
 GimpItem *
+gimp_item_tree_get_item_by_name (GimpItemTree *tree,
+                                 const gchar  *name)
+{
+  g_return_val_if_fail (GIMP_IS_ITEM_TREE (tree), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  return g_hash_table_lookup (GIMP_ITEM_TREE_GET_PRIVATE (tree)->name_hash,
+                              name);
+}
+
+GimpItem *
 gimp_item_tree_get_insert_pos (GimpItemTree *tree,
                                GimpItem     *parent,
                                gint         *position)
diff --git a/app/core/gimpitemtree.h b/app/core/gimpitemtree.h
index 4a3cdc2..0eecfbe 100644
--- a/app/core/gimpitemtree.h
+++ b/app/core/gimpitemtree.h
@@ -47,39 +47,42 @@ struct _GimpItemTreeClass
 };
 
 
-GType          gimp_item_tree_get_type        (void) G_GNUC_CONST;
-GimpItemTree * gimp_item_tree_new             (GimpImage    *image,
-                                               GType         container_type,
-                                               GType         item_type);
-
-GimpItem     * gimp_item_tree_get_active_item (GimpItemTree *tree);
-void           gimp_item_tree_set_active_item (GimpItemTree *tree,
-                                               GimpItem     *item);
-
-GimpItem     * gimp_item_tree_get_insert_pos  (GimpItemTree *tree,
-                                               GimpItem     *parent,
-                                               gint         *position);
-
-void           gimp_item_tree_add_item        (GimpItemTree *tree,
-                                               GimpItem     *item,
-                                               GimpItem     *parent,
-                                               gint          position);
-GimpItem     * gimp_item_tree_remove_item     (GimpItemTree *tree,
-                                               GimpItem     *item,
-                                               GimpItem     *new_active);
-
-gboolean       gimp_item_tree_reorder_item    (GimpItemTree *tree,
-                                               GimpItem     *item,
-                                               GimpItem     *new_parent,
-                                               gint          new_index,
-                                               gboolean      push_undo,
-                                               const gchar  *undo_desc);
-
-void           gimp_item_tree_rename_item     (GimpItemTree *tree,
-                                               GimpItem     *item,
-                                               const gchar  *new_name,
-                                               gboolean      push_undo,
-                                               const gchar  *undo_desc);
+GType          gimp_item_tree_get_type         (void) G_GNUC_CONST;
+GimpItemTree * gimp_item_tree_new              (GimpImage    *image,
+                                                GType         container_type,
+                                                GType         item_type);
+
+GimpItem     * gimp_item_tree_get_active_item  (GimpItemTree *tree);
+void           gimp_item_tree_set_active_item  (GimpItemTree *tree,
+                                                GimpItem     *item);
+
+GimpItem     * gimp_item_tree_get_item_by_name (GimpItemTree *tree,
+                                                const gchar  *name);
+
+GimpItem     * gimp_item_tree_get_insert_pos   (GimpItemTree *tree,
+                                                GimpItem     *parent,
+                                                gint         *position);
+
+void           gimp_item_tree_add_item         (GimpItemTree *tree,
+                                                GimpItem     *item,
+                                                GimpItem     *parent,
+                                                gint          position);
+GimpItem     * gimp_item_tree_remove_item      (GimpItemTree *tree,
+                                                GimpItem     *item,
+                                                GimpItem     *new_active);
+
+gboolean       gimp_item_tree_reorder_item     (GimpItemTree *tree,
+                                                GimpItem     *item,
+                                                GimpItem     *new_parent,
+                                                gint          new_index,
+                                                gboolean      push_undo,
+                                                const gchar  *undo_desc);
+
+void           gimp_item_tree_rename_item      (GimpItemTree *tree,
+                                                GimpItem     *item,
+                                                const gchar  *new_name,
+                                                gboolean      push_undo,
+                                                const gchar  *undo_desc);
 
 
 #endif  /*  __GIMP_ITEM_TREE_H__  */



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