gimp r27212 - in trunk: . app/core



Author: mitch
Date: Fri Oct 10 20:04:03 2008
New Revision: 27212
URL: http://svn.gnome.org/viewvc/gimp?rev=27212&view=rev

Log:
2008-10-10  Michael Natterer  <mitch gimp org>

	* app/core/core-types.h
	* app/core/Makefile.am
	* app/core/gimpdrawablestack.[ch]: new GimpList subclass stub
	which will manage the subgraphs of layers and channels and is also
	the first step towards layer tree.

	* app/core/gimpimage.c (gimp_image_init): keep the layers and
	channels in GimpDrawableStacks instead of plain GimpLists.



Added:
   trunk/app/core/gimpdrawablestack.c
   trunk/app/core/gimpdrawablestack.h
Modified:
   trunk/ChangeLog
   trunk/app/core/Makefile.am
   trunk/app/core/core-types.h
   trunk/app/core/gimpimage.c

Modified: trunk/app/core/Makefile.am
==============================================================================
--- trunk/app/core/Makefile.am	(original)
+++ trunk/app/core/Makefile.am	Fri Oct 10 20:04:03 2008
@@ -156,6 +156,8 @@
 	gimpdrawable-transform.h		\
 	gimpdrawablemodundo.c			\
 	gimpdrawablemodundo.h			\
+	gimpdrawablestack.c			\
+	gimpdrawablestack.h			\
 	gimpdrawableundo.c			\
 	gimpdrawableundo.h			\
 	gimpfloatingselundo.c			\

Modified: trunk/app/core/core-types.h
==============================================================================
--- trunk/app/core/core-types.h	(original)
+++ trunk/app/core/core-types.h	Fri Oct 10 20:04:03 2008
@@ -70,6 +70,7 @@
 typedef struct _GimpContainer       GimpContainer;
 typedef struct _GimpList            GimpList;
 typedef struct _GimpDocumentList    GimpDocumentList;
+typedef struct _GimpDrawableStack   GimpDrawableStack;
 typedef struct _GimpToolPresets     GimpToolPresets;
 
 

Added: trunk/app/core/gimpdrawablestack.c
==============================================================================
--- (empty file)
+++ trunk/app/core/gimpdrawablestack.c	Fri Oct 10 20:04:03 2008
@@ -0,0 +1,107 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
+ *
+ * gimpdrawablestack.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+
+#include "core-types.h"
+
+#include "gimpdrawable.h"
+#include "gimpdrawablestack.h"
+
+
+/*  local function prototypes  */
+
+static void   gimp_drawable_stack_finalize (GObject       *object);
+
+static void   gimp_drawable_stack_add      (GimpContainer *container,
+                                            GimpObject    *object);
+static void   gimp_drawable_stack_remove   (GimpContainer *container,
+                                            GimpObject    *object);
+static void   gimp_drawable_stack_reorder  (GimpContainer *container,
+                                            GimpObject    *object,
+                                            gint           new_index);
+
+
+G_DEFINE_TYPE (GimpDrawableStack, gimp_drawable_stack, GIMP_TYPE_LIST)
+
+#define parent_class gimp_drawable_stack_parent_class
+
+
+static void
+gimp_drawable_stack_class_init (GimpDrawableStackClass *klass)
+{
+  GObjectClass       *object_class    = G_OBJECT_CLASS (klass);
+  GimpContainerClass *container_class = GIMP_CONTAINER_CLASS (klass);
+
+  object_class->finalize   = gimp_drawable_stack_finalize;
+
+  container_class->add     = gimp_drawable_stack_add;
+  container_class->remove  = gimp_drawable_stack_remove;
+  container_class->reorder = gimp_drawable_stack_reorder;
+}
+
+static void
+gimp_drawable_stack_init (GimpDrawableStack *list)
+{
+}
+
+static void
+gimp_drawable_stack_finalize (GObject *object)
+{
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gimp_drawable_stack_add (GimpContainer *container,
+                         GimpObject    *object)
+{
+  GIMP_CONTAINER_CLASS (parent_class)->add (container, object);
+}
+
+static void
+gimp_drawable_stack_remove (GimpContainer *container,
+                            GimpObject    *object)
+{
+  GIMP_CONTAINER_CLASS (parent_class)->remove (container, object);
+}
+
+static void
+gimp_drawable_stack_reorder (GimpContainer *container,
+                             GimpObject    *object,
+                             gint           new_index)
+{
+  GIMP_CONTAINER_CLASS (parent_class)->reorder (container, object, new_index);
+}
+
+GimpContainer *
+gimp_drawable_stack_new (GType drawable_type)
+{
+  g_return_val_if_fail (g_type_is_a (drawable_type, GIMP_TYPE_DRAWABLE), NULL);
+
+  return g_object_new (GIMP_TYPE_DRAWABLE_STACK,
+                       "name",          g_type_name (drawable_type),
+                       "children-type", drawable_type,
+                       "policy",        GIMP_CONTAINER_POLICY_STRONG,
+                       "unique-names",  TRUE,
+                       NULL);
+}

Added: trunk/app/core/gimpdrawablestack.h
==============================================================================
--- (empty file)
+++ trunk/app/core/gimpdrawablestack.h	Fri Oct 10 20:04:03 2008
@@ -0,0 +1,52 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
+ *
+ * gimpdrawablestack.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_DRAWABLE_STACK_H__
+#define __GIMP_DRAWABLE_STACK_H__
+
+#include "core/gimplist.h"
+
+
+#define GIMP_TYPE_DRAWABLE_STACK            (gimp_drawable_stack_get_type ())
+#define GIMP_DRAWABLE_STACK(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DRAWABLE_STACK, GimpDrawableStack))
+#define GIMP_DRAWABLE_STACK_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DRAWABLE_STACK, GimpDrawableStackClass))
+#define GIMP_IS_DRAWABLE_STACK(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DRAWABLE_STACK))
+#define GIMP_IS_DRAWABLE_STACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DRAWABLE_STACK))
+
+
+typedef struct _GimpDrawableStackClass GimpDrawableStackClass;
+
+struct _GimpDrawableStack
+{
+  GimpList  parent_instance;
+};
+
+struct _GimpDrawableStackClass
+{
+  GimpListClass  parent_class;
+};
+
+
+GType           gimp_drawable_stack_get_type (void) G_GNUC_CONST;
+GimpContainer * gimp_drawable_stack_new      (GType  drawable_type);
+
+
+#endif  /*  __GIMP_DRAWABLE_STACK_H__  */

Modified: trunk/app/core/gimpimage.c
==============================================================================
--- trunk/app/core/gimpimage.c	(original)
+++ trunk/app/core/gimpimage.c	Fri Oct 10 20:04:03 2008
@@ -38,6 +38,7 @@
 #include "gimp-parasites.h"
 #include "gimp-utils.h"
 #include "gimpcontext.h"
+#include "gimpdrawablestack.h"
 #include "gimpgrid.h"
 #include "gimpguide.h"
 #include "gimpimage.h"
@@ -631,8 +632,8 @@
   image->grid                  = NULL;
   image->sample_points         = NULL;
 
-  image->layers                = gimp_list_new (GIMP_TYPE_LAYER,   TRUE);
-  image->channels              = gimp_list_new (GIMP_TYPE_CHANNEL, TRUE);
+  image->layers                = gimp_drawable_stack_new (GIMP_TYPE_LAYER);
+  image->channels              = gimp_drawable_stack_new (GIMP_TYPE_CHANNEL);
   image->vectors               = gimp_list_new (GIMP_TYPE_VECTORS, TRUE);
   image->layer_stack           = NULL;
 



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