[dia] layers: move to own header, move methods into dia namespace



commit fd4b143211e233595a1e80c252d448f7915c62a0
Author: Zander Brown <zbrown gnome org>
Date:   Thu Sep 19 10:46:55 2019 +0100

    layers: move to own header, move methods into dia namespace

 app/app_procs.c                         |   1 +
 app/create_object.c                     |   5 +-
 app/diagram.c                           |  50 +++---
 app/diagram_tree_model.c                |  71 ++++----
 app/diagram_tree_view.c                 |  11 +-
 app/display.c                           |   1 +
 app/dynamic_refresh.c                   |  32 ++--
 app/highlight.c                         |   5 +-
 app/layer_dialog.c                      |  55 ++++---
 app/load_save.c                         |  17 +-
 app/modify_tool.c                       |   5 +-
 app/select.c                            |  25 +--
 app/undo.c                              | 263 ++++++++++++++---------------
 lib/dia-layer.h                         | 107 ++++++++++++
 lib/diagramdata.c                       |  53 +++---
 lib/diagramdata.h                       |  65 --------
 lib/diarenderer.c                       |   1 +
 lib/focus.c                             |   5 +-
 lib/layer.c                             | 191 ++++++++++-----------
 lib/meson.build                         |   1 +
 lib/object.c                            |   9 +-
 plug-ins/drs/dia-render-script-import.c |  11 +-
 plug-ins/drs/dia-render-script.c        |   1 +
 plug-ins/dxf/dxf-export.c               |   3 +-
 plug-ins/dxf/dxf-import.c               |  85 +++++-----
 plug-ins/pixbuf/pixbuf.c                |  13 +-
 plug-ins/python/pydia-diagramdata.c     |  31 ++--
 plug-ins/python/pydia-layer.c           | 284 +++++++++++++++++---------------
 plug-ins/svg/render_svg.c               |   1 +
 plug-ins/svg/svg-import.c               |  53 +++---
 plug-ins/vdx/vdx-export.c               |  13 +-
 plug-ins/vdx/vdx-import.c               |  10 +-
 plug-ins/vdx/vdx-xml.c                  |   1 +
 plug-ins/wpg/wpg-import.c               |   7 +-
 plug-ins/xfig/xfig-export.c             |   5 +-
 plug-ins/xfig/xfig-import.c             |  13 +-
 36 files changed, 808 insertions(+), 696 deletions(-)
---
diff --git a/app/app_procs.c b/app/app_procs.c
index 54ab4742..776cef77 100644
--- a/app/app_procs.c
+++ b/app/app_procs.c
@@ -63,6 +63,7 @@
 #include "dialib.h"
 #include "diaerror.h"
 #include "widgets.h"
+#include "dia-layer.h"
 
 static gboolean         handle_initial_diagram (const char *input_file_name,
                                                 const char *export_file_name,
diff --git a/app/create_object.c b/app/create_object.c
index 8003b129..3efc2236 100644
--- a/app/create_object.c
+++ b/app/create_object.c
@@ -32,6 +32,7 @@
 #include "intl.h"
 #include "menus.h"
 #include "widgets.h"
+#include "dia-layer.h"
 
 static void create_object_button_press(CreateObjectTool *tool, GdkEventButton *event,
                                     DDisplay *ddisp);
@@ -149,8 +150,8 @@ create_object_button_release(CreateObjectTool *tool, GdkEventButton *event,
   }
 
   parent_candidates =
-    layer_find_objects_containing_rectangle(obj->parent_layer,
-                                           &obj->bounding_box);
+    dia_layer_find_objects_containing_rectangle (obj->parent_layer,
+                                                 &obj->bounding_box);
 
   /* whole object must be within another object to parent it */
   for (; parent_candidates != NULL; parent_candidates = g_list_next(parent_candidates)) {
diff --git a/app/diagram.c b/app/diagram.c
index 1bb43935..dd0ff09c 100644
--- a/app/diagram.c
+++ b/app/diagram.c
@@ -44,6 +44,7 @@
 #include "lib/diamarshal.h"
 #include "parent.h"
 #include "diacontext.h"
+#include "dia-layer.h"
 
 static GList *open_diagrams = NULL;
 
@@ -673,7 +674,7 @@ diagram_remove_ddisplay(Diagram *dia, DDisplay *ddisp)
 void
 diagram_add_object (Diagram *dia, DiaObject *obj)
 {
-  layer_add_object (dia->data->active_layer, obj);
+  dia_layer_add_object (dia->data->active_layer, obj);
 
   diagram_modified (dia);
 }
@@ -681,7 +682,7 @@ diagram_add_object (Diagram *dia, DiaObject *obj)
 void
 diagram_add_object_list (Diagram *dia, GList *list)
 {
-  layer_add_objects (dia->data->active_layer, list);
+  dia_layer_add_objects (dia->data->active_layer, list);
 
   diagram_modified (dia);
 }
@@ -936,19 +937,24 @@ diagram_flush(Diagram *dia)
 }
 
 DiaObject *
-diagram_find_clicked_object(Diagram *dia, Point *pos,
-                           real maxdist)
+diagram_find_clicked_object (Diagram *dia,
+                             Point   *pos,
+                             real     maxdist)
 {
-  return layer_find_closest_object_except(dia->data->active_layer,
-                                         pos, maxdist, NULL);
+  return dia_layer_find_closest_object_except (dia->data->active_layer,
+                                               pos, maxdist, NULL);
 }
 
 DiaObject *
-diagram_find_clicked_object_except(Diagram *dia, Point *pos,
-                                  real maxdist, GList *avoid)
+diagram_find_clicked_object_except (Diagram *dia,
+                                    Point   *pos,
+                                    real     maxdist,
+                                    GList   *avoid)
 {
-  return layer_find_closest_object_except(dia->data->active_layer, pos,
-                                         maxdist, avoid);
+  return dia_layer_find_closest_object_except (dia->data->active_layer,
+                                               pos,
+                                               maxdist,
+                                               avoid);
 }
 
 /*
@@ -1003,11 +1009,13 @@ diagram_find_closest_connectionpoint(Diagram *dia,
     ConnectionPoint *this_cp;
     real this_dist;
     if (layer->connectable) {
-      this_dist = layer_find_closest_connectionpoint(layer,
-                                                    &this_cp, pos, notthis);
+      this_dist = dia_layer_find_closest_connectionpoint (layer,
+                                                          &this_cp,
+                                                          pos,
+                                                          notthis);
       if (this_dist < dist) {
-       dist = this_dist;
-       *closest = this_cp;
+        dist = this_dist;
+        *closest = this_cp;
       }
     }
   }
@@ -1284,7 +1292,7 @@ void diagram_ungroup_selected(Diagram *dia)
 
       group_list = group_objects(group);
 
-      group_index = layer_object_get_index(dia->data->active_layer, group);
+      group_index = dia_layer_object_get_index (dia->data->active_layer, group);
 
       change = undo_ungroup_objects(dia, group_list, group, group_index);
       (change->apply)(change, dia);
@@ -1333,7 +1341,7 @@ diagram_place_under_selected(Diagram *dia)
 
   sorted_list = diagram_get_sorted_selected_remove(dia);
   object_add_updates_list(sorted_list, dia);
-  layer_add_objects_first(dia->data->active_layer, sorted_list);
+  dia_layer_add_objects_first (dia->data->active_layer, sorted_list);
 
   undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list);
 
@@ -1353,9 +1361,9 @@ diagram_place_over_selected(Diagram *dia)
 
   orig_list = g_list_copy(dia->data->active_layer->objects);
 
-  sorted_list = diagram_get_sorted_selected_remove(dia);
-  object_add_updates_list(sorted_list, dia);
-  layer_add_objects(dia->data->active_layer, sorted_list);
+  sorted_list = diagram_get_sorted_selected_remove (dia);
+  object_add_updates_list (sorted_list, dia);
+  dia_layer_add_objects (dia->data->active_layer, sorted_list);
 
   undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list);
 
@@ -1398,7 +1406,7 @@ diagram_place_up_selected(Diagram *dia)
     }
   }
 
-  layer_set_object_list(dia->data->active_layer, new_list);
+  dia_layer_set_object_list (dia->data->active_layer, new_list);
 
   undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list);
 
@@ -1444,7 +1452,7 @@ diagram_place_down_selected(Diagram *dia)
     }
   }
 
-  layer_set_object_list(dia->data->active_layer, new_list);
+  dia_layer_set_object_list (dia->data->active_layer, new_list);
 
   undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list);
 
diff --git a/app/diagram_tree_model.c b/app/diagram_tree_model.c
index 2b5078ef..7009af9e 100644
--- a/app/diagram_tree_model.c
+++ b/app/diagram_tree_model.c
@@ -6,7 +6,7 @@
  *
  * complete rewrite to get rid of deprecated widgets
  * Copyright (C) 2009 Hans Breuer
- * 
+ *
  * 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
@@ -28,7 +28,7 @@
 #include "diagram.h"
 #include "object.h"
 #include "dia-application.h"
-
+#include "dia-layer.h"
 #include "diagram_tree_model.h"
 
 /* accessing iter fileds by name by */
@@ -60,7 +60,7 @@ static void
 _dtm_class_init (DiagramTreeModelClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  
+
   gobject_class->finalize = _dtm_finalize;
 }
 
@@ -87,7 +87,7 @@ _dtm_get_column_type (GtkTreeModel *tree_model,
                      gint          index)
 {
   g_return_val_if_fail (index >= DIAGRAM_COLUMN || index < NUM_COLUMNS, G_TYPE_NONE);
-  
+
   switch (index) {
   case DIAGRAM_COLUMN :
     return DIA_TYPE_DIAGRAM;
@@ -111,12 +111,12 @@ _dtm_get_iter (GtkTreeModel *tree_model,
   GtkTreeIter parent;
   gint *indices;
   gint depth, i;
-  
+
   indices = gtk_tree_path_get_indices (path);
   depth = gtk_tree_path_get_depth (path);
 
   g_return_val_if_fail (depth > 0, FALSE);
-  
+
   if (!gtk_tree_model_iter_nth_child (tree_model, iter, NULL, indices[0]))
     return FALSE;
 
@@ -148,14 +148,14 @@ _dtm_get_path (GtkTreeModel *tree_model,
     gtk_tree_path_append_index (result, g_list_index (list, NODE_DIAGRAM(iter)));
   }
   if (NODE_LAYER(iter)) {
-    g_return_val_if_fail (NODE_DIAGRAM(iter) == layer_get_parent_diagram (NODE_LAYER(iter)), NULL);
+    g_return_val_if_fail (NODE_DIAGRAM(iter) == dia_layer_get_parent_diagram (NODE_LAYER(iter)), NULL);
     index = data_layer_get_index (NODE_DIAGRAM(iter), NODE_LAYER(iter));
     if (index >= 0)
       gtk_tree_path_append_index (result, index);
   }
   if (index >= 0 && NODE_OBJECT(iter)) {
     g_return_val_if_fail (NODE_LAYER(iter) == dia_object_get_parent_layer (NODE_OBJECT(iter)), NULL);
-    index = layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter));
+    index = dia_layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter));
     if (index >= 0)
       gtk_tree_path_append_index (result, index);
   }
@@ -180,7 +180,7 @@ _dtm_iter_n_children (GtkTreeModel *tree_model,
   } else if (NODE_LAYER(iter)) {
     if (!NODE_LAYER(iter))
       return 0;
-    return layer_object_count (NODE_LAYER(iter));
+    return dia_layer_object_count (NODE_LAYER(iter));
   } else if (NODE_DIAGRAM(iter)) {
      if (!NODE_DIAGRAM(iter))
        return 0;
@@ -214,7 +214,7 @@ _dtm_get_value (GtkTreeModel *tree_model,
     if (NODE_OBJECT(iter))
       g_value_set_string (value, object_get_displayname (NODE_OBJECT (iter)));
     else if (NODE_LAYER(iter))
-      g_value_set_string (value, layer_get_name (NODE_LAYER (iter)));
+      g_value_set_string (value, dia_layer_get_name (NODE_LAYER (iter)));
     else if (NODE_DIAGRAM(iter))
       g_value_set_string (value, diagram_get_name (DIA_DIAGRAM(NODE_DIAGRAM(iter))));
     else /* warn on it? */
@@ -232,16 +232,16 @@ _dtm_iter_next (GtkTreeModel *tree_model,
   if (NODE_OBJECT(iter)) {
     if (!NODE_LAYER(iter))
       return FALSE;
-    i = layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter));
+    i = dia_layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter));
     ++i;
-    NODE_OBJECT(iter) = layer_object_get_nth(NODE_LAYER(iter), i);
+    NODE_OBJECT(iter) = dia_layer_object_get_nth (NODE_LAYER (iter), i);
     return NODE_OBJECT(iter) != NULL;
   } else if (NODE_LAYER(iter)) {
     if (!NODE_DIAGRAM(iter))
       return FALSE;
     i = data_layer_get_index (NODE_DIAGRAM(iter), NODE_LAYER(iter));
     ++i;
-    NODE_LAYER(iter) = data_layer_get_nth(NODE_DIAGRAM(iter), i);
+    NODE_LAYER(iter) = data_layer_get_nth (NODE_DIAGRAM(iter), i);
     return NODE_LAYER(iter) != NULL;
   } else if (NODE_DIAGRAM(iter)) {
     GList *list = dia_open_diagrams();
@@ -258,27 +258,28 @@ _dtm_iter_next (GtkTreeModel *tree_model,
   }
   return FALSE;
 }
+
 static gboolean
 _dtm_iter_children (GtkTreeModel *tree_model,
-                   GtkTreeIter  *iter,
-                   GtkTreeIter  *parent)
+                    GtkTreeIter  *iter,
+                    GtkTreeIter  *parent)
 {
   if (parent) {
     if (NODE_OBJECT(parent))
       return FALSE;
     else if (NODE_LAYER(parent)) {
-      NODE_OBJECT(iter) = layer_object_get_nth(NODE_LAYER(parent), 0);
+      NODE_OBJECT(iter) = dia_layer_object_get_nth (NODE_LAYER(parent), 0);
       if (NODE_OBJECT(iter)) {
         NODE_LAYER(iter) = dia_object_get_parent_layer(NODE_OBJECT(iter));
-       NODE_DIAGRAM(iter) = layer_get_parent_diagram (NODE_LAYER(iter));
-       return TRUE;
+        NODE_DIAGRAM(iter) = dia_layer_get_parent_diagram (NODE_LAYER(iter));
+        return TRUE;
       }
     } else if (NODE_DIAGRAM(parent)) {
       NODE_LAYER(iter) = data_layer_get_nth(NODE_DIAGRAM(parent), 0);
       if (NODE_LAYER(iter)) {
-       NODE_DIAGRAM(iter) = layer_get_parent_diagram (NODE_LAYER(iter));
-       NODE_OBJECT(iter) = NULL;
-       return TRUE;
+        NODE_DIAGRAM(iter) = dia_layer_get_parent_diagram (NODE_LAYER(iter));
+        NODE_OBJECT(iter) = NULL;
+        return TRUE;
       }
     } else {
       /* deliver root's children */
@@ -312,7 +313,7 @@ _dtm_iter_nth_child (GtkTreeModel *tree_model,
     if (NODE_OBJECT(parent)) {
       return FALSE;
     } else if (NODE_LAYER(parent)) {
-      NODE_OBJECT(iter) = layer_object_get_nth(NODE_LAYER(iter), n);
+      NODE_OBJECT(iter) = dia_layer_object_get_nth (NODE_LAYER(iter), n);
       return NODE_OBJECT(iter) != NULL;
     } else if (NODE_DIAGRAM(parent)) {
       NODE_LAYER(iter) = data_layer_get_nth(NODE_DIAGRAM(iter), n);
@@ -392,8 +393,8 @@ _recurse_row_inserted (GtkTreeModel *model, GtkTreeIter *parent)
     GtkTreePath *path = _dtm_get_path (model, &iter);
     gtk_tree_model_row_inserted (model, path, &iter);
     /* gtk_tree_model_row_has_child_toggled
-     * ... emitted when a row has gotten the first child row ... 
-     * So no need to do it here. Or maybe not for the sorted model? 
+     * ... emitted when a row has gotten the first child row ...
+     * So no need to do it here. Or maybe not for the sorted model?
      */
     if (_recurse_row_inserted (model, &iter))
       gtk_tree_model_row_has_child_toggled (model, path, &iter);
@@ -414,7 +415,7 @@ _object_add (DiagramData      *dia,
   GtkTreeIter _iter;
   GtkTreeIter *iter = &_iter;
   /* a bit backward: the first child is in the diagram, but not the tree yet */
-  gboolean had_child = layer_object_count (layer) > 1;
+  gboolean had_child = dia_layer_object_count (layer) > 1;
 
   g_return_if_fail (DIA_DIAGRAM(dia) != NULL);
 
@@ -442,10 +443,10 @@ _object_remove(DiagramData      *dia,
   GtkTreePath *path;
   GtkTreeIter _iter;
   GtkTreeIter *iter = &_iter;
-  gboolean last_child = layer_object_count (layer) == 0;
+  gboolean last_child = dia_layer_object_count (layer) == 0;
 
   g_return_if_fail (DIA_DIAGRAM(dia) != NULL);
-  
+
   NODE_DIAGRAM(iter) = dia;
   NODE_LAYER(iter)   = layer;
   NODE_OBJECT(iter)  = obj;
@@ -502,7 +503,7 @@ _diagram_change (DiaApplication   *app,
   GtkTreePath *path;
   GtkTreeIter _iter = {0,};
   GtkTreeIter *iter = &_iter;
-  
+
   NODE_DIAGRAM(iter) = DIA_DIAGRAM_DATA(dia);
 
   if (flags & DIAGRAM_CHANGE_NAME)
@@ -526,7 +527,7 @@ _diagram_remove (DiaApplication   *app,
   GtkTreePath *path;
   GtkTreeIter _iter = {0,};
   GtkTreeIter *iter = &_iter;
-  
+
   NODE_DIAGRAM(iter) = DIA_DIAGRAM_DATA(dia);
   NODE_LAYER(iter)   = NULL;
   NODE_OBJECT(iter)  = NULL;
@@ -569,11 +570,11 @@ _dtm_finalize (GObject *object)
   g_signal_handlers_disconnect_by_func (G_OBJECT (dia_application_get ()), _diagram_add, dtm);
   g_signal_handlers_disconnect_by_func (G_OBJECT (dia_application_get ()), _diagram_change, dtm);
   g_signal_handlers_disconnect_by_func (G_OBJECT (dia_application_get ()), _diagram_remove, dtm);
-  
+
   G_OBJECT_CLASS(_dtm_parent_class)->finalize (object);
 }
 
-/* SORTABLE 
+/* SORTABLE
  * Wrapper around the original model to allow sorting by various columns IDs
  */
 static gint
@@ -603,8 +604,8 @@ cmp_layer (GtkTreeIter  *a,
   gint ret;
   if (pa == pb)
     return 0;
-  na = layer_get_name (pa);
-  nb = layer_get_name (pb);
+  na = dia_layer_get_name (pa);
+  nb = dia_layer_get_name (pb);
   if (!na || !nb)
     return (na > nb) ? -1 : 1;
   ret = strcmp (na, nb);
@@ -662,10 +663,10 @@ static GtkTreeModel *
 wrap_as_sortable_model (GtkTreeModel *model)
 {
   GtkTreeModel *sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
-  
+
   gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sort_model), NAME_COLUMN, name_sort_func, model, NULL);
   gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sort_model), OBJECT_COLUMN, type_sort_func, model, 
NULL);
-  
+
   return sort_model;
 }
 
diff --git a/app/diagram_tree_view.c b/app/diagram_tree_view.c
index c49598af..86be9afb 100644
--- a/app/diagram_tree_view.c
+++ b/app/diagram_tree_view.c
@@ -41,6 +41,7 @@
 #include "persistence.h"
 #include "intl.h"
 #include "widgets.h"
+#include "dia-layer.h"
 
 typedef struct _DiagramTreeView DiagramTreeView;
 struct _DiagramTreeView {
@@ -168,7 +169,7 @@ _dtv_query_tooltip (GtkWidget  *widget,
       }
 
       if (layer) {
-        gchar *name = layer_get_name (layer);
+        gchar *name = dia_layer_get_name (layer);
         gchar *em = g_markup_printf_escaped ("<b>%s</b>: %s\n", _("Layer"), name);
         g_string_append (markup, em);
         g_free (em);
@@ -188,9 +189,11 @@ _dtv_query_tooltip (GtkWidget  *widget,
                                g_list_length (object->children), _("Children"));
         /* and some dia_object_get_meta ? */
       } else if (layer) {
-       int objects = layer_object_count (layer);
-       g_string_append_printf (markup, g_dngettext (GETTEXT_PACKAGE, "%d Object", "%d Objects",
-                               objects), objects);
+        int objects = dia_layer_object_count (layer);
+        g_string_append_printf (markup,
+                                g_dngettext (GETTEXT_PACKAGE, "%d Object", "%d Objects",
+                                             objects),
+                                objects);
       }
 
       if (markup->len > 0) {
diff --git a/app/display.c b/app/display.c
index cfc1c782..e08e2c20 100644
--- a/app/display.c
+++ b/app/display.c
@@ -46,6 +46,7 @@
 #include "diatransform.h"
 #include "recent_files.h"
 #include "filedlg.h"
+#include "dia-layer.h"
 
 static GdkCursor *current_cursor = NULL;
 
diff --git a/app/dynamic_refresh.c b/app/dynamic_refresh.c
index d38fce1c..35ca9b8d 100644
--- a/app/dynamic_refresh.c
+++ b/app/dynamic_refresh.c
@@ -24,6 +24,8 @@
 #include "diagramdata.h"
 #include "object_ops.h"
 #include "app/connectionpoint_ops.h"
+#include "dia-layer.h"
+
 #include <glib.h>
 
 static guint timeout = 0;
@@ -41,11 +43,11 @@ static void foreach_dynobj(DiaObject* obj, gpointer data) {
 
         dia = (Diagram*)list->data;
         list = g_list_next(list);
-        
+
         layer = dia_object_get_parent_layer(obj);
         if (!layer) continue;
 
-        obj_ddata = layer_get_parent_diagram(layer);
+        obj_ddata = dia_layer_get_parent_diagram (layer);
         if (!obj_ddata) continue;
 
         if (dia->data == obj_ddata) {
@@ -68,19 +70,19 @@ static gboolean timer_handler(gpointer data) {
     while (list != NULL) {
         Diagram* dia = (Diagram*)list->data;
         list = g_list_next(list);
-        
+
         diagram_flush(dia);
     }
-    
+
     dynobj_refresh_kick();
     return TRUE;
 }
 
-static gboolean 
-idle_handler (gpointer data) 
+static gboolean
+idle_handler (gpointer data)
 {
     guint new_timeout;
-    
+
     new_timeout = dynobj_list_get_dynobj_rate();
     if (timeout != new_timeout) {
         if (timer_id) {
@@ -97,24 +99,24 @@ idle_handler (gpointer data)
     return FALSE;
 }
 
-void 
-dynobj_refresh_kick(void) 
+void
+dynobj_refresh_kick(void)
 {
     if (!idle_id)
         idle_id = g_idle_add_full (G_PRIORITY_LOW, idle_handler, NULL, NULL);
 }
 
-void 
-dynobj_refresh_init(void) 
+void
+dynobj_refresh_init(void)
 {
         /* NOP */
 }
 
-void 
-dynobj_refresh_finish (void) 
+void
+dynobj_refresh_finish (void)
 {
-    if (timer_id) 
+    if (timer_id)
         g_source_remove (timer_id);
-    if (idle_id) 
+    if (idle_id)
         g_source_remove(idle_id);
 }
diff --git a/app/highlight.c b/app/highlight.c
index 61d56b11..2eea7f64 100644
--- a/app/highlight.c
+++ b/app/highlight.c
@@ -25,6 +25,7 @@
 #include "object.h"
 #include "object_ops.h"
 #include "group.h"
+#include "dia-layer.h"
 
 /* One could argue that the actual setting of the object's field
  * should happen inside lib rather than app.  I think that'd be overkill.
@@ -35,7 +36,7 @@
  * Highlighting sets the bbox to ... some more.
  * Problem:  The bbox is the same for all views, but highlighting size should
  * depend on the zoom level.  The renderer obviously can figure out to make
- * it a few more pixels or something, but we need the bbox to also be 
+ * it a few more pixels or something, but we need the bbox to also be
  * enlarged by a bit.  I guess the object_add_updates call must handle that,
  * as it knows about the conversion.
  */
@@ -55,7 +56,7 @@ highlight_object_off(DiaObject *obj, Diagram *dia)
   data_highlight_remove(dia->data, obj);
 }
 
-/** Resets all highlighting in this layer.  Helper function for 
+/** Resets all highlighting in this layer.  Helper function for
  * highlight_reset_all
  */
 static void
diff --git a/app/layer_dialog.c b/app/layer_dialog.c
index d957186a..fdbc7d8b 100644
--- a/app/layer_dialog.c
+++ b/app/layer_dialog.c
@@ -36,6 +36,7 @@
 #include "persistence.h"
 #include "widgets.h"
 #include "interface.h"
+#include "dia-layer.h"
 
 #include "dia-application.h" /* dia_diagram_change */
 
@@ -507,30 +508,30 @@ layer_dialog_new_callback(GtkWidget *widget, gpointer gdata)
   dia = layer_dialog->diagram;
 
   if (dia != NULL) {
-    gchar* new_layer_name = g_strdup_printf(_("New layer %d"),
-                                           next_layer_num++);
-    layer = new_layer(new_layer_name, dia->data);
+    gchar* new_layer_name = g_strdup_printf (_("New layer %d"),
+                                             next_layer_num++);
+    layer = dia_layer_new (new_layer_name, dia->data);
 
-    assert(GTK_LIST(layer_dialog->layer_list)->selection != NULL);
-    selected = GTK_LIST(layer_dialog->layer_list)->selection->data;
-    pos = gtk_list_child_position(GTK_LIST(layer_dialog->layer_list), selected);
+    assert (GTK_LIST (layer_dialog->layer_list)->selection != NULL);
+    selected = GTK_LIST (layer_dialog->layer_list)->selection->data;
+    pos = gtk_list_child_position (GTK_LIST (layer_dialog->layer_list), selected);
 
-    data_add_layer_at(dia->data, layer, dia->data->layers->len - pos);
+    data_add_layer_at (dia->data, layer, dia->data->layers->len - pos);
 
-    diagram_add_update_all(dia);
-    diagram_flush(dia);
+    diagram_add_update_all (dia);
+    diagram_flush (dia);
 
-    layer_widget = dia_layer_widget_new(dia, layer);
-    gtk_widget_show(layer_widget);
+    layer_widget = dia_layer_widget_new (dia, layer);
+    gtk_widget_show (layer_widget);
 
-    list = g_list_prepend(list, layer_widget);
+    list = g_list_prepend (list, layer_widget);
 
-    gtk_list_insert_items(GTK_LIST(layer_dialog->layer_list), list, pos);
+    gtk_list_insert_items (GTK_LIST (layer_dialog->layer_list), list, pos);
 
-    gtk_list_select_item(GTK_LIST(layer_dialog->layer_list), pos);
+    gtk_list_select_item (GTK_LIST (layer_dialog->layer_list), pos);
 
-    undo_layer(dia, layer, TYPE_ADD_LAYER, dia->data->layers->len - pos);
-    undo_set_transactionpoint(dia->undo);
+    undo_layer (dia, layer, TYPE_ADD_LAYER, dia->data->layers->len - pos);
+    undo_set_transactionpoint (dia->undo);
   }
 }
 
@@ -1127,23 +1128,23 @@ static void
 edit_layer_add_ok_callback (GtkWidget *w, gpointer client_data)
 {
   EditLayerDialog *dialog = (EditLayerDialog *) client_data;
-  Diagram *dia = ddisplay_active_diagram();
+  Diagram *dia = ddisplay_active_diagram ();
   Layer *layer;
   int pos = data_layer_get_index (dia->data, dia->data->active_layer) + 1;
 
-  layer = new_layer(g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))), dia->data);
-  data_add_layer_at(dia->data, layer, pos);
-  data_set_active_layer(dia->data, layer);
+  layer = dia_layer_new (g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))), dia->data);
+  data_add_layer_at (dia->data, layer, pos);
+  data_set_active_layer (dia->data, layer);
 
-  diagram_add_update_all(dia);
-  diagram_flush(dia);
+  diagram_add_update_all (dia);
+  diagram_flush (dia);
 
-  undo_layer(dia, layer, TYPE_ADD_LAYER, pos);
-  undo_set_transactionpoint(dia->undo);
+  undo_layer (dia, layer, TYPE_ADD_LAYER, pos);
+  undo_set_transactionpoint (dia->undo);
 
   /* ugly way of updating the layer widget */
   if (layer_dialog && layer_dialog->diagram == dia) {
-    layer_dialog_set_diagram(dia);
+    layer_dialog_set_diagram (dia);
   }
 
   gtk_widget_destroy (dialog->dialog);
@@ -1349,12 +1350,12 @@ layer_change_free(struct LayerChange *change)
   switch (change->type) {
   case TYPE_DELETE_LAYER:
     if (change->applied) {
-      layer_destroy(change->layer);
+      dia_layer_destroy (change->layer);
     }
     break;
   case TYPE_ADD_LAYER:
     if (!change->applied) {
-      layer_destroy(change->layer);
+      dia_layer_destroy (change->layer);
     }
     break;
   case TYPE_RAISE_LAYER:
diff --git a/app/load_save.c b/app/load_save.c
index 38a5630c..f2817581 100644
--- a/app/load_save.c
+++ b/app/load_save.c
@@ -54,6 +54,7 @@
 #include "diapagelayout.h"
 #include "autosave.h"
 #include "display.h"
+#include "dia-layer.h"
 
 #ifdef G_OS_WIN32
 #include <io.h>
@@ -439,9 +440,9 @@ diagram_data_load(const gchar *filename, DiagramData *data, DiaContext *ctx, voi
   }
 
   /* Destroy the default layer: */
-  if (layer_object_count(data->active_layer) == 0) {
-    g_ptr_array_remove(data->layers, data->active_layer);
-    layer_destroy(data->active_layer);
+  if (dia_layer_object_count (data->active_layer) == 0) {
+    g_ptr_array_remove (data->layers, data->active_layer);
+    dia_layer_destroy (data->active_layer);
   }
 
   diagramdata =
@@ -649,16 +650,16 @@ diagram_data_load(const gchar *filename, DiagramData *data, DiaContext *ctx, voi
     name = (char *)xmlGetProp(layer_node, (const xmlChar *)"name");
     if (!name) break; /* name is mandatory */
 
-    layer = new_layer(g_strdup(name), data);
-    if (name) xmlFree(name);
+    layer = dia_layer_new (g_strdup (name), data);
+    if (name) xmlFree (name);
 
     layer->visible = _get_bool_prop (layer_node, "visible", FALSE);
     layer->connectable = _get_bool_prop (layer_node, "connectable", FALSE);
     /* Read in all objects: */
-    list = read_objects(layer_node, objects_hash, ctx, NULL, unknown_objects_hash);
-    layer_add_objects (layer, list);
+    list = read_objects (layer_node, objects_hash, ctx, NULL, unknown_objects_hash);
+    dia_layer_add_objects (layer, list);
 
-    data_add_layer(data, layer);
+    data_add_layer (data, layer);
     ++num_layers_added;
 
     active = _get_bool_prop (layer_node, "active", FALSE);
diff --git a/app/modify_tool.c b/app/modify_tool.c
index 2256d37a..1b09f470 100644
--- a/app/modify_tool.c
+++ b/app/modify_tool.c
@@ -36,6 +36,7 @@
 #include "textline.h"
 #include "menus.h"
 #include "diainteractiverenderer.h"
+#include "dia-layer.h"
 
 #include "parent.h"
 #include "prop_text.h"
@@ -677,10 +678,10 @@ find_selected_objects(DDisplay *ddisp, ModifyTool *tool)
   if (prefs.reverse_rubberbanding_intersects &&
       tool->start_box.x > tool->end_box.x) {
     return
-      layer_find_objects_intersecting_rectangle(ddisp->diagram->data->active_layer, &r);
+      dia_layer_find_objects_intersecting_rectangle (ddisp->diagram->data->active_layer, &r);
   } else {
     return
-      layer_find_objects_in_rectangle(ddisp->diagram->data->active_layer, &r);
+      dia_layer_find_objects_in_rectangle (ddisp->diagram->data->active_layer, &r);
   }
 }
 
diff --git a/app/select.c b/app/select.c
index 738562ec..fd79e14a 100644
--- a/app/select.c
+++ b/app/select.c
@@ -27,6 +27,7 @@
 #include "object_ops.h"
 #include "textedit.h"
 #include "object.h"
+#include "dia-layer.h"
 
 SelectionStyle selection_style = SELECT_REPLACE;
 
@@ -44,11 +45,11 @@ select_all_callback(GtkAction *action)
 
   while (objects != NULL) {
     DiaObject *obj = (DiaObject *)objects->data;
-    
+
     if (!diagram_is_selected(dia, obj)) {
       diagram_select(dia, obj);
     }
-    
+
     objects = g_list_next(objects);
   }
 
@@ -87,7 +88,7 @@ select_invert_callback(GtkAction *action)
 
   for (; tmp != NULL; tmp = g_list_next(tmp)) {
     DiaObject *obj = (DiaObject *)tmp->data;
-    
+
     if (!diagram_is_selected(dia, obj)) {
       diagram_select(dia, obj);
     } else {
@@ -98,7 +99,7 @@ select_invert_callback(GtkAction *action)
   ddisplay_do_update_menu_sensitivity(ddisp);
   object_add_updates_list(dia->data->selected, dia);
   diagram_flush(dia);
-  
+
 }
 
 /** Select objects that are directly connected to the currently selected
@@ -122,12 +123,12 @@ select_connected_callback(GtkAction *action)
 
     for (i = 0; i < obj->num_handles; i++) {
       Handle *handle = obj->handles[i];
-      
+
       if (handle->connected_to != NULL
          && dia_object_is_selectable(handle->connected_to->object)
          && !diagram_is_selected(dia, handle->connected_to->object)) {
        diagram_select(dia, handle->connected_to->object);
-      }      
+      }
     }
   }
 
@@ -142,11 +143,11 @@ select_connected_callback(GtkAction *action)
       for (; conns != NULL; conns = g_list_next(conns)) {
         DiaObject *obj2 = (DiaObject *)conns->data;
 
-       if (dia_object_is_selectable(obj2) 
+       if (dia_object_is_selectable(obj2)
            && !diagram_is_selected(dia, obj2)) {
           diagram_select(dia, obj2);
        }
-      }      
+      }
     }
   }
 
@@ -164,7 +165,7 @@ select_transitively(Diagram *dia, DiaObject *obj)
 
   for (i = 0; i < obj->num_handles; i++) {
     Handle *handle = obj->handles[i];
-    
+
     if (handle->connected_to != NULL &&
        dia_object_is_selectable(handle->connected_to->object)) {
       DiaObject *connected_object = handle->connected_to->object;
@@ -172,7 +173,7 @@ select_transitively(Diagram *dia, DiaObject *obj)
        diagram_select(dia, connected_object);
        newly_selected = g_list_prepend(newly_selected, connected_object);
       }
-    }      
+    }
   }
 
   for (i = 0; i < dia_object_get_num_connections(obj); i++) {
@@ -188,7 +189,7 @@ select_transitively(Diagram *dia, DiaObject *obj)
       }
     }
   }
-  
+
   while (newly_selected != NULL) {
     select_transitively(dia, (DiaObject *)newly_selected->data);
     newly_selected = g_list_next(newly_selected);
@@ -241,7 +242,7 @@ select_same_type_callback(GtkAction *action)
     if (!diagram_is_selected(dia, obj)) {
       for (tmp2 = objects; tmp2 != NULL; tmp2 = g_list_next(tmp2)) {
         DiaObject *obj2 = (DiaObject *)tmp2->data;
-       
+
         if (obj->type == obj2->type) {
           diagram_select(dia, obj);
           break;
diff --git a/app/undo.c b/app/undo.c
index 55201f28..59d48111 100644
--- a/app/undo.c
+++ b/app/undo.c
@@ -27,6 +27,7 @@
 #include "preferences.h"
 #include "textedit.h"
 #include "parent.h"
+#include "dia-layer.h"
 
 #if 0
 #define DEBUG_PRINTF(args) printf args
@@ -58,7 +59,7 @@ new_transactionpoint(void)
     transaction->revert = transaction_point_pointer;
     transaction->free = NULL;
   }
-  
+
   return transaction;
 }
 
@@ -67,7 +68,7 @@ new_undo_stack(Diagram *dia)
 {
   UndoStack *stack;
   Change *transaction;
-  
+
   stack = g_new(UndoStack, 1);
   if (stack!=NULL){
     stack->dia = dia;
@@ -96,11 +97,11 @@ undo_remove_redo_info(UndoStack *stack)
   Change *next_change;
 
   DEBUG_PRINTF(("UNDO: Removing redo info\n"));
-  
+
   change = stack->current_change->next;
   stack->current_change->next = NULL;
   stack->last_change = stack->current_change;
-    
+
   while (change != NULL) {
     next_change = change->next;
     if (change->free)
@@ -118,7 +119,7 @@ undo_push_change(UndoStack *stack, Change *change)
     undo_remove_redo_info(stack);
 
   DEBUG_PRINTF(("UNDO: Push new change at %d\n", stack->depth));
-  
+
   change->prev = stack->last_change;
   change->next = NULL;
   stack->last_change->next = change;
@@ -154,7 +155,7 @@ undo_delete_lowest_transaction(UndoStack *stack)
     g_free(change);
     change = next_change;
   } while (!is_transactionpoint(change));
-  
+
   if (is_transactionpoint(change)) {
     stack->depth--;
     DEBUG_PRINTF(("Decreasing stack depth to: %d\n", stack->depth));
@@ -191,7 +192,7 @@ undo_revert_to_last_tp(UndoStack *stack)
 {
   Change *change;
   Change *prev_change;
-  
+
   if (stack->current_change->prev == NULL)
     return; /* Can't revert first transactionpoint */
 
@@ -212,12 +213,12 @@ undo_apply_to_next_tp(UndoStack *stack)
 {
   Change *change;
   Change *next_change;
-  
+
   change = stack->current_change;
 
   if (change->next == NULL)
     return /* Already at top. */;
-  
+
   do {
     next_change = change->next;
     (change->apply)(change, stack->dia);
@@ -239,13 +240,13 @@ undo_clear(UndoStack *stack)
   Change *change;
 
   DEBUG_PRINTF(("undo_clear()\n"));
-  
+
   change = stack->current_change;
-    
+
   while (change->prev != NULL) {
     change = change->prev;
   }
-  
+
   stack->current_change = change;
   stack->depth = 0;
   undo_remove_redo_info(stack);
@@ -256,13 +257,13 @@ undo_clear(UndoStack *stack)
  *  Currently just changes sensitivity, but should in the future also
  *  include changing the labels.
  */
-void 
+void
 undo_update_menus(UndoStack *stack)
 {
   ddisplay_do_update_menu_sensitivity(ddisplay_active());
 }
 
-/** Marks the undo stack at the time of a save. 
+/** Marks the undo stack at the time of a save.
  */
 void
 undo_mark_save(UndoStack *stack)
@@ -283,7 +284,7 @@ undo_is_saved(UndoStack *stack)
  * If undo is true, returns TRUE if there's something to undo, otherwise
  * returns TRUE if there's something to redo.
  */
-gboolean 
+gboolean
 undo_available(UndoStack *stack, gboolean undo)
 {
   if (undo) {
@@ -295,7 +296,7 @@ undo_available(UndoStack *stack, gboolean undo)
 
 /** Remove items from the undo stack until we hit an undo item of a given
  *  type (indicated by its apply function).  Beware that the items are not
- *  just reverted, but totally removed.  This also takes with it all the 
+ *  just reverted, but totally removed.  This also takes with it all the
  *  changes above current_change.
  *
  * @param stack The undo stack to remove items from.
@@ -307,7 +308,7 @@ Change*
 undo_remove_to(UndoStack *stack, UndoApplyFunc *type)
 {
   Change *current_change = stack->current_change;
-  if (current_change == NULL) 
+  if (current_change == NULL)
     return NULL;
   while (current_change && current_change->apply != *type) {
     current_change = current_change->prev;
@@ -354,18 +355,18 @@ move_objects_apply(struct MoveObjectsChange *change, Diagram *dia)
   i=0;
   while (list != NULL) {
     obj = (DiaObject *)  list->data;
-    
+
     obj->ops->move(obj, &change->dest_pos[i]);
-    
+
     list = g_list_next(list); i++;
   }
 
   list = change->obj_list;
   while (list!=NULL) {
     obj = (DiaObject *) list->data;
-    
+
     diagram_update_connections_object(dia, obj, TRUE);
-    
+
     list = g_list_next(list);
   }
 
@@ -385,18 +386,18 @@ move_objects_revert(struct MoveObjectsChange *change, Diagram *dia)
   i=0;
   while (list != NULL) {
     obj = (DiaObject *)  list->data;
-    
+
     obj->ops->move(obj, &change->orig_pos[i]);
-    
+
     list = g_list_next(list); i++;
   }
 
   list = change->obj_list;
   while (list!=NULL) {
     obj = (DiaObject *) list->data;
-    
+
     diagram_update_connections_object(dia, obj, TRUE);
-    
+
     list = g_list_next(list);
   }
 
@@ -418,7 +419,7 @@ undo_move_objects(Diagram *dia, Point *orig_pos, Point *dest_pos,
   struct MoveObjectsChange *change;
 
   change = g_new0(struct MoveObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) move_objects_apply;
   change->change.revert = (UndoRevertFunc) move_objects_revert;
   change->change.free = (UndoFreeFunc) move_objects_free;
@@ -482,7 +483,7 @@ undo_move_handle(Diagram *dia,
   struct MoveHandleChange *change;
 
   change = g_new0(struct MoveHandleChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) move_handle_apply;
   change->change.revert = (UndoRevertFunc) move_handle_revert;
   change->change.free = (UndoFreeFunc) move_handle_free;
@@ -493,7 +494,7 @@ undo_move_handle(Diagram *dia,
   change->obj = obj;
 
   change->modifiers = modifiers;
- 
+
   DEBUG_PRINTF(("UNDO: Push new move handle at %d\n", depth(dia->undo)));
 
   undo_push_change(dia->undo, (Change *) change);
@@ -515,13 +516,13 @@ static void
 connect_apply(struct ConnectChange *change, Diagram *dia)
 {
   object_connect(change->obj, change->handle, change->connectionpoint);
-  
+
   object_add_updates(change->obj, dia);
   change->obj->ops->move_handle(change->obj, change->handle ,
                                &change->connectionpoint->pos,
                                change->connectionpoint,
                                HANDLE_MOVE_CONNECTED, 0);
-  
+
   object_add_updates(change->obj, dia);
 }
 
@@ -529,12 +530,12 @@ static void
 connect_revert(struct ConnectChange *change, Diagram *dia)
 {
   object_unconnect(change->obj, change->handle);
-  
+
   object_add_updates(change->obj, dia);
   change->obj->ops->move_handle(change->obj, change->handle ,
                                &change->handle_pos, NULL,
                                HANDLE_MOVE_CONNECTED, 0);
-  
+
   object_add_updates(change->obj, dia);
 }
 
@@ -550,7 +551,7 @@ undo_connect(Diagram *dia, DiaObject *obj, Handle *handle,
   struct ConnectChange *change;
 
   change = g_new0(struct ConnectChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) connect_apply;
   change->change.revert = (UndoRevertFunc) connect_revert;
   change->change.free = (UndoFreeFunc) connect_free;
@@ -579,7 +580,7 @@ static void
 unconnect_apply(struct UnconnectChange *change, Diagram *dia)
 {
   object_unconnect(change->obj, change->handle);
-  
+
   object_add_updates(change->obj, dia);
 }
 
@@ -587,7 +588,7 @@ static void
 unconnect_revert(struct UnconnectChange *change, Diagram *dia)
 {
   object_connect(change->obj, change->handle, change->connectionpoint);
-  
+
   object_add_updates(change->obj, dia);
 }
 
@@ -602,7 +603,7 @@ undo_unconnect(Diagram *dia, DiaObject *obj, Handle *handle)
   struct UnconnectChange *change;
 
   change = g_new0(struct UnconnectChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) unconnect_apply;
   change->change.revert = (UndoRevertFunc) unconnect_revert;
   change->change.free = (UndoFreeFunc) unconnect_free;
@@ -632,13 +633,13 @@ static void
 delete_objects_apply(struct DeleteObjectsChange *change, Diagram *dia)
 {
   GList *list;
-  
+
   DEBUG_PRINTF(("delete_objects_apply()\n"));
   change->applied = 1;
-  diagram_unselect_objects(dia, change->obj_list);
-  layer_remove_objects(change->layer, change->obj_list);
-  object_add_updates_list(change->obj_list, dia);
-  
+  diagram_unselect_objects (dia, change->obj_list);
+  dia_layer_remove_objects (change->layer, change->obj_list);
+  object_add_updates_list (change->obj_list, dia);
+
   list = change->obj_list;
   while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
@@ -660,9 +661,9 @@ delete_objects_revert(struct DeleteObjectsChange *change, Diagram *dia)
   GList *list;
   DEBUG_PRINTF(("delete_objects_revert()\n"));
   change->applied = 0;
-  layer_set_object_list(change->layer,
-                       g_list_copy(change->original_objects));
-  object_add_updates_list(change->obj_list, dia);
+  dia_layer_set_object_list (change->layer,
+                             g_list_copy (change->original_objects));
+  object_add_updates_list (change->obj_list, dia);
 
   list = change->obj_list;
   while (list) {
@@ -702,7 +703,7 @@ undo_delete_objects(Diagram *dia, GList *obj_list)
   struct DeleteObjectsChange *change;
 
   change = g_new0(struct DeleteObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) delete_objects_apply;
   change->change.revert = (UndoRevertFunc) delete_objects_revert;
   change->change.free = (UndoFreeFunc) delete_objects_free;
@@ -732,7 +733,7 @@ insert_objects_apply(struct InsertObjectsChange *change, Diagram *dia)
 {
   DEBUG_PRINTF(("insert_objects_apply()\n"));
   change->applied = 1;
-  layer_add_objects(change->layer, g_list_copy(change->obj_list));
+  dia_layer_add_objects (change->layer, g_list_copy (change->obj_list));
   object_add_updates_list(change->obj_list, dia);
 }
 
@@ -740,13 +741,13 @@ static void
 insert_objects_revert(struct InsertObjectsChange *change, Diagram *dia)
 {
   GList *list;
-  
+
   DEBUG_PRINTF(("insert_objects_revert()\n"));
   change->applied = 0;
-  diagram_unselect_objects(dia, change->obj_list);
-  layer_remove_objects(change->layer, change->obj_list);
-  object_add_updates_list(change->obj_list, dia);
-  
+  diagram_unselect_objects (dia, change->obj_list);
+  dia_layer_remove_objects (change->layer, change->obj_list);
+  object_add_updates_list (change->obj_list, dia);
+
   list = change->obj_list;
   while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
@@ -775,7 +776,7 @@ undo_insert_objects(Diagram *dia, GList *obj_list, int applied)
   struct InsertObjectsChange *change;
 
   change = g_new0(struct InsertObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) insert_objects_apply;
   change->change.revert = (UndoRevertFunc) insert_objects_revert;
   change->change.free = (UndoFreeFunc) insert_objects_free;
@@ -803,24 +804,24 @@ struct ReorderObjectsChange {
 static void
 reorder_objects_apply(struct ReorderObjectsChange *change, Diagram *dia)
 {
-  DEBUG_PRINTF(("reorder_objects_apply()\n"));
-  layer_set_object_list(change->layer,
-                       g_list_copy(change->reordered_objects));
-  object_add_updates_list(change->changed_list, dia);
+  DEBUG_PRINTF (("reorder_objects_apply()\n"));
+  dia_layer_set_object_list (change->layer,
+                             g_list_copy (change->reordered_objects));
+  object_add_updates_list (change->changed_list, dia);
 }
 
 static void
-reorder_objects_revert(struct ReorderObjectsChange *change, Diagram *dia)
+reorder_objects_revert (struct ReorderObjectsChange *change, Diagram *dia)
 {
-  DEBUG_PRINTF(("reorder_objects_revert()\n"));
-  layer_set_object_list(change->layer,
-                       g_list_copy(change->original_objects));
-  object_add_updates_list(change->changed_list, dia);
+  DEBUG_PRINTF (("reorder_objects_revert()\n"));
+  dia_layer_set_object_list (change->layer,
+                             g_list_copy(change->original_objects));
+  object_add_updates_list (change->changed_list, dia);
 }
 
-static void            
+static void
 reorder_objects_free(struct ReorderObjectsChange *change)
-{                          
+{
   DEBUG_PRINTF(("reorder_objects_free()\n"));
   g_list_free(change->changed_list);
   g_list_free(change->original_objects);
@@ -833,7 +834,7 @@ undo_reorder_objects(Diagram *dia, GList *changed_list, GList *orig_list)
   struct ReorderObjectsChange *change;
 
   change = g_new0(struct ReorderObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) reorder_objects_apply;
   change->change.revert = (UndoRevertFunc) reorder_objects_revert;
   change->change.free = (UndoFreeFunc) reorder_objects_free;
@@ -862,7 +863,7 @@ _connections_update_func (gpointer data, gpointer user_data)
 {
   DiaObject *obj = data;
   Diagram   *dia = (Diagram *)user_data;
-  
+
   diagram_update_connections_object(dia, obj, TRUE);
 }
 static void
@@ -903,7 +904,7 @@ object_change_revert(struct ObjectChangeChange *change,
     Point p = change->obj->position;
     (change->obj->ops->move)(change->obj,&p);
 
-    object_add_updates(change->obj, dia);  
+    object_add_updates(change->obj, dia);
     diagram_update_connections_object(dia, change->obj, TRUE);
     properties_update_if_shown(dia, change->obj);
   } else {
@@ -928,7 +929,7 @@ undo_object_change(Diagram *dia, DiaObject *obj,
   struct ObjectChangeChange *change;
 
   change = g_new0(struct ObjectChangeChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) object_change_apply;
   change->change.revert = (UndoRevertFunc) object_change_revert;
   change->change.free = (UndoFreeFunc) object_change_free;
@@ -943,7 +944,7 @@ undo_object_change(Diagram *dia, DiaObject *obj,
 
 /******** Group object list: */
 
-/** Grouping and ungrouping are two subtly different changes:  While 
+/** Grouping and ungrouping are two subtly different changes:  While
  * ungrouping preserves the front/back position, grouping cannot do that,
  * since the act of grouping destroys positions for the members of the
  * group, and those positions have to be restored in the undo.
@@ -968,18 +969,18 @@ group_objects_apply(struct GroupObjectsChange *change, Diagram *dia)
   GList *list;
 
   DEBUG_PRINTF(("group_objects_apply()\n"));
-  
+
   change->applied = 1;
-  
-  diagram_unselect_objects(dia, change->obj_list);
-  layer_remove_objects(change->layer, change->obj_list);
-  layer_add_object(change->layer, change->group);
-  object_add_updates(change->group, dia);
+
+  diagram_unselect_objects (dia, change->obj_list);
+  dia_layer_remove_objects (change->layer, change->obj_list);
+  dia_layer_add_object (change->layer, change->group);
+  object_add_updates (change->group, dia);
 
   list = change->obj_list;
   while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
-    
+
   /* Have to hide any open properties dialog
      if it contains some object in cut_list */
     properties_hide_if_shown(dia, obj);
@@ -991,19 +992,19 @@ group_objects_apply(struct GroupObjectsChange *change, Diagram *dia)
 }
 
 static void
-group_objects_revert(struct GroupObjectsChange *change, Diagram *dia)
+group_objects_revert (struct GroupObjectsChange *change, Diagram *dia)
 {
-  DEBUG_PRINTF(("group_objects_revert()\n"));
+  DEBUG_PRINTF (("group_objects_revert()\n"));
   change->applied = 0;
-  
-  diagram_unselect_object(dia, change->group);
-  object_add_updates(change->group, dia);
 
-  layer_set_object_list(change->layer, g_list_copy(change->orig_list));
-  
-  object_add_updates_list(change->obj_list, dia);
+  diagram_unselect_object (dia, change->group);
+  object_add_updates (change->group, dia);
 
-  properties_hide_if_shown(dia, change->group);
+  dia_layer_set_object_list (change->layer, g_list_copy (change->orig_list));
+
+  object_add_updates_list (change->obj_list, dia);
+
+  properties_hide_if_shown (dia, change->group);
 }
 
 static void
@@ -1026,7 +1027,7 @@ undo_group_objects(Diagram *dia, GList *obj_list, DiaObject *group,
   struct GroupObjectsChange *change;
 
   change = g_new0(struct GroupObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) group_objects_apply;
   change->change.revert = (UndoRevertFunc) group_objects_revert;
   change->change.free = (UndoFreeFunc) group_objects_free;
@@ -1058,36 +1059,37 @@ static void
 ungroup_objects_apply(struct UngroupObjectsChange *change, Diagram *dia)
 {
   DEBUG_PRINTF(("ungroup_objects_apply()\n"));
-  
+
   change->applied = 1;
-  
-  diagram_unselect_object(dia, change->group);
-  object_add_updates(change->group, dia);
-  layer_replace_object_with_list(change->layer, change->group,
-                                g_list_copy(change->obj_list));
-  object_add_updates_list(change->obj_list, dia);
-  
-  properties_hide_if_shown(dia, change->group);
+
+  diagram_unselect_object (dia, change->group);
+  object_add_updates (change->group, dia);
+  dia_layer_replace_object_with_list (change->layer,
+                                      change->group,
+                                      g_list_copy(change->obj_list));
+  object_add_updates_list (change->obj_list, dia);
+
+  properties_hide_if_shown (dia, change->group);
 }
 
 static void
 ungroup_objects_revert(struct UngroupObjectsChange *change, Diagram *dia)
 {
   GList *list;
-  
+
   DEBUG_PRINTF(("ungroup_objects_revert()\n"));
   change->applied = 0;
-  
 
-  diagram_unselect_objects(dia, change->obj_list);
-  layer_remove_objects(change->layer, change->obj_list);
-  layer_add_object_at(change->layer, change->group, change->group_index);
-  object_add_updates(change->group, dia);
+
+  diagram_unselect_objects( dia, change->obj_list);
+  dia_layer_remove_objects (change->layer, change->obj_list);
+  dia_layer_add_object_at (change->layer, change->group, change->group_index);
+  object_add_updates (change->group, dia);
 
   list = change->obj_list;
   while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
-    
+
   /* Have to hide any open properties dialog
      if it contains some object in cut_list */
     properties_hide_if_shown(dia, obj);
@@ -1114,7 +1116,7 @@ undo_ungroup_objects(Diagram *dia, GList *obj_list, DiaObject *group,
   struct UngroupObjectsChange *change;
 
   change = g_new0(struct UngroupObjectsChange, 1);
-  
+
   change->change.apply = (UndoApplyFunc) ungroup_objects_apply;
   change->change.revert = (UndoRevertFunc) ungroup_objects_revert;
   change->change.free = (UndoFreeFunc) ungroup_objects_free;
@@ -1222,30 +1224,32 @@ typedef struct _MoveObjectToLayerChange {
 } MoveObjectToLayerChange;
 
 /*!
- * BEWARE: we need to notify the DiagramTree somehow - maybe 
+ * BEWARE: we need to notify the DiagramTree somehow - maybe
  * better make it listen to object-add signal?
  */
-static void 
-move_object_layer_relative(Diagram *dia, GList *objects, gint dist)
+static void
+move_object_layer_relative (Diagram *dia, GList *objects, gint dist)
 {
   /* from the active layer to above or below */
   Layer *active, *target;
   guint pos;
- 
-  g_return_if_fail(dia->data->active_layer);
-  g_return_if_fail(dia->data->layers->len != 0);
+
+  g_return_if_fail (dia->data->active_layer);
+  g_return_if_fail (dia->data->layers->len != 0);
 
   active =  dia->data->active_layer;
-  for (pos = 0; pos < dia->data->layers->len; ++pos)
-    if (active == g_ptr_array_index(dia->data->layers, pos))
+  for (pos = 0; pos < dia->data->layers->len; ++pos) {
+    if (active == g_ptr_array_index (dia->data->layers, pos)) {
       break;
+    }
+  }
 
   pos = (pos + dia->data->layers->len + dist) % dia->data->layers->len;
-  target = g_ptr_array_index(dia->data->layers, pos);
-  object_add_updates_list(objects, dia);
-  layer_remove_objects(active, objects);
-  layer_add_objects(target, g_list_copy(objects));
-  data_set_active_layer(dia->data, target);
+  target = g_ptr_array_index (dia->data->layers, pos);
+  object_add_updates_list (objects, dia);
+  dia_layer_remove_objects (active, objects);
+  dia_layer_add_objects (target, g_list_copy(objects));
+  data_set_active_layer (dia->data, target);
 }
 
 static void
@@ -1264,11 +1268,11 @@ move_object_to_layer_revert(MoveObjectToLayerChange *change, Diagram *dia)
   if (change->moving_up) {
     move_object_layer_relative(dia, change->objects, -1);
   } else {
-    diagram_unselect_objects(dia, change->objects);
-    move_object_layer_relative(dia, change->objects, 1);
+    diagram_unselect_objects (dia, change->objects);
+    move_object_layer_relative (dia, change->objects, 1);
     /* overwriting the 'unsorted' list of objects to the order it had before */
-    layer_set_object_list(change->orig_layer, g_list_copy(change->orig_list));
-    object_add_updates_list(change->orig_list, dia);
+    dia_layer_set_object_list (change->orig_layer, g_list_copy (change->orig_list));
+    object_add_updates_list (change->orig_list, dia);
   }
 }
 
@@ -1285,7 +1289,7 @@ Change *
 undo_move_object_other_layer(Diagram *dia, GList *selected_list,
                             gboolean moving_up)
 {
-  MoveObjectToLayerChange *movetolayerchange 
+  MoveObjectToLayerChange *movetolayerchange
     = g_new0(MoveObjectToLayerChange, 1);
   Change *change = (Change*)movetolayerchange;
   change->apply = (UndoApplyFunc) move_object_to_layer_apply;
@@ -1328,13 +1332,14 @@ _import_change_apply (ImportChange *change,
       */
     if (dia_object_get_parent_layer (obj))
       layer = dia_object_get_parent_layer (obj);
-    layer_add_object (layer, obj);
+    dia_layer_add_object (layer, obj);
   }
   diagram_update_extents (change->dia);
 }
+
 static void
 _import_change_revert (ImportChange *change,
-                      Diagram      *dia)
+                       Diagram      *dia)
 {
   GList *list;
 
@@ -1344,7 +1349,7 @@ _import_change_revert (ImportChange *change,
   for (list = change->objects; list != NULL; list = list->next) {
     DiaObject *obj = (DiaObject *)list->data;
     Layer *layer = dia_object_get_parent_layer (obj);
-    layer_remove_object (layer, obj);
+    dia_layer_remove_object (layer, obj);
   }
   for (list = change->layers; list != NULL; list = list->next) {
     Layer *layer = (Layer *)list->data;
@@ -1392,7 +1397,7 @@ undo_import_change_setup (Diagram *dia)
 
   g_signal_connect (G_OBJECT(dia), "object_add", G_CALLBACK(_import_object_add), change);
 
-  return &change->change;  
+  return &change->change;
 }
 /*!
  * \brief Finish listening on the diagram changes
@@ -1403,7 +1408,7 @@ gboolean
 undo_import_change_done (Diagram *dia, Change *chg)
 {
   ImportChange *change = (ImportChange *)chg;
-  
+
   /* Some type checking first */
   g_return_val_if_fail (change != NULL, FALSE);
   g_return_val_if_fail (change->change.apply == (UndoApplyFunc)_import_change_apply, FALSE);
@@ -1422,7 +1427,7 @@ undo_import_change_done (Diagram *dia, Change *chg)
 
 typedef struct _MemSwapChange {
   Change change;
-  
+
   gsize   size;
   guint8 *dest;   /* for 'write trough' */
   guint8  mem[1]; /* real size during alloc */
@@ -1445,7 +1450,7 @@ _swap_mem(MemSwapChange *change, Diagram *dia)
  * \brief Record a memory region for undo (before actually changing it)
  *
  * @dia  : the Diagram to record the change for
- * @dest : a pointer somewhere in the Diagram 
+ * @dest : a pointer somewhere in the Diagram
  * @size : of the region to copy and restore
  */
 Change *
@@ -1453,12 +1458,12 @@ undo_change_memswap (Diagram *dia, gpointer dest, gsize size)
 {
   MemSwapChange *change = (MemSwapChange *)g_malloc (sizeof(MemSwapChange)+size);
   gsize i;
-  
+
   change->change.apply = (UndoApplyFunc)_swap_mem;
   change->change.revert = (UndoRevertFunc)_swap_mem;
   /* just calling g_free() on the change is enough */
   change->change.free = NULL;
-  
+
   change->dest = dest;
   change->size = size;
   /* initialize for swap */
diff --git a/lib/dia-layer.h b/lib/dia-layer.h
new file mode 100644
index 00000000..89dccf65
--- /dev/null
+++ b/lib/dia-layer.h
@@ -0,0 +1,107 @@
+/* Dia -- an diagram creation/manipulation program
+ * Copyright (C) 1998 Alexander Larsson
+ *
+ * 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.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * Copyright © 2019 Zander Brown <zbrown gnome org>
+ */
+
+#include <glib.h>
+
+#pragma once
+
+G_BEGIN_DECLS
+
+/*!
+ * \brief A diagram consists of layers holding objects
+ *
+ * \ingroup DiagramStructure
+ * \todo : make this a GObject as well
+ */
+struct _Layer {
+  char *name;             /*!< The name of the layer */
+  Rectangle extents;      /*!< The extents of the layer */
+
+  GList *objects;         /*!< List of objects in the layer,
+                            sorted by decreasing z-value,
+                            objects can ONLY be connected to objects
+                            in the same layer! */
+
+  gboolean visible;       /*!< The visibility of the layer */
+  gboolean connectable;   /*!< Whether the layer can currently be connected to.
+                            The selected layer is by default connectable */
+
+  DiagramData *parent_diagram; /*!< Back-pointer to the diagram.  This
+                                 must only be set by functions internal
+                                 to the diagram, and accessed via
+                                 layer_get_parent_diagram() */
+};
+
+Layer       *dia_layer_new                                 (char             *name,
+                                                            DiagramData      *parent);
+void         dia_layer_destroy                             (Layer            *layer);
+void         dia_layer_render                              (Layer            *layer,
+                                                            DiaRenderer      *renderer,
+                                                            Rectangle        *update,
+                                                            ObjectRenderer    obj_renderer /* Can be NULL */,
+                                                            gpointer          data,
+                                                            int               active_layer);
+int          dia_layer_object_get_index                    (Layer            *layer,
+                                                            DiaObject        *obj);
+DiaObject   *dia_layer_object_get_nth                      (Layer            *layer,
+                                                            guint             index);
+int          dia_layer_object_count                        (Layer            *layer);
+gchar       *dia_layer_get_name                            (Layer            *layer);
+void         dia_layer_add_object                          (Layer            *layer,
+                                                            DiaObject        *obj);
+void         dia_layer_add_object_at                       (Layer            *layer,
+                                                            DiaObject        *obj,
+                                                            int               pos);
+void         dia_layer_add_objects                         (Layer            *layer,
+                                                            GList            *obj_list);
+void         dia_layer_add_objects_first                   (Layer            *layer,
+                                                            GList            *obj_list);
+void         dia_layer_remove_object                       (Layer            *layer,
+                                                            DiaObject        *obj);
+void         dia_layer_remove_objects                      (Layer            *layer,
+                                                            GList            *obj_list);
+GList       *dia_layer_find_objects_intersecting_rectangle (Layer            *layer,
+                                                            Rectangle        *rect);
+GList       *dia_layer_find_objects_in_rectangle           (Layer            *layer,
+                                                            Rectangle        *rect);
+GList       *dia_layer_find_objects_containing_rectangle   (Layer            *layer,
+                                                            Rectangle        *rect);
+DiaObject   *dia_layer_find_closest_object                 (Layer            *layer,
+                                                            Point            *pos,
+                                                            real              maxdist);
+DiaObject   *dia_layer_find_closest_object_except          (Layer            *layer,
+                                                            Point            *pos,
+                                                            real              maxdist,
+                                                            GList            *avoid);
+real         dia_layer_find_closest_connectionpoint        (Layer            *layer,
+                                                            ConnectionPoint **closest,
+                                                            Point            *pos,
+                                                            DiaObject        *notthis);
+int          dia_layer_update_extents                      (Layer            *layer); /* returns true if 
changed. */
+void         dia_layer_replace_object_with_list            (Layer            *layer,
+                                                            DiaObject        *obj,
+                                                            GList            *list);
+void         dia_layer_set_object_list                     (Layer            *layer,
+                                                            GList            *list);
+DiagramData *dia_layer_get_parent_diagram                  (Layer            *layer);
+
+G_END_DECLS
diff --git a/lib/diagramdata.c b/lib/diagramdata.c
index 5c9f2a31..4973e6b3 100644
--- a/lib/diagramdata.c
+++ b/lib/diagramdata.c
@@ -28,6 +28,7 @@
 #include "diainteractiverenderer.h"
 #include "paper.h"
 #include "persistence.h"
+#include "dia-layer.h"
 
 #include "dynamic_obj.h"
 #include "diamarshal.h"
@@ -119,7 +120,7 @@ diagram_data_init(DiagramData *data)
 
   get_paper_info (&data->paper, -1, NULL);
 
-  first_layer = new_layer(g_strdup(_("Background")),data);
+  first_layer = dia_layer_new (g_strdup (_("Background")), data);
 
   data->layers = g_ptr_array_new ();
   g_ptr_array_add (data->layers, first_layer);
@@ -141,23 +142,25 @@ diagram_data_init(DiagramData *data)
  * @param object A DiagramData object to finalize.
  */
 static void
-diagram_data_finalize(GObject *object)
+diagram_data_finalize (GObject *object)
 {
-  DiagramData *data = DIA_DIAGRAM_DATA(object);
+  DiagramData *data = DIA_DIAGRAM_DATA (object);
 
   guint i;
 
-  g_free(data->paper.name);
+  g_free (data->paper.name);
 
   for (i=0;i<data->layers->len;i++) {
-    layer_destroy(g_ptr_array_index(data->layers, i));
+    dia_layer_destroy (g_ptr_array_index (data->layers, i));
   }
-  g_ptr_array_free(data->layers, TRUE);
+  g_ptr_array_free (data->layers, TRUE);
   data->active_layer = NULL;
 
-  g_list_free(data->selected);
+  g_list_free (data->selected);
   data->selected = NULL; /* for safety */
   data->selected_count_private = 0;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 
@@ -185,12 +188,12 @@ diagram_data_clone (DiagramData *data)
   clone->paper.name = g_strdup (data->paper.name);
   clone->is_compressed = data->is_compressed;
 
-  layer_destroy(g_ptr_array_index(clone->layers, 0));
-  g_ptr_array_remove(clone->layers, clone->active_layer);
+  dia_layer_destroy (g_ptr_array_index (clone->layers, 0));
+  g_ptr_array_remove (clone->layers, clone->active_layer);
 
   for (i=0; i < data->layers->len; ++i) {
     Layer *src_layer = g_ptr_array_index(data->layers, i);
-    Layer *dest_layer = new_layer (layer_get_name (src_layer), clone);
+    Layer *dest_layer = dia_layer_new (dia_layer_get_name (src_layer), clone);
 
     /* copy layer, init the active one */
     dest_layer->extents = src_layer->extents;
@@ -229,7 +232,7 @@ diagram_data_clone_selected (DiagramData *data)
   /* the selection - if any - can only be on the active layer */
   dest_layer = g_ptr_array_index(clone->layers, 0);
   g_free (dest_layer->name);
-  dest_layer->name = layer_get_name (data->active_layer);
+  dest_layer->name = dia_layer_get_name (data->active_layer);
 
   sorted = data_get_sorted_selected (data);
   dest_layer->objects = object_copy_list (sorted);
@@ -353,13 +356,13 @@ data_lower_layer(DiagramData *data, Layer *layer)
  * \memberof _DiagramData
  */
 void
-data_add_layer(DiagramData *data, Layer *layer)
+data_add_layer (DiagramData *data, Layer *layer)
 {
-  g_ptr_array_add(data->layers, layer);
+  g_ptr_array_add (data->layers, layer);
   layer->parent_diagram = data;
   data_emit (data, layer, NULL, "object_add");
-  layer_update_extents(layer);
-  data_update_extents(data);
+  dia_layer_update_extents (layer);
+  data_update_extents (data);
 }
 
 /*!
@@ -390,7 +393,7 @@ data_add_layer_at(DiagramData *data, Layer *layer, int pos)
 
   layer->parent_diagram = data;
   data_emit (data, layer, NULL, "object_add");
-  layer_update_extents(layer);
+  dia_layer_update_extents(layer);
   data_update_extents(data);
 }
 
@@ -608,7 +611,7 @@ data_get_layers_extents_union(DiagramData *data)
     Layer *layer = g_ptr_array_index(data->layers, i);
     if (!layer->visible) continue;
 
-    layer_update_extents(layer);
+    dia_layer_update_extents (layer);
 
     if (first) {
       new_extents = layer->extents;
@@ -651,30 +654,30 @@ data_adapt_scaling_to_extents(DiagramData *data)
  * \protected \memberof _DiagramData
  */
 static gboolean
-data_compute_extents(DiagramData *data)
+data_compute_extents (DiagramData *data)
 {
   Rectangle old_extents = data->extents;
 
-  if (!data_has_visible_layers(data)) {
+  if (!data_has_visible_layers (data)) {
     if (data->layers->len > 0) {
-      Layer *layer = g_ptr_array_index(data->layers, 0);
-      layer_update_extents(layer);
+      Layer *layer = g_ptr_array_index (data->layers, 0);
+      dia_layer_update_extents (layer);
 
       data->extents = layer->extents;
     } else {
       data->extents = invalid_extents;
     }
   } else {
-    data_get_layers_extents_union(data);
+    data_get_layers_extents_union (data);
   }
 
-  if (rectangle_equals(&data->extents,&invalid_extents)) {
+  if (rectangle_equals (&data->extents, &invalid_extents)) {
       data->extents.left = 0.0;
       data->extents.right = 10.0;
       data->extents.top = 0.0;
       data->extents.bottom = 10.0;
   }
-  return (!rectangle_equals(&data->extents,&old_extents));
+  return (!rectangle_equals (&data->extents, &old_extents));
 }
 
 /*!
@@ -821,7 +824,7 @@ data_render (DiagramData    *data,
     active_layer = (layer == data->active_layer);
     if (layer->visible) {
       if (obj_renderer) {
-        layer_render (layer, renderer, update, obj_renderer, gdata, active_layer);
+        dia_layer_render (layer, renderer, update, obj_renderer, gdata, active_layer);
       } else {
         dia_renderer_draw_layer (renderer, layer, active_layer, update);
       }
diff --git a/lib/diagramdata.h b/lib/diagramdata.h
index c254f837..7978bd5d 100644
--- a/lib/diagramdata.h
+++ b/lib/diagramdata.h
@@ -103,31 +103,6 @@ typedef struct _DiagramDataClass {
 
 } DiagramDataClass;
 
-/*!
- * \brief A diagram consists of layers holding objects
- *
- * \ingroup DiagramStructure
- * \todo : make this a GObject as well
- */
-struct _Layer {
-  char *name;             /*!< The name of the layer */
-  Rectangle extents;      /*!< The extents of the layer */
-
-  GList *objects;         /*!< List of objects in the layer,
-                            sorted by decreasing z-value,
-                            objects can ONLY be connected to objects
-                            in the same layer! */
-
-  gboolean visible;       /*!< The visibility of the layer */
-  gboolean connectable;   /*!< Whether the layer can currently be connected to.
-                            The selected layer is by default connectable */
-
-  DiagramData *parent_diagram; /*!< Back-pointer to the diagram.  This
-                                 must only be set by functions internal
-                                 to the diagram, and accessed via
-                                 layer_get_parent_diagram() */
-};
-
 typedef enum {
   DIA_HIGHLIGHT_NONE,
   DIA_HIGHLIGHT_CONNECTIONPOINT,
@@ -135,9 +110,6 @@ typedef enum {
   DIA_HIGHLIGHT_TEXT_EDIT
 } DiaHighlightType;
 
-Layer *new_layer (char *name, DiagramData *parent);
-void layer_destroy(Layer *layer);
-
 void data_raise_layer(DiagramData *data, Layer *layer);
 void data_lower_layer(DiagramData *data, Layer *layer);
 
@@ -172,46 +144,9 @@ void data_render(DiagramData *data, DiaRenderer *renderer, Rectangle *update,
                 gpointer gdata);
 void data_render_paginated(DiagramData *data, DiaRenderer *renderer, gpointer user_data);
 
-void layer_render(Layer *layer, DiaRenderer *renderer, Rectangle *update,
-                 ObjectRenderer obj_renderer /* Can be NULL */,
-                 gpointer data,
-                 int active_layer);
-
 DiagramData *diagram_data_clone (DiagramData *data);
 DiagramData *diagram_data_clone_selected (DiagramData *data);
 
-int layer_object_get_index(Layer *layer, DiaObject *obj);
-DiaObject *layer_object_get_nth(Layer *layer, guint index);
-int layer_object_count(Layer *layer);
-gchar *layer_get_name(Layer *layer);
-void layer_add_object(Layer *layer, DiaObject *obj);
-void layer_add_object_at(Layer *layer, DiaObject *obj, int pos);
-void layer_add_objects(Layer *layer, GList *obj_list);
-void layer_add_objects_first(Layer *layer, GList *obj_list);
-void layer_remove_object(Layer *layer, DiaObject *obj);
-void layer_remove_objects(Layer *layer, GList *obj_list);
-GList *layer_find_objects_intersecting_rectangle(Layer *layer, Rectangle*rect);
-GList *layer_find_objects_in_rectangle(Layer *layer, Rectangle *rect);
-GList *layer_find_objects_containing_rectangle(Layer *layer, Rectangle *rect);
-DiaObject *layer_find_closest_object(Layer *layer, Point *pos, real maxdist);
-DiaObject *layer_find_closest_object_except(Layer *layer, Point *pos,
-                                        real maxdist, GList *avoid);
-real layer_find_closest_connectionpoint(Layer *layer,
-                                       ConnectionPoint **closest,
-                                       Point *pos,
-                                       DiaObject *notthis);
-int layer_update_extents(Layer *layer); /* returns true if changed. */
-void layer_replace_object_with_list(Layer *layer, DiaObject *obj,
-                                   GList *list);
-void layer_set_object_list(Layer *layer, GList *list);
-DiagramData *layer_get_parent_diagram(Layer *layer);
-
 G_END_DECLS
 
 #endif /* DIAGRAMDATA_H */
-
-
-
-
-
-
diff --git a/lib/diarenderer.c b/lib/diarenderer.c
index 61d2ad8d..15681f6d 100644
--- a/lib/diarenderer.c
+++ b/lib/diarenderer.c
@@ -28,6 +28,7 @@
 #include "diatransformrenderer.h"
 #include "standard-path.h" /* text_to_path */
 #include "boundingbox.h" /* PolyBBextra */
+#include "dia-layer.h"
 /*
  * redefinition of isnan, for portability, as explained in :
  * http://www.gnu.org/software/autoconf/manual/html_node/Function-Portability.html
diff --git a/lib/focus.c b/lib/focus.c
index 1a6bb15d..ad9fc2f6 100644
--- a/lib/focus.c
+++ b/lib/focus.c
@@ -19,7 +19,7 @@
 /** This files handles which text elements are currently eligible to get
  * the input focus, and moving back and forth between them.  Objects can
  * add their texts to the list with request_focus (more than one can be
- * added), which doesn't give them focus outright, but makes them part of 
+ * added), which doesn't give them focus outright, but makes them part of
  * the focus chain.  Actual handling of when focus goes where is handled
  * in app/disp_callbacks.c
  */
@@ -29,6 +29,7 @@
 #include "focus.h"
 #include "diagramdata.h"
 #include "object.h"
+#include "dia-layer.h"
 
 /** Returns the list of foci for the given diagram */
 static GList *
@@ -153,7 +154,7 @@ focus_previous_on_diagram(DiagramData *dia)
   if (text_foci != NULL && get_active_focus(dia) != NULL) {
     GList *listelem = g_list_find(text_foci, get_active_focus(dia));
     listelem = g_list_previous(listelem);
-    if (listelem == NULL) 
+    if (listelem == NULL)
       listelem = g_list_last(text_foci);
     return (Focus *)listelem->data;
   }
diff --git a/lib/layer.c b/lib/layer.c
index ab73dbd3..070bbd26 100644
--- a/lib/layer.c
+++ b/lib/layer.c
@@ -23,6 +23,7 @@
 #include "diarenderer.h"
 #include "diainteractiverenderer.h"
 #include "dynamic_obj.h"
+#include "dia-layer.h"
 
 static const Rectangle invalid_extents = { -1.0,-1.0,-1.0,-1.0 };
 
@@ -75,12 +76,12 @@ render_bounding_boxes (void)
  * This function also handles rendering of bounding boxes for debugging purposes.
  */
 void
-layer_render (Layer          *layer,
-              DiaRenderer    *renderer,
-              Rectangle      *update,
-              ObjectRenderer  obj_renderer,
-              gpointer        data,
-              int             active_layer)
+dia_layer_render (Layer          *layer,
+                  DiaRenderer    *renderer,
+                  Rectangle      *update,
+                  ObjectRenderer  obj_renderer,
+                  gpointer        data,
+                  int             active_layer)
 {
   GList *list;
   DiaObject *obj;
@@ -124,11 +125,11 @@ layer_render (Layer          *layer,
  * \memberof _Layer
  */
 Layer *
-new_layer(gchar *name, DiagramData *parent)
+dia_layer_new (gchar *name, DiagramData *parent)
 {
   Layer *layer;
 
-  layer = g_new(Layer, 1);
+  layer = g_new (Layer, 1);
 
   layer->name = name;
 
@@ -152,11 +153,11 @@ new_layer(gchar *name, DiagramData *parent)
  * \memberof _Layer
  */
 void
-layer_destroy(Layer *layer)
+dia_layer_destroy (Layer *layer)
 {
-  g_free(layer->name);
-  destroy_object_list(layer->objects);
-  g_free(layer);
+  g_free (layer->name);
+  destroy_object_list (layer->objects);
+  g_free (layer);
 }
 
 /*!
@@ -166,7 +167,7 @@ layer_destroy(Layer *layer)
  * \protected \memberof _Layer
  */
 static void
-set_parent_layer(gpointer element, gpointer user_data)
+set_parent_layer (gpointer element, gpointer user_data)
 {
   ((DiaObject*)element)->parent_layer = (Layer*)user_data;
   /* FIXME: even group members need a parent_layer and what about parent objects  ???
@@ -184,9 +185,9 @@ set_parent_layer(gpointer element, gpointer user_data)
  * \memberof _Layer
  */
 int
-layer_object_get_index(Layer *layer, DiaObject *obj)
+dia_layer_object_get_index (Layer *layer, DiaObject *obj)
 {
-  return (int)g_list_index(layer->objects, (gpointer) obj);
+  return (int) g_list_index (layer->objects, (gpointer) obj);
 }
 
 /*!
@@ -196,24 +197,27 @@ layer_object_get_index(Layer *layer, DiaObject *obj)
  * \memberof _Layer
  */
 DiaObject *
-layer_object_get_nth (Layer *layer, guint index)
+dia_layer_object_get_nth (Layer *layer, guint index)
 {
-  if (g_list_length(layer->objects) > index) {
-    g_assert(g_list_nth(layer->objects, index));
-    return (DiaObject *)g_list_nth(layer->objects, index)->data;
+  if (g_list_length (layer->objects) > index) {
+    g_assert (g_list_nth (layer->objects, index));
+    return (DiaObject *) g_list_nth (layer->objects, index)->data;
   }
   return NULL;
 }
+
 int
-layer_object_count (Layer *layer)
+dia_layer_object_count (Layer *layer)
 {
-  return g_list_length(layer->objects);
+  return g_list_length (layer->objects);
 }
+
 gchar *
-layer_get_name (Layer *layer)
+dia_layer_get_name (Layer *layer)
 {
   return g_strdup (layer->name);
 }
+
 /*!
  * \brief Add an object to the top of a layer.
  * @param layer The layer to add the object to.
@@ -221,13 +225,13 @@ layer_get_name (Layer *layer)
  * \memberof _Layer
  */
 void
-layer_add_object(Layer *layer, DiaObject *obj)
+dia_layer_add_object(Layer *layer, DiaObject *obj)
 {
   layer->objects = g_list_append(layer->objects, (gpointer) obj);
   set_parent_layer(obj, layer);
 
   /* send a signal that we have added a object to the diagram */
-  data_emit (layer_get_parent_diagram(layer), layer, obj, "object_add");
+  data_emit (dia_layer_get_parent_diagram(layer), layer, obj, "object_add");
 }
 
 /*!
@@ -238,13 +242,13 @@ layer_add_object(Layer *layer, DiaObject *obj)
  * \memberof _Layer
  */
 void
-layer_add_object_at(Layer *layer, DiaObject *obj, int pos)
+dia_layer_add_object_at (Layer *layer, DiaObject *obj, int pos)
 {
-  layer->objects = g_list_insert(layer->objects, (gpointer) obj, pos);
-  set_parent_layer(obj, layer);
+  layer->objects = g_list_insert (layer->objects, (gpointer) obj, pos);
+  set_parent_layer (obj, layer);
 
   /* send a signal that we have added a object to the diagram */
-  data_emit (layer_get_parent_diagram(layer), layer, obj, "object_add");
+  data_emit (dia_layer_get_parent_diagram (layer), layer, obj, "object_add");
 }
 
 /*!
@@ -255,18 +259,17 @@ layer_add_object_at(Layer *layer, DiaObject *obj, int pos)
  * \memberof _Layer
  */
 void
-layer_add_objects(Layer *layer, GList *obj_list)
+dia_layer_add_objects (Layer *layer, GList *obj_list)
 {
   GList *list = obj_list;
 
-  layer->objects = g_list_concat(layer->objects, obj_list);
-  g_list_foreach(obj_list, set_parent_layer, layer);
+  layer->objects = g_list_concat (layer->objects, obj_list);
+  g_list_foreach (obj_list, set_parent_layer, layer);
 
-  while (list != NULL)
-  {
+  while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
     /* send a signal that we have added a object to the diagram */
-    data_emit (layer_get_parent_diagram(layer), layer, obj, "object_add");
+    data_emit (dia_layer_get_parent_diagram (layer), layer, obj, "object_add");
 
     list = g_list_next(list);
   }
@@ -280,23 +283,20 @@ layer_add_objects(Layer *layer, GList *obj_list)
  * \memberof _Layer
  */
 void
-layer_add_objects_first(Layer *layer, GList *obj_list)
-{
+dia_layer_add_objects_first (Layer *layer, GList *obj_list) {
   GList *list = obj_list;
 
-  layer->objects = g_list_concat(obj_list, layer->objects);
-  g_list_foreach(obj_list, set_parent_layer, layer);
+  layer->objects = g_list_concat (obj_list, layer->objects);
+  g_list_foreach (obj_list, set_parent_layer, layer);
 
   /* Send one signal per object added */
-  while (list != NULL)
-  {
+  while (list != NULL) {
     DiaObject *obj = (DiaObject *)list->data;
     /* send a signal that we have added a object to the diagram */
-    data_emit (layer_get_parent_diagram(layer), layer, obj, "object_add");
+    data_emit (dia_layer_get_parent_diagram (layer), layer, obj, "object_add");
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
-
 }
 
 /*!
@@ -306,14 +306,14 @@ layer_add_objects_first(Layer *layer, GList *obj_list)
  * \memberof _Layer
  */
 void
-layer_remove_object(Layer *layer, DiaObject *obj)
+dia_layer_remove_object (Layer *layer, DiaObject *obj)
 {
   /* send a signal that we'll remove a object from the diagram */
-  data_emit (layer_get_parent_diagram(layer), layer, obj, "object_remove");
+  data_emit (dia_layer_get_parent_diagram (layer), layer, obj, "object_remove");
 
-  layer->objects = g_list_remove(layer->objects, obj);
-  dynobj_list_remove_object(obj);
-  set_parent_layer(obj, NULL);
+  layer->objects = g_list_remove (layer->objects, obj);
+  dynobj_list_remove_object (obj);
+  set_parent_layer (obj, NULL);
 }
 
 /*!
@@ -323,15 +323,15 @@ layer_remove_object(Layer *layer, DiaObject *obj)
  * \memberof _Layer
  */
 void
-layer_remove_objects(Layer *layer, GList *obj_list)
+dia_layer_remove_objects (Layer *layer, GList *obj_list)
 {
   DiaObject *obj;
   while (obj_list != NULL) {
     obj = (DiaObject *) obj_list->data;
 
-    layer_remove_object (layer, obj);
+    dia_layer_remove_object (layer, obj);
 
-    obj_list = g_list_next(obj_list);
+    obj_list = g_list_next (obj_list);
   }
 }
 
@@ -344,7 +344,7 @@ layer_remove_objects(Layer *layer, GList *obj_list)
  * \memberof _Layer
  */
 GList *
-layer_find_objects_intersecting_rectangle(Layer *layer, Rectangle *rect)
+dia_layer_find_objects_intersecting_rectangle (Layer *layer, Rectangle *rect)
 {
   GList *list;
   GList *selected_list;
@@ -379,7 +379,7 @@ layer_find_objects_intersecting_rectangle(Layer *layer, Rectangle *rect)
  * \memberof _Layer
  */
 GList *
-layer_find_objects_in_rectangle(Layer *layer, Rectangle *rect)
+dia_layer_find_objects_in_rectangle (Layer *layer, Rectangle *rect)
 {
   GList *list;
   GList *selected_list;
@@ -411,7 +411,7 @@ layer_find_objects_in_rectangle(Layer *layer, Rectangle *rect)
  * \memberof _Layer
  */
 GList *
-layer_find_objects_containing_rectangle(Layer *layer, Rectangle *rect)
+dia_layer_find_objects_containing_rectangle (Layer *layer, Rectangle *rect)
 {
   GList *list;
   GList *selected_list;
@@ -451,8 +451,10 @@ layer_find_objects_containing_rectangle(Layer *layer, Rectangle *rect)
  * \memberof _Layer
  */
 DiaObject *
-layer_find_closest_object_except(Layer *layer, Point *pos,
-                                real maxdist, GList *avoid)
+dia_layer_find_closest_object_except (Layer *layer,
+                                      Point *pos,
+                                      real   maxdist,
+                                      GList *avoid)
 {
   GList *l;
   DiaObject *closest;
@@ -493,9 +495,9 @@ layer_find_closest_object_except(Layer *layer, Point *pos,
  * @return The closest object, or NULL if none are closer than maxdist.
  */
 DiaObject *
-layer_find_closest_object(Layer *layer, Point *pos, real maxdist)
+dia_layer_find_closest_object(Layer *layer, Point *pos, real maxdist)
 {
-  return layer_find_closest_object_except(layer, pos, maxdist, NULL);
+  return dia_layer_find_closest_object_except(layer, pos, maxdist, NULL);
 }
 
 
@@ -509,10 +511,10 @@ layer_find_closest_object(Layer *layer, Point *pos, real maxdist)
  * \memberof _Layer
  */
 real
-layer_find_closest_connectionpoint(Layer *layer,
-                                       ConnectionPoint **closest,
-                                       Point *pos,
-                                       DiaObject *notthis)
+dia_layer_find_closest_connectionpoint (Layer            *layer,
+                                        ConnectionPoint **closest,
+                                        Point            *pos,
+                                        DiaObject        *notthis)
 {
   GList *l;
   DiaObject *obj;
@@ -532,10 +534,10 @@ layer_find_closest_connectionpoint(Layer *layer,
     for (i=0;i<obj->num_connections;i++) {
       cp = obj->connections[i];
       /* Note: Uses manhattan metric for speed... */
-      dist = distance_point_point_manhattan(pos, &cp->pos);
+      dist = distance_point_point_manhattan (pos, &cp->pos);
       if (dist<mindist) {
-       mindist = dist;
-       *closest = cp;
+        mindist = dist;
+        *closest = cp;
       }
     }
 
@@ -549,7 +551,7 @@ layer_find_closest_connectionpoint(Layer *layer,
  * \memberof _Layer
  */
 int
-layer_update_extents(Layer *layer)
+dia_layer_update_extents (Layer *layer)
 {
   GList *l;
   DiaObject *obj;
@@ -559,22 +561,22 @@ layer_update_extents(Layer *layer)
   if (l!=NULL) {
     obj = (DiaObject *) l->data;
     new_extents = obj->bounding_box;
-    l = g_list_next(l);
+    l = g_list_next (l);
 
-    while(l!=NULL) {
+    while (l!=NULL) {
       const Rectangle *bbox;
       obj = (DiaObject *) l->data;
       /* don't consider empty (or broken) objects in the overall extents */
       bbox = &obj->bounding_box;
       if (bbox->right > bbox->left && bbox->bottom > bbox->top)
-        rectangle_union(&new_extents, &obj->bounding_box);
-      l = g_list_next(l);
+        rectangle_union (&new_extents, &obj->bounding_box);
+      l = g_list_next (l);
     }
   } else {
     new_extents = invalid_extents;
   }
 
-  if (rectangle_equals(&new_extents,&layer->extents)) return FALSE;
+  if (rectangle_equals (&new_extents, &layer->extents)) return FALSE;
 
   layer->extents = new_extents;
   return TRUE;
@@ -589,18 +591,19 @@ layer_update_extents(Layer *layer)
  * \memberof _Layer
  */
 void
-layer_replace_object_with_list(Layer *layer, DiaObject *remove_obj,
-                              GList *insert_list)
+dia_layer_replace_object_with_list (Layer     *layer,
+                                    DiaObject *remove_obj,
+                                    GList     *insert_list)
 {
   GList *list, *il;
 
-  list = g_list_find(layer->objects, remove_obj);
+  list = g_list_find (layer->objects, remove_obj);
 
-  g_assert(list!=NULL);
-  dynobj_list_remove_object(remove_obj);
-  data_emit (layer_get_parent_diagram(layer), layer, remove_obj, "object_remove");
-  set_parent_layer(remove_obj, NULL);
-  g_list_foreach(insert_list, set_parent_layer, layer);
+  g_assert (list!=NULL);
+  dynobj_list_remove_object (remove_obj);
+  data_emit (dia_layer_get_parent_diagram (layer), layer, remove_obj, "object_remove");
+  set_parent_layer (remove_obj, NULL);
+  g_list_foreach (insert_list, set_parent_layer, layer);
 
   if (list->prev == NULL) {
     layer->objects = insert_list;
@@ -610,58 +613,58 @@ layer_replace_object_with_list(Layer *layer, DiaObject *remove_obj,
   }
   if (list->next != NULL) {
     GList *last;
-    last = g_list_last(insert_list);
+    last = g_list_last (insert_list);
     last->next = list->next;
     list->next->prev = last;
   }
   il = insert_list;
   while (il) {
-    data_emit (layer_get_parent_diagram(layer), layer, il->data, "object_add");
-    il = g_list_next(il);
+    data_emit (dia_layer_get_parent_diagram (layer), layer, il->data, "object_add");
+    il = g_list_next (il);
   }
-  g_list_free_1(list);
+  g_list_free_1 (list);
 
   /* with transformed groups the list and the single object are not necessarily
    * of the same size */
-  layer_update_extents (layer);
+  dia_layer_update_extents (layer);
 }
 
 static void
-layer_remove_dynobj(gpointer obj, gpointer userdata)
+layer_remove_dynobj (gpointer obj, gpointer userdata)
 {
-  dynobj_list_remove_object((DiaObject*)obj);
+  dynobj_list_remove_object ((DiaObject*)obj);
 }
 
 void
-layer_set_object_list(Layer *layer, GList *list)
+dia_layer_set_object_list (Layer *layer, GList *list)
 {
   GList *ol;
   /* signal removal on all objects */
   ol = layer->objects;
   while (ol) {
     if (!g_list_find (list, ol->data)) /* only if it really vanishes */
-      data_emit (layer_get_parent_diagram(layer), layer, ol->data, "object_remove");
+      data_emit (dia_layer_get_parent_diagram(layer), layer, ol->data, "object_remove");
     ol = g_list_next (ol);
   }
   /* restore old list */
   ol = layer->objects;
-  g_list_foreach(layer->objects, set_parent_layer, NULL);
-  g_list_foreach(layer->objects, layer_remove_dynobj, NULL);
+  g_list_foreach (layer->objects, set_parent_layer, NULL);
+  g_list_foreach (layer->objects, layer_remove_dynobj, NULL);
 
   layer->objects = list;
-  g_list_foreach(layer->objects, set_parent_layer, layer);
+  g_list_foreach (layer->objects, set_parent_layer, layer);
   /* signal addition on all objects */
   list = layer->objects;
   while (list) {
     if (!g_list_find (ol, list->data)) /* only if it is new */
-      data_emit (layer_get_parent_diagram(layer), layer, list->data, "object_add");
+      data_emit (dia_layer_get_parent_diagram (layer), layer, list->data, "object_add");
     list = g_list_next (list);
   }
-  g_list_free(ol);
+  g_list_free (ol);
 }
 
 DiagramData *
-layer_get_parent_diagram(Layer *layer)
+dia_layer_get_parent_diagram (Layer *layer)
 {
   return layer->parent_diagram;
 }
diff --git a/lib/meson.build b/lib/meson.build
index a1ffa21f..d1627d3b 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -23,6 +23,7 @@ stdprop_sources = [
 libdia_sources = stdprop_sources + [
     'diagramdata.c',
     'layer.c',
+    'dia-layer.h',
     'geometry.c',
     'color.c',
     'dia_xml.c',
diff --git a/lib/object.c b/lib/object.c
index d7b8d5a2..45c7d85d 100644
--- a/lib/object.c
+++ b/lib/object.c
@@ -26,6 +26,7 @@
 #include "diagramdata.h" /* for Layer */
 #include "message.h"
 #include "parent.h"
+#include "dia-layer.h"
 
 #include "dummy_dep.h"
 
@@ -392,7 +393,7 @@ _object_exchange (ObjectChange *change, DiaObject *obj)
 {
   ObjectChangeExchange *c = (ObjectChangeExchange *)change;
   Layer *layer = dia_object_get_parent_layer (obj);
-  DiagramData *dia = layer ? layer_get_parent_diagram(layer) : NULL;
+  DiagramData *dia = layer ? dia_layer_get_parent_diagram (layer) : NULL;
   DiaObject *subst = (obj == c->orig) ? c->subst : c->orig;
   DiaObject *parent_object = obj->parent;
   Handle *h1, *h2;
@@ -403,8 +404,8 @@ _object_exchange (ObjectChange *change, DiaObject *obj)
   props = prop_list_from_descs (_style_prop_descs, pdtpp_true);
   /* removing from the diagram first, to have the right update areas */
   if (layer) {
-    obj_index = layer_object_get_index (layer, obj);
-    layer_remove_object (layer, obj);
+    obj_index = dia_layer_object_get_index (layer, obj);
+    dia_layer_remove_object (layer, obj);
     if (dia)
       data_unselect(dia, obj);
   }
@@ -447,7 +448,7 @@ _object_exchange (ObjectChange *change, DiaObject *obj)
   prop_list_free(props);
   /* adding to the diagram last, to have the right update areas */
   if (layer) {
-    layer_add_object_at (layer, subst, obj_index);
+    dia_layer_add_object_at (layer, subst, obj_index);
     if (dia)
       data_select(dia, subst);
   }
diff --git a/plug-ins/drs/dia-render-script-import.c b/plug-ins/drs/dia-render-script-import.c
index 2218976a..567ef112 100644
--- a/plug-ins/drs/dia-render-script-import.c
+++ b/plug-ins/drs/dia-render-script-import.c
@@ -31,6 +31,7 @@
 #include "group.h"
 #include "intl.h"
 #include "diaimportrenderer.h"
+#include "dia-layer.h"
 
 #include <libxml/tree.h>
 
@@ -484,21 +485,21 @@ import_drs (const gchar *filename, DiagramData *dia, DiaContext *ctx, void* user
     if (xmlStrcmp (node->name, (const xmlChar *)"layer") == 0) {
       xmlChar *str;
       xmlChar *name = xmlGetProp (node, (const xmlChar *)"name");
-      Layer *layer = new_layer (g_strdup (name ? (gchar *)name : _("Layer")), dia);
+      Layer *layer = dia_layer_new (g_strdup (name ? (gchar *)name : _("Layer")), dia);
 
       if (name)
-       xmlFree (name);
+        xmlFree (name);
 
       str = xmlGetProp (node, (const xmlChar *)"active");
       if (xmlStrcmp (str, (const xmlChar *)"true")) {
-         active_layer = layer;
-       xmlFree (str);
+        active_layer = layer;
+        xmlFree (str);
       }
 
       items = read_items (node->children, ctx);
       for (item = items; item != NULL; item = g_list_next (item)) {
         DiaObject *obj = (DiaObject *)item->data;
-        layer_add_object(layer, obj);
+        dia_layer_add_object(layer, obj);
       }
       g_list_free (items);
       data_add_layer (dia, layer);
diff --git a/plug-ins/drs/dia-render-script.c b/plug-ins/drs/dia-render-script.c
index ec415119..bb0db34c 100644
--- a/plug-ins/drs/dia-render-script.c
+++ b/plug-ins/drs/dia-render-script.c
@@ -61,6 +61,7 @@
 #include "plug-ins.h"
 #include "diagramdata.h"
 #include "dia_xml_libxml.h"
+#include "dia-layer.h"
 
 #include "dia-render-script.h"
 #include "dia-render-script-renderer.h"
diff --git a/plug-ins/dxf/dxf-export.c b/plug-ins/dxf/dxf-export.c
index de3e3946..c4fa22ee 100644
--- a/plug-ins/dxf/dxf-export.c
+++ b/plug-ins/dxf/dxf-export.c
@@ -35,6 +35,7 @@
 #include "geometry.h"
 #include "diarenderer.h"
 #include "filter.h"
+#include "dia-layer.h"
 
 /* used to be 10 and inconsistent with import and even here */
 #define MAGIC_THICKNESS_FACTOR (1.0)
@@ -618,7 +619,7 @@ export_dxf(DiagramData *data, DiaContext *ctx,
     for (i=0; i<data->layers->len; i++) {
         layer = (Layer *) g_ptr_array_index (data->layers, i);
         renderer->layername = layer->name;
-        layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
+        dia_layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
     }
 
     dia_renderer_end_render (DIA_RENDERER (renderer));
diff --git a/plug-ins/dxf/dxf-import.c b/plug-ins/dxf/dxf-import.c
index 68e18cd8..cc1c0d7c 100644
--- a/plug-ins/dxf/dxf-import.c
+++ b/plug-ins/dxf/dxf-import.c
@@ -42,6 +42,7 @@
 #include "group.h"
 #include "create.h"
 #include "attributes.h"
+#include "dia-layer.h"
 
 static real coord_scale = 1.0, measure_scale = 1.0;
 static real text_scale = 1.0;
@@ -137,13 +138,12 @@ layer_find_by_name(char *layername, DiagramData *dia)
         }
     }
 
-   if( matching_layer == NULL )
-     {
-       matching_layer = new_layer(g_strdup( layername ), dia);
-       data_add_layer(dia, matching_layer);
-     }
+  if (matching_layer == NULL) {
+    matching_layer = dia_layer_new (g_strdup (layername), dia);
+    data_add_layer (dia, matching_layer);
+  }
 
-    return matching_layer;
+  return matching_layer;
 }
 
 /* returns the matching dia linestyle for a given dxf linestyle */
@@ -232,12 +232,14 @@ read_entity_line_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
 
     line_obj->ops->set_props(line_obj, props);
 
-    prop_list_free(props);
+    prop_list_free (props);
 
-    if (layer)
-      layer_add_object(layer, line_obj);
-    else
+    if (layer) {
+      dia_layer_add_object (layer, line_obj);
+    } else {
       return line_obj;
+    }
+
     /* don't add it it twice */
     return NULL;
 }
@@ -346,14 +348,15 @@ read_entity_solid_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
    prop_list_add_fill_colour (props, &fill_colour);
    prop_list_add_show_background (props, TRUE);
 
-   polygon_obj->ops->set_props( polygon_obj, props );
+   dia_object_set_properties (polygon_obj, props);
 
-   prop_list_free(props);
+   prop_list_free (props);
 
-   if (layer)
-      layer_add_object( layer, polygon_obj );
-   else
+   if (layer) {
+      dia_layer_add_object (layer, polygon_obj);
+   } else {
       return polygon_obj;
+   }
 
    return NULL;
 }
@@ -567,14 +570,14 @@ read_entity_polyline_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
     prop_list_add_line_width (props, line_width);
     prop_list_add_line_style (props, style, 1.0);
 
-    polyline_obj->ops->set_props( polyline_obj, props );
+    dia_object_set_properties (polyline_obj, props);
 
-    prop_list_free(props);
+    prop_list_free (props);
 
     if (layer)
-       layer_add_object( layer, polyline_obj );
+      dia_layer_add_object (layer, polyline_obj);
     else
-       return polyline_obj;
+      return polyline_obj;
 
     return NULL; /* don't add it twice */
 }
@@ -643,13 +646,13 @@ read_entity_circle_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
     prop_list_add_line_width (props, line_width);
     prop_list_add_show_background (props, FALSE);
 
-    ellipse_obj->ops->set_props(ellipse_obj, props);
-    prop_list_free(props);
+    dia_object_set_properties (ellipse_obj, props);
+    prop_list_free (props);
 
     if (layer)
-        layer_add_object(layer, ellipse_obj);
+      dia_layer_add_object (layer, ellipse_obj);
     else
-        return ellipse_obj;
+      return ellipse_obj;
 
     return NULL; /* don't add it twice */
 }
@@ -734,15 +737,15 @@ read_entity_arc_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
     prop_list_add_line_colour (props, &line_colour);
     prop_list_add_line_width (props, line_width);
 
-    arc_obj->ops->set_props(arc_obj, props);
-    prop_list_free(props);
+  dia_object_set_properties (arc_obj, props);
+  prop_list_free(props);
 
-    if (layer)
-        layer_add_object(layer, arc_obj);
-    else
-        return arc_obj ;
+  if (layer)
+    dia_layer_add_object (layer, arc_obj);
+  else
+    return arc_obj ;
 
-    return NULL; /* don't add it twice */
+  return NULL; /* don't add it twice */
 }
 
 /* reads an ellipse entity from the dxf file and creates an ellipse object in dia*/
@@ -811,13 +814,13 @@ read_entity_ellipse_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
     prop_list_add_line_width (props, line_width);
     prop_list_add_show_background (props, FALSE);
 
-    ellipse_obj->ops->set_props(ellipse_obj, props);
-    prop_list_free(props);
+    dia_object_set_properties (ellipse_obj, props);
+    prop_list_free (props);
 
     if (layer)
-        layer_add_object(layer, ellipse_obj);
+      dia_layer_add_object (layer, ellipse_obj);
     else
-        return ellipse_obj;
+      return ellipse_obj;
 
     return NULL; /* don't add it twice */
 }
@@ -964,13 +967,13 @@ read_entity_text_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
     tprop->attr.color = text_colour;
     tprop->attr.height = height;
 
-    text_obj->ops->set_props(text_obj, props);
-    prop_list_free(props);
+    dia_object_set_properties (text_obj, props);
+    prop_list_free (props);
 
     if (layer)
-        layer_add_object(layer, text_obj);
+      dia_layer_add_object (layer, text_obj);
     else
-        return text_obj;
+      return text_obj;
 
     return NULL; /* don't add it twice */
 }
@@ -1243,10 +1246,10 @@ read_section_blocks_dxf(FILE *filedxf, DxfData *data, DiagramData *dia)
             if( group && group_items > 0 && group_list != NULL )
             {
                 obj = group_create( group_list );
-                if( NULL == group_layer )
-                    layer_add_object( dia->active_layer, obj );
+                if (NULL == group_layer )
+                  dia_layer_add_object( dia->active_layer, obj );
                 else
-                    layer_add_object( group_layer, obj );
+                  dia_layer_add_object( group_layer, obj );
             }
 
             group = FALSE;
diff --git a/plug-ins/pixbuf/pixbuf.c b/plug-ins/pixbuf/pixbuf.c
index 571d6eaa..329dedf0 100644
--- a/plug-ins/pixbuf/pixbuf.c
+++ b/plug-ins/pixbuf/pixbuf.c
@@ -32,6 +32,7 @@
 #include "properties.h"
 #include "object.h"
 #include "intl.h"
+#include "dia-layer.h"
 
 static gboolean
 export_data(DiagramData *data, DiaContext *ctx,
@@ -54,7 +55,7 @@ export_data(DiagramData *data, DiaContext *ctx,
   rect.bottom = data->extents.bottom;
 
   /* quite arbitrary */
-  zoom = 20.0 * data->paper.scaling; 
+  zoom = 20.0 * data->paper.scaling;
   /* Adding a bit of padding to account for rounding errors.  Better to
    * pad than to clip.  See bug #413275 */
   width = ceil((rect.right - rect.left) * zoom) + 1;
@@ -148,16 +149,16 @@ import_data (const gchar *filename, DiagramData *data, DiaContext *ctx, void* us
           prop_list_add_real (plist, "elem_width", width / 20.0);
           prop_list_add_real (plist, "elem_height", height / 20.0);
 
-          obj->ops->set_props(obj, plist);
+          dia_object_set_properties (obj, plist);
           prop_list_free (plist);
 
-          layer_add_object(data->active_layer, obj);
+          dia_layer_add_object (data->active_layer, obj);
           return TRUE;
         }
     }
   else
     {
-      dia_context_add_message(ctx, _("Pixbuf[%s] can't load:\n%s"), 
+      dia_context_add_message(ctx, _("Pixbuf[%s] can't load:\n%s"),
                              (gchar*)user_data, dia_context_get_filename(ctx));
     }
 
@@ -207,7 +208,7 @@ dia_plugin_init(PluginInfo *info)
   /*
    * If GTK is not initialized yet don't register this plug-in. This is
    * almost the same as app_is_interactive() but avoids to make plug-ins
-   * depend on Dia's app core function. Also what we really need is a 
+   * depend on Dia's app core function. Also what we really need is a
    * display, not an interactive app ;)
    */
   if (gdk_display_get_default ()) {
@@ -253,7 +254,7 @@ dia_plugin_init(PluginInfo *info)
           gchar* name;
 
           name = gdk_pixbuf_format_get_name (format);
-          /* filter out the less useful ones to keep the total list reasonable short 
+          /* filter out the less useful ones to keep the total list reasonable short
            * (If anyone complains make it configurable via persistence and this default ;-)
            */
           if (   strcmp (name, "ani") == 0
diff --git a/plug-ins/python/pydia-diagramdata.c b/plug-ins/python/pydia-diagramdata.c
index 9a219b09..98e186af 100644
--- a/plug-ins/python/pydia-diagramdata.c
+++ b/plug-ins/python/pydia-diagramdata.c
@@ -32,6 +32,7 @@
 #include <structmember.h> /* PyMemberDef */
 
 #include "app/diagram.h"
+#include "dia-layer.h"
 #include "pydia-diagram.h" /* support dynamic_cast */
 
 PyObject *
@@ -182,7 +183,7 @@ PyDiaDiagramData_DeleteLayer(PyDiaDiagramData *self, PyObject *args)
     return Py_None;
 }
 
-/*! 
+/*!
  *  Callback for "object_add" and "object_remove "signal, used by the connect_after method,
  *  it's a proxy for the python function, creating the values it needs.
  *  Params are those of the signals on the Diagram object.
@@ -196,13 +197,13 @@ PyDiaDiagramData_CallbackObject(DiagramData *dia,Layer *layer,DiaObject *obj,voi
 {
     PyObject *pydata,*pylayer,*pyobj,*res,*arg;
     PyObject *func = user_data;
-    
-    /* Check that we got a function */   
+
+    /* Check that we got a function */
     if (!func || !PyCallable_Check (func)) {
         g_warning ("Callback called without valid callback function.");
         return;
     }
-      
+
     /* Create a new PyDiaDiagramData object.
      */
     if (dia)
@@ -211,7 +212,7 @@ PyDiaDiagramData_CallbackObject(DiagramData *dia,Layer *layer,DiaObject *obj,voi
         pydata = Py_None;
         Py_INCREF (pydata);
     }
-      
+
     /*
      * Create PyDiaLayer
      */
@@ -220,8 +221,8 @@ PyDiaDiagramData_CallbackObject(DiagramData *dia,Layer *layer,DiaObject *obj,voi
     else {
         pylayer = Py_None;
         Py_INCREF (pylayer);
-    }   
-    
+    }
+
     /*
      * Create PyDiaObject
      */
@@ -230,9 +231,9 @@ PyDiaDiagramData_CallbackObject(DiagramData *dia,Layer *layer,DiaObject *obj,voi
     else {
         pyobj = Py_None;
         Py_INCREF (pyobj);
-    }   
-    
-    
+    }
+
+
     Py_INCREF(func);
 
     /* Call the callback. */
@@ -241,7 +242,7 @@ PyDiaDiagramData_CallbackObject(DiagramData *dia,Layer *layer,DiaObject *obj,voi
       res = PyEval_CallObject (func, arg);
       ON_RES(res, FALSE);
     }
-    
+
     /* Cleanup */
     Py_XDECREF (arg);
     Py_DECREF(func);
@@ -279,7 +280,7 @@ PyDiaDiagramData_ConnectAfter(PyDiaDiagramData *self, PyObject *args)
 
         /* connect to signal */
         
g_signal_connect_after(DIA_DIAGRAM_DATA(self->data),signal,G_CALLBACK(PyDiaDiagramData_CallbackObject), func);
-        
+
         Py_INCREF(Py_None);
         return Py_None;
     }
@@ -347,8 +348,8 @@ PyDiaDiagramData_GetAttr(PyDiaDiagramData *self, gchar *attr)
     if (!strcmp(attr, "__members__"))
        return Py_BuildValue("[ssssssssssss]",
                            "extents", "bg_color", "paper",
-                           "layers", "active_layer", 
-                           "grid_width", "grid_visible", 
+                           "layers", "active_layer",
+                           "grid_width", "grid_visible",
                            "hguides", "vguides",
                            "layers", "active_layer",
                            "selected" );
@@ -398,7 +399,7 @@ PyDiaDiagramData_GetAttr(PyDiaDiagramData *self, gchar *attr)
       if (DIA_IS_DIAGRAM (self->data)) {
        Diagram *diagram = DIA_DIAGRAM(self->data);
        if (diagram) { /* paranoid and helping scan-build */
-         if (!strcmp(attr, "grid_width")) 
+         if (!strcmp(attr, "grid_width"))
            return Py_BuildValue("(dd)", diagram->grid.width_x, diagram->grid.width_y);
          else if (!strcmp(attr, "grid_visible"))
            return Py_BuildValue("(ii)", diagram->grid.visible_x, diagram->grid.visible_y);
diff --git a/plug-ins/python/pydia-layer.c b/plug-ins/python/pydia-layer.c
index 3ef09457..bb555181 100644
--- a/plug-ins/python/pydia-layer.c
+++ b/plug-ins/python/pydia-layer.c
@@ -23,6 +23,7 @@
 #include "pydia-object.h"
 #include "pydia-cpoint.h"
 #include "pydia-render.h"
+#include "dia-layer.h"
 
 #include <structmember.h> /* PyMemberDef */
 
@@ -67,151 +68,166 @@ PyDiaLayer_Str(PyDiaLayer *self)
 /* methods here */
 
 static PyObject *
-PyDiaLayer_Destroy(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_Destroy (PyDiaLayer *self, PyObject *args)
 {
-    if (!PyArg_ParseTuple(args, ":Layer.destroy"))
-       return NULL;
-    layer_destroy(self->layer);
-    self->layer = NULL; /* we need some error checking elsewhere */
-    Py_INCREF(Py_None);
-    return Py_None;
+  if (!PyArg_ParseTuple(args, ":Layer.destroy"))
+    return NULL;
+  dia_layer_destroy (self->layer);
+  self->layer = NULL; /* we need some error checking elsewhere */
+  Py_INCREF (Py_None);
+  return Py_None;
 }
 
 static PyObject *
-PyDiaLayer_ObjectGetIndex(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_ObjectGetIndex (PyDiaLayer *self, PyObject *args)
 {
-    PyDiaObject *obj;
+  PyDiaObject *obj;
 
-    if (!PyArg_ParseTuple(args, "O!:Layer.object_get_index",
-                         &PyDiaObject_Type, &obj))
-       return NULL;
-    return PyInt_FromLong(layer_object_get_index(self->layer, obj->object));
+  if (!PyArg_ParseTuple(args, "O!:Layer.object_get_index",
+      &PyDiaObject_Type, &obj))
+    return NULL;
+
+  return PyInt_FromLong (dia_layer_object_get_index (self->layer, obj->object));
 }
 
 static PyObject *
-PyDiaLayer_AddObject(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_AddObject (PyDiaLayer *self, PyObject *args)
 {
-    PyDiaObject *obj;
-    int pos = -1;
-
-    if (!PyArg_ParseTuple(args, "O!|i:Layer.add_object",
-                         &PyDiaObject_Type, &obj,
-                         &pos))
-       return NULL;
-    if (pos != -1)
-       layer_add_object_at(self->layer, obj->object, pos);
-    else
-       layer_add_object(self->layer, obj->object);
-    Py_INCREF(Py_None);
-    return Py_None;
+  PyDiaObject *obj;
+  int pos = -1;
+
+  if (!PyArg_ParseTuple(args, "O!|i:Layer.add_object",
+      &PyDiaObject_Type, &obj,
+      &pos)) {
+    return NULL;
+  }
+
+  if (pos != -1) {
+    dia_layer_add_object_at (self->layer, obj->object, pos);
+  } else {
+    dia_layer_add_object (self->layer, obj->object);
+  }
+
+  Py_INCREF(Py_None);
+  return Py_None;
 }
 
 static PyObject *
 PyDiaLayer_RemoveObject(PyDiaLayer *self, PyObject *args)
 {
-    PyDiaObject *obj;
-
-    if (!PyArg_ParseTuple(args, "O!:Layer.remove_object",
-                         &PyDiaObject_Type, &obj))
-       return NULL;
-    layer_remove_object(self->layer, obj->object);
-    Py_INCREF(Py_None);
-    return Py_None;
+  PyDiaObject *obj;
+
+  if (!PyArg_ParseTuple(args, "O!:Layer.remove_object",
+      &PyDiaObject_Type, &obj))
+    return NULL;
+
+  dia_layer_remove_object (self->layer, obj->object);
+
+  Py_INCREF(Py_None);
+  return Py_None;
 }
 
 static PyObject *
-PyDiaLayer_FindObjectsInRectangle(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_FindObjectsInRectangle (PyDiaLayer *self, PyObject *args)
 {
-    Rectangle rect;
-    GList *list, *tmp;
-    PyObject *ret;
-
-    if (!PyArg_ParseTuple(args, "dddd:Layer.find_objects_in_rectange",
-                         &rect.top, &rect.left, &rect.bottom, &rect.right))
-       return NULL;
-    list = layer_find_objects_in_rectangle(self->layer, &rect);
-    ret = PyList_New(0);
-    for (tmp = list; tmp; tmp = tmp->next)
-       PyList_Append(ret, PyDiaObject_New((DiaObject *)tmp->data));
-    g_list_free(list);
-    return ret;
+  Rectangle rect;
+  GList *list, *tmp;
+  PyObject *ret;
+
+  if (!PyArg_ParseTuple (args, "dddd:Layer.find_objects_in_rectange",
+      &rect.top, &rect.left, &rect.bottom, &rect.right))
+    return NULL;
+
+  list = dia_layer_find_objects_in_rectangle (self->layer, &rect);
+  ret = PyList_New (0);
+  for (tmp = list; tmp; tmp = tmp->next) {
+    PyList_Append (ret, PyDiaObject_New ((DiaObject *) tmp->data));
+  }
+  g_list_free (list);
+
+  return ret;
 }
 
 static PyObject *
-PyDiaLayer_FindClosestObject(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_FindClosestObject (PyDiaLayer *self, PyObject *args)
 {
-    Point pos;
-    real maxdist;
-    DiaObject *obj;
-
-    if (!PyArg_ParseTuple(args, "ddd:Layer.find_closest_object",
-                         &pos.x, &pos.y, &maxdist))
-       return NULL;
-    obj = layer_find_closest_object(self->layer, &pos, maxdist);
-    if (obj)
-       return PyDiaObject_New(obj);
-    Py_INCREF(Py_None);
-    return Py_None;
+  Point pos;
+  real maxdist;
+  DiaObject *obj;
+
+  if (!PyArg_ParseTuple(args, "ddd:Layer.find_closest_object",
+      &pos.x, &pos.y, &maxdist))
+    return NULL;
+
+  obj = dia_layer_find_closest_object (self->layer, &pos, maxdist);
+
+  if (obj)
+    return PyDiaObject_New (obj);
+
+  Py_INCREF(Py_None);
+  return Py_None;
 }
 
 static PyObject *
-PyDiaLayer_FindClosestConnectionPoint(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_FindClosestConnectionPoint (PyDiaLayer *self, PyObject *args)
 {
-    ConnectionPoint *cpoint = NULL;
-    Point pos;
-    real dist;
-    PyObject *ret;
-    PyDiaObject *obj;
-
-    if (!PyArg_ParseTuple(args, "dd|O!:Layer.find_closest_connection_point",
-                         &pos.x, &pos.y, PyDiaObject_Type, &obj))
-       return NULL;
-    dist = layer_find_closest_connectionpoint(self->layer, &cpoint, &pos, obj ? obj->object : NULL);
-
-    ret = PyTuple_New(2);
-    PyTuple_SetItem(ret, 0, PyFloat_FromDouble(dist));
-    if (cpoint)
-       PyTuple_SetItem(ret, 1, PyDiaConnectionPoint_New(cpoint));
-    else {
-       Py_INCREF(Py_None);
-       PyTuple_SetItem(ret, 1, Py_None);
-    }
-    return ret;
+  ConnectionPoint *cpoint = NULL;
+  Point pos;
+  real dist;
+  PyObject *ret;
+  PyDiaObject *obj;
+
+   if (!PyArg_ParseTuple(args, "dd|O!:Layer.find_closest_connection_point",
+       &pos.x, &pos.y, PyDiaObject_Type, &obj))
+    return NULL;
+
+  dist = dia_layer_find_closest_connectionpoint (self->layer, &cpoint, &pos, obj ? obj->object : NULL);
+
+  ret = PyTuple_New (2);
+  PyTuple_SetItem (ret, 0, PyFloat_FromDouble (dist));
+  if (cpoint) {
+    PyTuple_SetItem (ret, 1, PyDiaConnectionPoint_New (cpoint));
+  } else {
+    Py_INCREF (Py_None);
+    PyTuple_SetItem (ret, 1, Py_None);
+  }
+  return ret;
 }
 
 static PyObject *
-PyDiaLayer_UpdateExtents(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_UpdateExtents (PyDiaLayer *self, PyObject *args)
 {
-    if (!PyArg_ParseTuple(args, ":Layer.update_extents"))
-       return NULL;
-    return PyInt_FromLong(layer_update_extents(self->layer));
+  if (!PyArg_ParseTuple (args, ":Layer.update_extents"))
+    return NULL;
+
+  return PyInt_FromLong (dia_layer_update_extents (self->layer));
 }
 
 static PyObject *
-PyDiaLayer_Render(PyDiaLayer *self, PyObject *args)
+PyDiaLayer_Render (PyDiaLayer *self, PyObject *args)
 {
-    PyObject* renderer;
-    DiaRenderer *wrapper;
-    Rectangle *update = NULL;
-    gboolean active = FALSE; /* could derive from layer->parent_diagram->active_layer
-                             * but not sure if it's worth the effort. */
-
-    if (!PyArg_ParseTuple(args, "O:Layer.render", &renderer))
-       return NULL;
-
-    /* We need to create the PythonRenderer wrapper to provide the gobject interface.
-     * This could be done much more efficient if it would somehow be cached for the
-     * whole rendering pass ...
-     */
-    wrapper = PyDia_new_renderer_wrapper (renderer);
-    layer_render (self->layer, wrapper, update,
-                 NULL, /* no special object renderer */
-                 NULL, /* no user data */
-                 active);
-    g_object_unref (wrapper);
-
-    Py_INCREF(Py_None);
-    return Py_None;
+  PyObject* renderer;
+  DiaRenderer *wrapper;
+  Rectangle *update = NULL;
+  gboolean active = FALSE; /* could derive from layer->parent_diagram->active_layer
+          * but not sure if it's worth the effort. */
+
+  if (!PyArg_ParseTuple (args, "O:Layer.render", &renderer))
+    return NULL;
+
+  /* We need to create the PythonRenderer wrapper to provide the gobject interface.
+   * This could be done much more efficient if it would somehow be cached for the
+   * whole rendering pass ...
+   */
+  wrapper = PyDia_new_renderer_wrapper (renderer);
+  dia_layer_render (self->layer, wrapper, update,
+                    NULL, /* no special object renderer */
+                    NULL, /* no user data */
+                    active);
+  g_object_unref (wrapper);
+
+  Py_INCREF (Py_None);
+  return Py_None;
 }
 
 /* missing functions:
@@ -269,29 +285,31 @@ static PyMemberDef PyDiaLayer_Members[] = {
 static PyObject *
 PyDiaLayer_GetAttr(PyDiaLayer *self, gchar *attr)
 {
-    if (!strcmp(attr, "__members__"))
-       return Py_BuildValue("[ssss]", "extents", "name", "objects",
-                            "visible");
-    else if (!strcmp(attr, "name"))
-       return PyString_FromString(self->layer->name);
-    else if (!strcmp(attr, "extents"))
-       return Py_BuildValue("(dddd)", self->layer->extents.top,
-                            self->layer->extents.left,
-                            self->layer->extents.bottom,
-                            self->layer->extents.right);
-    else if (!strcmp(attr, "objects")) {
-       PyObject *ret;
-       GList *tmp;
-       gint i;
-
-       ret = PyTuple_New(g_list_length(self->layer->objects));
-       for (i = 0, tmp = self->layer->objects; tmp; i++, tmp = tmp->next)
-           PyTuple_SetItem(ret, i, PyDiaObject_New((DiaObject *)tmp->data));
-       return ret;
-    } else if (!strcmp(attr, "visible"))
-       return PyInt_FromLong(self->layer->visible);
-
-    return Py_FindMethod(PyDiaLayer_Methods, (PyObject *)self, attr);
+  if (!strcmp (attr, "__members__"))
+    return Py_BuildValue ("[ssss]", "extents", "name", "objects", "visible");
+  else if (!strcmp (attr, "name"))
+    return PyString_FromString (self->layer->name);
+  else if (!strcmp (attr, "extents"))
+    return Py_BuildValue ("(dddd)",
+                          self->layer->extents.top,
+                          self->layer->extents.left,
+                          self->layer->extents.bottom,
+                          self->layer->extents.right);
+  else if (!strcmp (attr, "objects")) {
+    PyObject *ret;
+    GList *tmp;
+    gint i;
+
+    ret = PyTuple_New (g_list_length (self->layer->objects));
+    for (i = 0, tmp = self->layer->objects; tmp; i++, tmp = tmp->next) {
+      PyTuple_SetItem (ret, i, PyDiaObject_New ((DiaObject *)tmp->data));
+    }
+    return ret;
+  } else if (!strcmp (attr, "visible")) {
+    return PyInt_FromLong (self->layer->visible);
+  }
+
+  return Py_FindMethod (PyDiaLayer_Methods, (PyObject *) self, attr);
 }
 
 PyTypeObject PyDiaLayer_Type = {
diff --git a/plug-ins/svg/render_svg.c b/plug-ins/svg/render_svg.c
index ca7b5f78..d1f171d0 100644
--- a/plug-ins/svg/render_svg.c
+++ b/plug-ins/svg/render_svg.c
@@ -46,6 +46,7 @@
 #include "group.h"
 #include "textline.h"
 #include "dia_svg.h"
+#include "dia-layer.h"
 
 G_BEGIN_DECLS
 
diff --git a/plug-ins/svg/svg-import.c b/plug-ins/svg/svg-import.c
index 27cb5fcb..db394136 100644
--- a/plug-ins/svg/svg-import.c
+++ b/plug-ins/svg/svg-import.c
@@ -49,6 +49,7 @@
 #include "font.h"
 #include "attributes.h"
 #include "pattern.h"
+#include "dia-layer.h"
 
 /*!
  * \defgroup SvgImport Import SVG
@@ -1910,7 +1911,7 @@ import_shape_info (xmlNodePtr start_node, DiagramData *dia, DiaContext *ctx)
     dia_context_add_message (ctx, _("'Shape Design' shapes missing."));
     return FALSE;
   }
-  layer = new_layer (g_strdup ("Shape Design"), dia);
+  layer = dia_layer_new (g_strdup ("Shape Design"), dia);
   data_add_layer (dia, layer);
 
   for (node = start_node; node != NULL; node = node->next) {
@@ -1923,27 +1924,27 @@ import_shape_info (xmlNodePtr start_node, DiagramData *dia, DiaContext *ctx)
       xmlNodePtr cp_node;
 
       for (cp_node = node->xmlChildrenNode; cp_node != NULL; cp_node = cp_node->next) {
-       Point pos;
-       gboolean is_main = FALSE;
-
-       if (_parse_shape_cp (cp_node, &pos.x, &pos.y, &is_main)) {
-         Handle *h1, *h2;
-         const DiaObjectType *ot = is_main ? ot_mp : ot_cp;
-         DiaObject *o;
-
-         o = ot->ops->create (&pos, ot->default_user_data, &h1, &h2);
-
-         if (o) {
-           /* we have to adjust the position to be centered */
-           g_return_val_if_fail (o->num_handles == 8, FALSE);
-           pos.x -= (o->handles[1]->pos.x - o->handles[0]->pos.x);
-           pos.y -= (o->handles[3]->pos.y - o->handles[0]->pos.y);
-           o->ops->move (o, &pos);
-           layer_add_object (layer, o);
-         } else {
-           dia_context_add_message (ctx, _("Object '%s' creation failed"), ot->name);
-         }
-       }
+        Point pos;
+        gboolean is_main = FALSE;
+
+        if (_parse_shape_cp (cp_node, &pos.x, &pos.y, &is_main)) {
+          Handle *h1, *h2;
+          const DiaObjectType *ot = is_main ? ot_mp : ot_cp;
+          DiaObject *o;
+
+          o = ot->ops->create (&pos, ot->default_user_data, &h1, &h2);
+
+          if (o) {
+            /* we have to adjust the position to be centered */
+            g_return_val_if_fail (o->num_handles == 8, FALSE);
+            pos.x -= (o->handles[1]->pos.x - o->handles[0]->pos.x);
+            pos.y -= (o->handles[3]->pos.y - o->handles[0]->pos.y);
+            o->ops->move (o, &pos);
+            dia_layer_add_object (layer, o);
+          } else {
+            dia_context_add_message (ctx, _("Object '%s' creation failed"), ot->name);
+          }
+        }
       }
     } else if (   !xmlStrcmp(node->name, (const xmlChar *)"default-width")
               || !xmlStrcmp(node->name, (const xmlChar *)"default-height")) {
@@ -2104,15 +2105,15 @@ import_svg (xmlDocPtr doc, DiagramData *dia,
     if (groups_to_layers) {
       gchar *name = dia_object_get_meta (obj, "id");
       /* new_layer() is taking ownership of the name */
-      Layer *layer = new_layer (name, dia);
+      Layer *layer = dia_layer_new (name, dia);
 
       /* keep the group for potential transformation */
-      layer_add_object (layer, obj);
+      dia_layer_add_object (layer, obj);
       data_add_layer (dia, layer);
     } else {
       /* Just as before: throw it in the active layer */
-      layer_add_object(dia->active_layer, obj);
-      layer_update_extents(dia->active_layer);
+      dia_layer_add_object (dia->active_layer, obj);
+      dia_layer_update_extents (dia->active_layer);
     }
 
   }
diff --git a/plug-ins/vdx/vdx-export.c b/plug-ins/vdx/vdx-export.c
index 4512db32..984abaf4 100644
--- a/plug-ins/vdx/vdx-export.c
+++ b/plug-ins/vdx/vdx-export.c
@@ -45,6 +45,7 @@
 #include "prop_pixbuf.h"
 #include "dia_image.h"
 #include "group.h"
+#include "dia-layer.h"
 
 #include "vdx.h"
 #include "visio-types.h"
@@ -1784,7 +1785,7 @@ export_vdx(DiagramData *data, DiaContext *ctx,
     for (i = 0; i < data->layers->len; i++) {
       layer = (Layer *) g_ptr_array_index (data->layers, i);
       if (layer->visible) {
-        layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
+        dia_layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
       }
       renderer->depth++;
     }
@@ -1800,11 +1801,11 @@ export_vdx(DiagramData *data, DiaContext *ctx,
     /* Now render */
 
     for (i = 0; i < data->layers->len; i++) {
-        layer = (Layer *) g_ptr_array_index (data->layers, i);
-        if (layer->visible) {
-            layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
-        }
-        renderer->depth++;
+      layer = (Layer *) g_ptr_array_index (data->layers, i);
+      if (layer->visible) {
+        dia_layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
+      }
+      renderer->depth++;
     }
 
     dia_renderer_end_render (DIA_RENDERER (renderer));
diff --git a/plug-ins/vdx/vdx-import.c b/plug-ins/vdx/vdx-import.c
index f7fdfde1..697bee4b 100644
--- a/plug-ins/vdx/vdx-import.c
+++ b/plug-ins/vdx/vdx-import.c
@@ -51,6 +51,7 @@
 #include "visio-types.h"
 #include "bezier_conn.h"
 #include "connection.h"
+#include "dia-layer.h"
 
 void static vdx_get_colors(xmlNodePtr cur, VDXDocument* theDoc, DiaContext *ctx);
 void static vdx_get_facenames(xmlNodePtr cur, VDXDocument* theDoc, DiaContext *ctx);
@@ -2747,10 +2748,9 @@ vdx_parse_shape(xmlNodePtr Shape, struct vdx_PageSheet *PageSheet,
     /* Add the objects straight into the diagram */
     /* This isn't strictly correct as a child object can be on a
        different layer from its parent. */
-    for (object = objects; object; object = object->next)
-    {
-        if (!object->data) continue;
-        layer_add_object(diaLayer, (DiaObject *)object->data);
+    for (object = objects; object; object = object->next) {
+      if (!object->data) continue;
+      dia_layer_add_object (diaLayer, (DiaObject *)object->data);
     }
 
     free_children(&theShape);
@@ -2824,7 +2824,7 @@ vdx_setup_layers(struct vdx_PageSheet* PageSheet, VDXDocument* theDoc,
         if (!found)
         {
             g_array_append_val(theDoc->LayerNames, layername->data);
-            diaLayer = new_layer(g_strdup((char*)layername->data), dia);
+            diaLayer = dia_layer_new (g_strdup ((char*)layername->data), dia);
             data_add_layer(dia, diaLayer);
         }
         page_layer++;
diff --git a/plug-ins/vdx/vdx-xml.c b/plug-ins/vdx/vdx-xml.c
index 9587db3b..68fd142b 100644
--- a/plug-ins/vdx/vdx-xml.c
+++ b/plug-ins/vdx/vdx-xml.c
@@ -39,6 +39,7 @@
 #include "font.h"
 #include "vdx.h"
 #include "visio-types.h"
+#include "dia-layer.h"
 
 /** Parses an XML object into internal representation
  * @param cur the current XML node
diff --git a/plug-ins/wpg/wpg-import.c b/plug-ins/wpg/wpg-import.c
index 510829e1..199a245c 100644
--- a/plug-ins/wpg/wpg-import.c
+++ b/plug-ins/wpg/wpg-import.c
@@ -29,6 +29,7 @@
 #include "diacontext.h"
 #include "intl.h"
 #include "message.h" /* just dia_log_message() */
+#include "dia-layer.h"
 
 typedef struct _WpgImportRenderer  WpgImportRenderer;
 
@@ -665,10 +666,10 @@ import_data (const gchar *filename, DiagramData *dia, DiaContext *ctx, void* use
     {
       DiaObject *objs = dia_import_renderer_get_objects (DIA_RENDERER(ren));
       if (objs) {
-       layer_add_object (dia->active_layer, objs);
+        dia_layer_add_object (dia->active_layer, objs);
       } else {
-       dia_context_add_message (ctx, _("Empty WPG file?"));
-       bRet = FALSE;
+        dia_context_add_message (ctx, _("Empty WPG file?"));
+        bRet = FALSE;
       }
     }
     g_object_unref (ren);
diff --git a/plug-ins/xfig/xfig-export.c b/plug-ins/xfig/xfig-export.c
index ce693ac3..c6851da0 100644
--- a/plug-ins/xfig/xfig-export.c
+++ b/plug-ins/xfig/xfig-export.c
@@ -46,6 +46,7 @@
 #include "dia_image.h"
 #include "group.h"
 #include "diatransformrenderer.h"
+#include "dia-layer.h"
 
 #include "xfig.h"
 
@@ -1184,7 +1185,7 @@ export_fig(DiagramData *data, DiaContext *ctx,
   for (i = 0; i < data->layers->len; i++) {
     layer = (Layer *) g_ptr_array_index (data->layers, i);
     if (layer->visible) {
-      layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
+      dia_layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
       renderer->depth++;
     }
   }
@@ -1198,7 +1199,7 @@ export_fig(DiagramData *data, DiaContext *ctx,
   for (i=0; i<data->layers->len; i++) {
     layer = (Layer *) g_ptr_array_index (data->layers, i);
     if (layer->visible) {
-      layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
+      dia_layer_render (layer, DIA_RENDERER (renderer), NULL, NULL, data, 0);
       renderer->depth++;
     }
   }
diff --git a/plug-ins/xfig/xfig-import.c b/plug-ins/xfig/xfig-import.c
index 5f8b3fe1..041aad95 100644
--- a/plug-ins/xfig/xfig-import.c
+++ b/plug-ins/xfig/xfig-import.c
@@ -47,6 +47,7 @@
 #include "properties.h"
 #include "propinternals.h"
 #include "group.h"
+#include "dia-layer.h"
 
 #include "create.h"
 #include "xfig.h"
@@ -1338,12 +1339,12 @@ import_fig(const gchar *filename, DiagramData *dia, DiaContext *ctx, void* user_
        }
     } while (TRUE);
 
-    /* Now we can reorder for the depth fields */
-    for (i = 0; i < FIG_MAX_DEPTHS; i++) {
-       if (depths[i] != NULL)
-           layer_add_objects_first(dia->active_layer, depths[i]);
-    }
-    return TRUE;
+  /* Now we can reorder for the depth fields */
+  for (i = 0; i < FIG_MAX_DEPTHS; i++) {
+    if (depths[i] != NULL)
+      dia_layer_add_objects_first (dia->active_layer, depths[i]);
+  }
+  return TRUE;
 }
 
 /* interface from filter.h */


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