[gimp] Add some item tree infrastructure that will be needed later
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Add some item tree infrastructure that will be needed later
- Date: Sat, 6 Feb 2010 15:18:35 +0000 (UTC)
commit 804e692c86913130defc569135b4d99a83157eb3
Author: Michael Natterer <mitch gimp org>
Date: Sat Feb 6 16:17:23 2010 +0100
Add some item tree infrastructure that will be needed later
- add gimp_image_get_layer_tree(), channel_tree() and vectors_tree()
- change GimpItem::get_container() to GimpItem::get_tree()
- implement gimp_item_get_container() using gimp_item_get_tree()
app/core/gimpchannel.c | 11 +++++------
app/core/gimpimage.c | 24 ++++++++++++++++++++++++
app/core/gimpimage.h | 4 ++++
app/core/gimpitem.c | 21 ++++++++++++++++++---
app/core/gimpitem.h | 3 ++-
app/core/gimplayer.c | 11 +++++------
app/core/gimplayermask.c | 8 ++++----
app/core/gimpselection.c | 9 ++++-----
app/vectors/gimpvectors.c | 11 +++++------
9 files changed, 71 insertions(+), 31 deletions(-)
---
diff --git a/app/core/gimpchannel.c b/app/core/gimpchannel.c
index 3979d36..7d68e73 100644
--- a/app/core/gimpchannel.c
+++ b/app/core/gimpchannel.c
@@ -76,8 +76,7 @@ static gchar * gimp_channel_get_description (GimpViewable *viewable,
gchar **tooltip);
static gboolean gimp_channel_is_attached (const GimpItem *item);
-static GimpContainer *
- gimp_channel_get_container (GimpItem *item);
+static GimpItemTree * gimp_channel_get_tree (GimpItem *item);
static GimpItem * gimp_channel_duplicate (GimpItem *item,
GType new_type);
static void gimp_channel_convert (GimpItem *item,
@@ -250,7 +249,7 @@ gimp_channel_class_init (GimpChannelClass *klass)
viewable_class->default_stock_id = "gimp-channel";
item_class->is_attached = gimp_channel_is_attached;
- item_class->get_container = gimp_channel_get_container;
+ item_class->get_tree = gimp_channel_get_tree;
item_class->duplicate = gimp_channel_duplicate;
item_class->convert = gimp_channel_convert;
item_class->translate = gimp_channel_translate;
@@ -384,14 +383,14 @@ gimp_channel_is_attached (const GimpItem *item)
GIMP_OBJECT (item)));
}
-static GimpContainer *
-gimp_channel_get_container (GimpItem *item)
+static GimpItemTree *
+gimp_channel_get_tree (GimpItem *item)
{
if (gimp_item_is_attached (item))
{
GimpImage *image = gimp_item_get_image (item);
- return gimp_image_get_channels (image);
+ return gimp_image_get_channel_tree (image);
}
return NULL;
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index 2c017a1..63feaf7 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -2825,6 +2825,30 @@ gimp_image_get_projection (const GimpImage *image)
/* layers / channels / vectors */
+GimpItemTree *
+gimp_image_get_layer_tree (const GimpImage *image)
+{
+ g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
+
+ return GIMP_IMAGE_GET_PRIVATE (image)->layers;
+}
+
+GimpItemTree *
+gimp_image_get_channel_tree (const GimpImage *image)
+{
+ g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
+
+ return GIMP_IMAGE_GET_PRIVATE (image)->channels;
+}
+
+GimpItemTree *
+gimp_image_get_vectors_tree (const GimpImage *image)
+{
+ g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
+
+ return GIMP_IMAGE_GET_PRIVATE (image)->vectors;
+}
+
GimpContainer *
gimp_image_get_layers (const GimpImage *image)
{
diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h
index 9eef21f..a72b4f5 100644
--- a/app/core/gimpimage.h
+++ b/app/core/gimpimage.h
@@ -359,6 +359,10 @@ GimpProjection * gimp_image_get_projection (const GimpImage *image);
/* layers / channels / vectors */
+GimpItemTree * gimp_image_get_layer_tree (const GimpImage *image);
+GimpItemTree * gimp_image_get_channel_tree (const GimpImage *image);
+GimpItemTree * gimp_image_get_vectors_tree (const GimpImage *image);
+
GimpContainer * gimp_image_get_layers (const GimpImage *image);
GimpContainer * gimp_image_get_channels (const GimpImage *image);
GimpContainer * gimp_image_get_vectors (const GimpImage *image);
diff --git a/app/core/gimpitem.c b/app/core/gimpitem.c
index ca7cfb2..3839831 100644
--- a/app/core/gimpitem.c
+++ b/app/core/gimpitem.c
@@ -35,6 +35,7 @@
#include "gimpimage-undo-push.h"
#include "gimpitem.h"
#include "gimpitem-preview.h"
+#include "gimpitemtree.h"
#include "gimplist.h"
#include "gimpmarshal.h"
#include "gimpparasitelist.h"
@@ -180,7 +181,7 @@ gimp_item_class_init (GimpItemClass *klass)
klass->is_attached = NULL;
klass->is_content_locked = gimp_item_real_is_content_locked;
- klass->get_container = NULL;
+ klass->get_tree = NULL;
klass->duplicate = gimp_item_real_duplicate;
klass->convert = gimp_item_real_convert;
klass->rename = gimp_item_real_rename;
@@ -688,10 +689,22 @@ gimp_item_is_attached (const GimpItem *item)
return GIMP_ITEM_GET_CLASS (item)->is_attached (item);
}
+GimpItemTree *
+gimp_item_get_tree (GimpItem *item)
+{
+ g_return_val_if_fail (GIMP_IS_ITEM (item), NULL);
+
+ if (GIMP_ITEM_GET_CLASS (item)->get_tree)
+ return GIMP_ITEM_GET_CLASS (item)->get_tree (item);
+
+ return NULL;
+}
+
GimpContainer *
gimp_item_get_container (GimpItem *item)
{
GimpViewable *parent;
+ GimpItemTree *tree;
g_return_val_if_fail (GIMP_IS_ITEM (item), NULL);
@@ -700,8 +713,10 @@ gimp_item_get_container (GimpItem *item)
if (parent)
return gimp_viewable_get_children (GIMP_VIEWABLE (parent));
- if (GIMP_ITEM_GET_CLASS (item)->get_container)
- return GIMP_ITEM_GET_CLASS (item)->get_container (item);
+ tree = gimp_item_get_tree (item);
+
+ if (tree)
+ return tree->container;
return NULL;
}
diff --git a/app/core/gimpitem.h b/app/core/gimpitem.h
index 082498d..9810d1c 100644
--- a/app/core/gimpitem.h
+++ b/app/core/gimpitem.h
@@ -70,7 +70,7 @@ struct _GimpItemClass
/* virtual functions */
gboolean (* is_attached) (const GimpItem *item);
gboolean (* is_content_locked) (const GimpItem *item);
- GimpContainer * (* get_container) (GimpItem *item);
+ GimpItemTree * (* get_tree) (GimpItem *item);
GimpItem * (* duplicate) (GimpItem *item,
GType new_type);
void (* convert) (GimpItem *item,
@@ -143,6 +143,7 @@ gboolean gimp_item_is_removed (const GimpItem *item);
gboolean gimp_item_is_attached (const GimpItem *item);
+GimpItemTree * gimp_item_get_tree (GimpItem *item);
GimpContainer * gimp_item_get_container (GimpItem *item);
GList * gimp_item_get_container_iter (GimpItem *item);
gint gimp_item_get_index (GimpItem *item);
diff --git a/app/core/gimplayer.c b/app/core/gimplayer.c
index 04a6d6a..62d3bfd 100644
--- a/app/core/gimplayer.c
+++ b/app/core/gimplayer.c
@@ -97,8 +97,7 @@ static gchar * gimp_layer_get_description (GimpViewable *viewable,
static void gimp_layer_removed (GimpItem *item);
static gboolean gimp_layer_is_attached (const GimpItem *item);
-static GimpContainer *
- gimp_layer_get_container (GimpItem *item);
+static GimpItemTree * gimp_layer_get_tree (GimpItem *item);
static GimpItem * gimp_layer_duplicate (GimpItem *item,
GType new_type);
static void gimp_layer_convert (GimpItem *item,
@@ -244,7 +243,7 @@ gimp_layer_class_init (GimpLayerClass *klass)
item_class->removed = gimp_layer_removed;
item_class->is_attached = gimp_layer_is_attached;
- item_class->get_container = gimp_layer_get_container;
+ item_class->get_tree = gimp_layer_get_tree;
item_class->duplicate = gimp_layer_duplicate;
item_class->convert = gimp_layer_convert;
item_class->rename = gimp_layer_rename;
@@ -488,14 +487,14 @@ gimp_layer_is_attached (const GimpItem *item)
GIMP_OBJECT (item)));
}
-static GimpContainer *
-gimp_layer_get_container (GimpItem *item)
+static GimpItemTree *
+gimp_layer_get_tree (GimpItem *item)
{
if (gimp_item_is_attached (item))
{
GimpImage *image = gimp_item_get_image (item);
- return gimp_image_get_layers (image);
+ return gimp_image_get_layer_tree (image);
}
return NULL;
diff --git a/app/core/gimplayermask.c b/app/core/gimplayermask.c
index 70dd47c..afc3ad9 100644
--- a/app/core/gimplayermask.c
+++ b/app/core/gimplayermask.c
@@ -47,7 +47,7 @@ enum
static gboolean gimp_layer_mask_is_attached (const GimpItem *item);
static gboolean gimp_layer_mask_is_content_locked (const GimpItem *item);
-static GimpContainer * gimp_layer_mask_get_container (GimpItem *item);
+static GimpItemTree * gimp_layer_mask_get_tree (GimpItem *item);
static GimpItem * gimp_layer_mask_duplicate (GimpItem *item,
GType new_type);
static gboolean gimp_layer_mask_rename (GimpItem *item,
@@ -104,7 +104,7 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass)
item_class->is_attached = gimp_layer_mask_is_attached;
item_class->is_content_locked = gimp_layer_mask_is_content_locked;
- item_class->get_container = gimp_layer_mask_get_container;
+ item_class->get_tree = gimp_layer_mask_get_tree;
item_class->duplicate = gimp_layer_mask_duplicate;
item_class->rename = gimp_layer_mask_rename;
item_class->translate_desc = _("Move Layer Mask");
@@ -143,8 +143,8 @@ gimp_layer_mask_is_attached (const GimpItem *item)
gimp_item_is_attached (GIMP_ITEM (layer)));
}
-static GimpContainer *
-gimp_layer_mask_get_container (GimpItem *item)
+static GimpItemTree *
+gimp_layer_mask_get_tree (GimpItem *item)
{
return NULL;
}
diff --git a/app/core/gimpselection.c b/app/core/gimpselection.c
index 4853893..ca492c5 100644
--- a/app/core/gimpselection.c
+++ b/app/core/gimpselection.c
@@ -46,8 +46,7 @@
static gboolean gimp_selection_is_attached (const GimpItem *item);
-static GimpContainer *
- gimp_selection_get_container (GimpItem *item);
+static GimpItemTree * gimp_selection_get_tree (GimpItem *item);
static void gimp_selection_translate (GimpItem *item,
gint offset_x,
gint offset_y,
@@ -145,7 +144,7 @@ gimp_selection_class_init (GimpSelectionClass *klass)
viewable_class->default_stock_id = "gimp-selection";
item_class->is_attached = gimp_selection_is_attached;
- item_class->get_container = gimp_selection_get_container;
+ item_class->get_tree = gimp_selection_get_tree;
item_class->translate = gimp_selection_translate;
item_class->scale = gimp_selection_scale;
item_class->resize = gimp_selection_resize;
@@ -193,8 +192,8 @@ gimp_selection_is_attached (const GimpItem *item)
GIMP_CHANNEL (item));
}
-static GimpContainer *
-gimp_selection_get_container (GimpItem *item)
+static GimpItemTree *
+gimp_selection_get_tree (GimpItem *item)
{
return NULL;
}
diff --git a/app/vectors/gimpvectors.c b/app/vectors/gimpvectors.c
index dec996d..e0d3aea 100644
--- a/app/vectors/gimpvectors.c
+++ b/app/vectors/gimpvectors.c
@@ -64,8 +64,7 @@ static gint64 gimp_vectors_get_memsize (GimpObject *object,
gint64 *gui_size);
static gboolean gimp_vectors_is_attached (const GimpItem *item);
-static GimpContainer *
- gimp_vectors_get_container (GimpItem *item);
+static GimpItemTree * gimp_vectors_get_tree (GimpItem *item);
static GimpItem * gimp_vectors_duplicate (GimpItem *item,
GType new_type);
static void gimp_vectors_convert (GimpItem *item,
@@ -182,7 +181,7 @@ gimp_vectors_class_init (GimpVectorsClass *klass)
viewable_class->default_stock_id = "gimp-path";
item_class->is_attached = gimp_vectors_is_attached;
- item_class->get_container = gimp_vectors_get_container;
+ item_class->get_tree = gimp_vectors_get_tree;
item_class->duplicate = gimp_vectors_duplicate;
item_class->convert = gimp_vectors_convert;
item_class->translate = gimp_vectors_translate;
@@ -275,14 +274,14 @@ gimp_vectors_is_attached (const GimpItem *item)
GIMP_OBJECT (item)));
}
-static GimpContainer *
-gimp_vectors_get_container (GimpItem *item)
+static GimpItemTree *
+gimp_vectors_get_tree (GimpItem *item)
{
if (gimp_item_is_attached (item))
{
GimpImage *image = gimp_item_get_image (item);
- return gimp_image_get_vectors (image);
+ return gimp_image_get_vectors_tree (image);
}
return NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]