[libchamplain] Use our own copy of ClutterGroup



commit 5c6ff17e1a4a2ccc1b4681414d6dbdef06642a7c
Author: JiÅ?í Techet <techet gmail com>
Date:   Sat Feb 12 11:18:02 2011 +0100

    Use our own copy of ClutterGroup
    
    ChamplainGroup is in principle ClutterGroup which doesn't sort
    actors by depth. This speeds up addition and removal of
    markers in libchamplain considerably.

 champlain/Makefile.am              |    8 +-
 champlain/champlain-group.c        |  472 ++++++++++++++++++++++++++++++++++++
 champlain/champlain-group.h        |  113 +++++++++
 champlain/champlain-marker-layer.c |   18 +-
 docs/reference/Makefile.am         |    2 +-
 5 files changed, 601 insertions(+), 12 deletions(-)
---
diff --git a/champlain/Makefile.am b/champlain/Makefile.am
index 9c0b284..ea44410 100644
--- a/champlain/Makefile.am
+++ b/champlain/Makefile.am
@@ -43,6 +43,7 @@ libchamplain_headers_public = 				\
 
 libchamplain_headers_private =	\
 	$(srcdir)/champlain-debug.h	\
+	$(srcdir)/champlain-group.h	\
 	$(srcdir)/champlain-private.h
 
 
@@ -56,8 +57,8 @@ libchamplain_sources =					\
 	$(srcdir)/champlain-debug.c 			\
 	$(srcdir)/champlain-view.c 			\
 	$(srcdir)/champlain-layer.c 			\
-	$(srcdir)/champlain-marker-layer.c 			\
-	$(srcdir)/champlain-marker.c 		\
+	$(srcdir)/champlain-marker-layer.c		\
+	$(srcdir)/champlain-marker.c	 		\
 	$(srcdir)/champlain-label.c 			\
 	$(srcdir)/champlain-scale.c			\
 	$(srcdir)/champlain-license.c			\
@@ -72,13 +73,14 @@ libchamplain_sources =					\
 	$(srcdir)/champlain-map-source-factory.c	\
 	$(srcdir)/champlain-map-source-desc.c		\
 	$(srcdir)/champlain-point.c			\
-	$(srcdir)/champlain-custom-marker.c			\
+	$(srcdir)/champlain-custom-marker.c		\
 	$(srcdir)/champlain-renderer.c			\
 	$(srcdir)/champlain-image-renderer.c		\
 	$(srcdir)/champlain-error-tile-renderer.c	\
 	$(srcdir)/champlain-file-tile-source.c		\
 	$(srcdir)/champlain-null-tile-source.c		\
 	$(srcdir)/champlain-network-bbox-tile-source.c	\
+	$(srcdir)/champlain-group.c			\
 	$(srcdir)/champlain-bounding-box.c
 
 champlain-features.h: $(top_builddir)/config.status
diff --git a/champlain/champlain-group.c b/champlain/champlain-group.c
new file mode 100644
index 0000000..3bdabd0
--- /dev/null
+++ b/champlain/champlain-group.c
@@ -0,0 +1,472 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Authored By Matthew Allum  <mallum openedhand com>
+ *
+ * Copyright (C) 2006 OpenedHand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ */
+
+/**
+ * SECTION:champlain-group
+ * @short_description: A fixed layout container
+ *
+ * This is a shameless coppy of ClutterGroup. The only difference is that
+ * it doesn't sort actors by depth, which slows down things in libchamplain
+ * considerably.
+ * 
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdarg.h>
+
+#include "champlain-group.h"
+
+#include <clutter/clutter.h>
+
+#define CHAMPLAIN_GROUP_GET_PRIVATE(obj) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CHAMPLAIN_TYPE_GROUP, ChamplainGroupPrivate))
+
+struct _ChamplainGroupPrivate
+{
+  GList *children;
+
+  ClutterLayoutManager *layout;
+};
+
+enum
+{
+  ADD,
+  REMOVE,
+
+  LAST_SIGNAL
+};
+
+static void clutter_container_iface_init (ClutterContainerIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ChamplainGroup, champlain_group, CLUTTER_TYPE_ACTOR,
+                         G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
+                                                clutter_container_iface_init));
+
+/*
+static gint
+sort_by_depth (gconstpointer a,
+               gconstpointer b)
+{
+  gfloat depth_a = clutter_actor_get_depth (CLUTTER_ACTOR(a));
+  gfloat depth_b = clutter_actor_get_depth (CLUTTER_ACTOR(b));
+
+  if (depth_a < depth_b)
+    return -1;
+
+  if (depth_a > depth_b)
+    return 1;
+
+  return 0;
+}
+*/
+
+static void
+champlain_group_real_add (ClutterContainer *container,
+                        ClutterActor     *actor)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (container)->priv;
+
+  g_object_ref (actor);
+
+  priv->children = g_list_append (priv->children, actor);
+  clutter_actor_set_parent (actor, CLUTTER_ACTOR (container));
+
+  /* queue a relayout, to get the correct positioning inside
+   * the ::actor-added signal handlers
+   */
+  clutter_actor_queue_relayout (CLUTTER_ACTOR (container));
+
+  g_signal_emit_by_name (container, "actor-added", actor);
+
+  clutter_container_sort_depth_order (container);
+
+  g_object_unref (actor);
+}
+
+static void
+champlain_group_real_remove (ClutterContainer *container,
+                           ClutterActor     *actor)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (container)->priv;
+
+  g_object_ref (actor);
+
+  priv->children = g_list_remove (priv->children, actor);
+  clutter_actor_unparent (actor);
+
+  /* queue a relayout, to get the correct positioning inside
+   * the ::actor-removed signal handlers
+   */
+  clutter_actor_queue_relayout (CLUTTER_ACTOR (container));
+
+  /* at this point, the actor passed to the "actor-removed" signal
+   * handlers is not parented anymore to the container but since we
+   * are holding a reference on it, it's still valid
+   */
+  g_signal_emit_by_name (container, "actor-removed", actor);
+
+  clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
+
+  g_object_unref (actor);
+}
+
+static void
+champlain_group_real_foreach (ClutterContainer *container,
+                            ClutterCallback   callback,
+                            gpointer          user_data)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (container)->priv;
+
+  /* Using g_list_foreach instead of iterating the list manually
+     because it has better protection against the current node being
+     removed. This will happen for example if someone calls
+     clutter_container_foreach(container, clutter_actor_destroy) */
+  g_list_foreach (priv->children, (GFunc) callback, user_data);
+}
+
+static void
+champlain_group_real_raise (ClutterContainer *container,
+                          ClutterActor     *actor,
+                          ClutterActor     *sibling)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (container)->priv;
+
+  priv->children = g_list_remove (priv->children, actor);
+
+  /* Raise at the top */
+  if (!sibling)
+    {
+      GList *last_item;
+
+      last_item = g_list_last (priv->children);
+
+      if (last_item)
+	sibling = last_item->data;
+
+      priv->children = g_list_append (priv->children, actor);
+    }
+  else
+    {
+      gint index_ = g_list_index (priv->children, sibling) + 1;
+
+      priv->children = g_list_insert (priv->children, actor, index_);
+    }
+
+  /* set Z ordering a value below, this will then call sort
+   * as values are equal ordering shouldn't change but Z
+   * values will be correct.
+   *
+   * FIXME: optimise
+   */
+  if (sibling &&
+      clutter_actor_get_depth (sibling) != clutter_actor_get_depth (actor))
+    {
+      clutter_actor_set_depth (actor, clutter_actor_get_depth (sibling));
+    }
+
+  clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
+}
+
+static void
+champlain_group_real_lower (ClutterContainer *container,
+                          ClutterActor     *actor,
+                          ClutterActor     *sibling)
+{
+  ChamplainGroup *self = CHAMPLAIN_GROUP (container);
+  ChamplainGroupPrivate *priv = self->priv;
+
+  priv->children = g_list_remove (priv->children, actor);
+
+  /* Push to bottom */
+  if (!sibling)
+    {
+      GList *last_item;
+
+      last_item = g_list_first (priv->children);
+
+      if (last_item)
+	sibling = last_item->data;
+
+      priv->children = g_list_prepend (priv->children, actor);
+    }
+  else
+    {
+      gint index_ = g_list_index (priv->children, sibling);
+
+      priv->children = g_list_insert (priv->children, actor, index_);
+    }
+
+  /* See comment in group_raise for this */
+  if (sibling &&
+      clutter_actor_get_depth (sibling) != clutter_actor_get_depth (actor))
+    {
+      clutter_actor_set_depth (actor, clutter_actor_get_depth (sibling));
+    }
+
+  clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
+}
+
+static void
+champlain_group_real_sort_depth_order (ClutterContainer *container)
+{
+//  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (container)->priv;
+
+//  priv->children = g_list_sort (priv->children, sort_by_depth);
+
+//  clutter_actor_queue_redraw (CLUTTER_ACTOR (container));
+}
+
+static void
+clutter_container_iface_init (ClutterContainerIface *iface)
+{
+  iface->add = champlain_group_real_add;
+  iface->remove = champlain_group_real_remove;
+  iface->foreach = champlain_group_real_foreach;
+  iface->raise = champlain_group_real_raise;
+  iface->lower = champlain_group_real_lower;
+  iface->sort_depth_order = champlain_group_real_sort_depth_order;
+}
+
+static void
+champlain_group_real_paint (ClutterActor *actor)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv;
+
+  g_list_foreach (priv->children, (GFunc) clutter_actor_paint, NULL);
+}
+
+static void
+champlain_group_real_pick (ClutterActor       *actor,
+                         const ClutterColor *pick)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv;
+
+  /* Chain up so we get a bounding box pained (if we are reactive) */
+  CLUTTER_ACTOR_CLASS (champlain_group_parent_class)->pick (actor, pick);
+
+  g_list_foreach (priv->children, (GFunc) clutter_actor_paint, NULL);
+}
+
+static void
+champlain_group_real_get_preferred_width (ClutterActor *actor,
+                                        gfloat        for_height,
+                                        gfloat       *min_width,
+                                        gfloat       *natural_width)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv;
+
+  clutter_layout_manager_get_preferred_width (priv->layout,
+                                              CLUTTER_CONTAINER (actor),
+                                              for_height,
+                                              min_width, natural_width);
+}
+
+static void
+champlain_group_real_get_preferred_height (ClutterActor *actor,
+                                         gfloat        for_width,
+                                         gfloat       *min_height,
+                                         gfloat       *natural_height)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv;
+
+  clutter_layout_manager_get_preferred_height (priv->layout,
+                                               CLUTTER_CONTAINER (actor),
+                                               for_width,
+                                               min_height, natural_height);
+}
+
+static void
+champlain_group_real_allocate (ClutterActor           *actor,
+                             const ClutterActorBox  *allocation,
+                             ClutterAllocationFlags  flags)
+{
+  ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv;
+  ClutterActorClass *klass;
+
+  klass = CLUTTER_ACTOR_CLASS (champlain_group_parent_class);
+  klass->allocate (actor, allocation, flags);
+
+  if (priv->children == NULL)
+    return;
+
+  clutter_layout_manager_allocate (priv->layout,
+                                   CLUTTER_CONTAINER (actor),
+                                   allocation, flags);
+}
+
+static void
+champlain_group_dispose (GObject *object)
+{
+  ChamplainGroup *self = CHAMPLAIN_GROUP (object);
+  ChamplainGroupPrivate *priv = self->priv;
+
+  if (priv->children)
+    {
+      g_list_foreach (priv->children, (GFunc) clutter_actor_destroy, NULL);
+      g_list_free (priv->children);
+
+      priv->children = NULL;
+    }
+
+  if (priv->layout)
+    {
+      clutter_layout_manager_set_container (priv->layout, NULL);
+      g_object_unref (priv->layout);
+      priv->layout = NULL;
+    }
+
+  G_OBJECT_CLASS (champlain_group_parent_class)->dispose (object);
+}
+
+static void
+champlain_group_real_show_all (ClutterActor *actor)
+{
+  clutter_container_foreach (CLUTTER_CONTAINER (actor),
+                             CLUTTER_CALLBACK (clutter_actor_show),
+                             NULL);
+  clutter_actor_show (actor);
+}
+
+static void
+champlain_group_real_hide_all (ClutterActor *actor)
+{
+  clutter_actor_hide (actor);
+  clutter_container_foreach (CLUTTER_CONTAINER (actor),
+                             CLUTTER_CALLBACK (clutter_actor_hide),
+                             NULL);
+}
+
+
+
+
+static void
+champlain_group_class_init (ChamplainGroupClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (ChamplainGroupPrivate));
+
+  actor_class->get_preferred_width = champlain_group_real_get_preferred_width;
+  actor_class->get_preferred_height = champlain_group_real_get_preferred_height;
+  actor_class->allocate = champlain_group_real_allocate;
+  actor_class->paint = champlain_group_real_paint;
+  actor_class->pick = champlain_group_real_pick;
+  actor_class->show_all = champlain_group_real_show_all;
+  actor_class->hide_all = champlain_group_real_hide_all;
+
+  gobject_class->dispose = champlain_group_dispose;
+
+}
+
+static void
+champlain_group_init (ChamplainGroup *self)
+{
+  self->priv = CHAMPLAIN_GROUP_GET_PRIVATE (self);
+
+  self->priv->layout = clutter_fixed_layout_new ();
+  g_object_ref_sink (self->priv->layout);
+
+  clutter_layout_manager_set_container (self->priv->layout,
+                                        CLUTTER_CONTAINER (self));
+}
+
+/**
+ * champlain_group_new:
+ *
+ * Create a new  #ChamplainGroup.
+ *
+ * Return value: the newly created #ChamplainGroup actor
+ */
+ClutterActor *
+champlain_group_new (void)
+{
+  return g_object_new (CHAMPLAIN_TYPE_GROUP, NULL);
+}
+
+/**
+ * champlain_group_remove_all:
+ * @group: A #ChamplainGroup
+ *
+ * Removes all children actors from the #ChamplainGroup.
+ */
+void
+champlain_group_remove_all (ChamplainGroup *group)
+{
+  GList *children;
+
+  g_return_if_fail (CHAMPLAIN_IS_GROUP (group));
+
+  children = group->priv->children;
+  while (children)
+    {
+      ClutterActor *child = children->data;
+      children = children->next;
+
+      clutter_container_remove_actor (CLUTTER_CONTAINER (group), child);
+    }
+}
+
+/**
+ * champlain_group_get_n_children:
+ * @self: A #ChamplainGroup
+ *
+ * Gets the number of actors held in the group.
+ *
+ * Return value: The number of child actors held in the group.
+ *
+ * Since: 0.2
+ */
+gint
+champlain_group_get_n_children (ChamplainGroup *self)
+{
+  g_return_val_if_fail (CHAMPLAIN_IS_GROUP (self), 0);
+
+  return g_list_length (self->priv->children);
+}
+
+/**
+ * champlain_group_get_nth_child:
+ * @self: A #ChamplainGroup
+ * @index_: the position of the requested actor.
+ *
+ * Gets a groups child held at @index_ in stack.
+ *
+ * Return value: (transfer none): A Clutter actor, or %NULL if
+ *   @index_ is invalid.
+ *
+ * Since: 0.2
+ */
+ClutterActor *
+champlain_group_get_nth_child (ChamplainGroup *self,
+			     gint          index_)
+{
+  g_return_val_if_fail (CHAMPLAIN_IS_GROUP (self), NULL);
+
+  return g_list_nth_data (self->priv->children, index_);
+}
diff --git a/champlain/champlain-group.h b/champlain/champlain-group.h
new file mode 100644
index 0000000..03069ef
--- /dev/null
+++ b/champlain/champlain-group.h
@@ -0,0 +1,113 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Authored By Matthew Allum  <mallum openedhand com>
+ *
+ * Copyright (C) 2006 OpenedHand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __CHAMPLAIN_GROUP_H__
+#define __CHAMPLAIN_GROUP_H__
+
+#include <glib-object.h>
+#include <clutter/clutter.h>
+
+G_BEGIN_DECLS
+
+#define CHAMPLAIN_TYPE_GROUP champlain_group_get_type()
+
+#define CHAMPLAIN_GROUP(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+  CHAMPLAIN_TYPE_GROUP, ChamplainGroup))
+
+#define CHAMPLAIN_GROUP_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), \
+  CHAMPLAIN_TYPE_GROUP, ChamplainGroupClass))
+
+#define CHAMPLAIN_IS_GROUP(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+  CHAMPLAIN_TYPE_GROUP))
+
+#define CHAMPLAIN_IS_GROUP_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+  CHAMPLAIN_TYPE_GROUP))
+
+#define CHAMPLAIN_GROUP_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+  CHAMPLAIN_TYPE_GROUP, ChamplainGroupClass))
+
+typedef struct _ChamplainGroup        ChamplainGroup;
+typedef struct _ChamplainGroupClass   ChamplainGroupClass;
+typedef struct _ChamplainGroupPrivate ChamplainGroupPrivate;
+
+/**
+ * ChamplainGroup:
+ *
+ * The #ChamplainGroup structure contains only private data
+ * and should be accessed using the provided API
+ *
+ * Since: 0.1
+ */
+struct _ChamplainGroup
+{
+  /*< private >*/
+  ClutterActor parent_instance;
+
+  ChamplainGroupPrivate *priv;
+};
+
+/**
+ * ChamplainGroupClass:
+ *
+ * The #ChamplainGroupClass structure contains only private data
+ *
+ * Since: 0.1
+ */
+struct _ChamplainGroupClass
+{
+  /*< private >*/
+  ClutterActorClass parent_class;
+
+  /* padding for future expansion */
+  void (*_clutter_reserved1) (void);
+  void (*_clutter_reserved2) (void);
+  void (*_clutter_reserved3) (void);
+  void (*_clutter_reserved4) (void);
+  void (*_clutter_reserved5) (void);
+  void (*_clutter_reserved6) (void);
+};
+
+GType         champlain_group_get_type         (void) G_GNUC_CONST;
+ClutterActor *champlain_group_new              (void);
+ClutterActor *champlain_group_get_nth_child    (ChamplainGroup    *self,
+                                              gint             index_);
+gint          champlain_group_get_n_children   (ChamplainGroup    *self);
+void          champlain_group_remove_all       (ChamplainGroup    *group);
+
+/* for Mr. Mallum */
+#define champlain_group_add(group,actor)                  G_STMT_START {  \
+  ClutterActor *_actor = (ClutterActor *) (actor);                      \
+  if (CHAMPLAIN_IS_GROUP ((group)) && CLUTTER_IS_ACTOR ((_actor)))        \
+    {                                                                   \
+      ClutterContainer *_container = (ClutterContainer *) (group);      \
+      clutter_container_add_actor (_container, _actor);                 \
+    }                                                   } G_STMT_END
+
+G_END_DECLS
+
+#endif /* __CHAMPLAIN_GROUP_H__ */
diff --git a/champlain/champlain-marker-layer.c b/champlain/champlain-marker-layer.c
index dd27f50..da05b5a 100644
--- a/champlain/champlain-marker-layer.c
+++ b/champlain/champlain-marker-layer.c
@@ -35,6 +35,7 @@
 #include "champlain-enum-types.h"
 #include "champlain-private.h"
 #include "champlain-view.h"
+#include "champlain-group.h"
 
 #include <clutter/clutter.h>
 #include <glib.h>
@@ -81,7 +82,7 @@ struct _ChamplainMarkerLayerPrivate
   gdouble stroke_width;
   gboolean visible;
   
-  ClutterGroup *content_group;
+  ChamplainGroup *content_group;
   GList *markers;
 };
 
@@ -417,11 +418,11 @@ champlain_marker_layer_init (ChamplainMarkerLayer *self)
   priv->fill_color = clutter_color_copy (&DEFAULT_FILL_COLOR);
   priv->stroke_color = clutter_color_copy (&DEFAULT_STROKE_COLOR);
 
-  priv->content_group = CLUTTER_GROUP (clutter_group_new ());
+  priv->content_group = CHAMPLAIN_GROUP (champlain_group_new ());
   clutter_actor_set_parent (CLUTTER_ACTOR (priv->content_group), CLUTTER_ACTOR (self));
   
   //TODO destroy + ref()
-  priv->path_actor = clutter_group_new ();
+  priv->path_actor = champlain_group_new ();
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->path_actor);
   
 }
@@ -652,7 +653,7 @@ add_marker (ChamplainMarkerLayer *layer,
 
   g_signal_connect (G_OBJECT (marker), "drag-motion",
       G_CALLBACK (marker_move_by_cb), layer);
-
+      
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), CLUTTER_ACTOR (marker));
   set_marker_position (layer, marker);
   if (append)
@@ -710,11 +711,11 @@ void champlain_marker_layer_remove_all (ChamplainMarkerLayer *layer)
           G_CALLBACK (marker_position_notify), layer);
     }
 
-  clutter_group_remove_all (CLUTTER_GROUP (priv->content_group));
+  champlain_group_remove_all (CHAMPLAIN_GROUP (priv->content_group));
   g_list_free (priv->markers);
   priv->markers = NULL;
 
-  priv->path_actor = clutter_group_new ();
+  priv->path_actor = champlain_group_new ();
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->path_actor);
 }
 
@@ -1074,16 +1075,17 @@ redraw_path (ChamplainMarkerLayer *layer)
   ChamplainView *view = priv->view;
   gdouble x, y;
   
+  
   /* layer not yet added to the view */
   if (view == NULL)
     return;
-    
+
   clutter_actor_get_size (CLUTTER_ACTOR (view), &width, &height);
 
   if (!priv->visible || width == 0.0 || height == 0.0)
     return;
 
-  clutter_group_remove_all (CLUTTER_GROUP (priv->path_actor));
+  champlain_group_remove_all (CHAMPLAIN_GROUP (priv->path_actor));
   cairo_texture = clutter_cairo_texture_new (width, height);
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->path_actor), cairo_texture);
   
diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
index dd4f761..f634375 100644
--- a/docs/reference/Makefile.am
+++ b/docs/reference/Makefile.am
@@ -60,7 +60,7 @@ endif
 # Header files to ignore when scanning. Use base file name, no paths
 # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
 IGNORE_HFILES= $(ignored_headers) champlain-debug.h champlain-enum-types.h champlain-private.h \
-	champlain.h champlain-marshal.h champlain-defines.h champlain-features.h
+	champlain.h champlain-marshal.h champlain-defines.h champlain-features.h champlain-group.h
 
 # Images to copy into HTML directory.
 # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png



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