Code

If present, use existent perspective as default for new boxes when opening a document.
authorcilix42 <cilix42@users.sourceforge.net>
Thu, 6 Mar 2008 22:26:46 +0000 (22:26 +0000)
committercilix42 <cilix42@users.sourceforge.net>
Thu, 6 Mar 2008 22:26:46 +0000 (22:26 +0000)
src/document.cpp
src/persp3d.cpp
src/persp3d.h

index cdebaabba09fa3e6bf9e8f1a319f16aecc727941..e537e43de18934769bae79c9b36bba2c08d00e98 100644 (file)
@@ -351,7 +351,10 @@ sp_document_create(Inkscape::XML::Document *rdoc,
     // But this is probably a bad idea since we need to adapt it for every change of selection, which will
     // completely clutter the undo history. Maybe rather save it to prefs on exit and re-read it on startup?
 
-    document->current_persp3d = persp3d_create_xml_element (document);
+    document->current_persp3d = persp3d_document_first_persp(document);
+    if (!document->current_persp3d) {
+        document->current_persp3d = persp3d_create_xml_element (document);
+    }
 
     sp_document_set_undo_sensitive(document, true);
 
index 35999720d28e1d9a586262586f8ae11db12b0684..e5cade661d151f3efb1c12e6417fdc221ca529ab 100644 (file)
@@ -237,6 +237,19 @@ persp3d_create_xml_element (SPDocument *document, Persp3D *dup) {// if dup is gi
     return (Persp3D *) sp_object_get_child_by_repr (SP_OBJECT(defs), repr);
 }
 
+Persp3D *
+persp3d_document_first_persp (SPDocument *document) {
+    SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+    Inkscape::XML::Node *repr;
+    for (SPObject *child = sp_object_first_child(defs); child != NULL; child = SP_OBJECT_NEXT(child) ) {
+        repr = SP_OBJECT_REPR(child);
+        if (SP_IS_PERSP3D(child)) {
+            return SP_PERSP3D(child);
+        }
+    }
+    return NULL;
+}
+
 /**
  * Virtual write: write object attributes to repr.
  */
index 37072889c46f10f53b0d3cb8c0750e2441810ef6..4819a52e997073aa29131d4a76b69310dbb3bc35 100644 (file)
@@ -90,6 +90,7 @@ bool persp3d_perspectives_coincide(const Persp3D *lhs, const Persp3D *rhs);
 void persp3d_absorb(Persp3D *persp1, Persp3D *persp2);
 
 Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3D *dup = NULL);
+Persp3D * persp3d_document_first_persp (SPDocument *document);
 
 std::set<Persp3D *> persp3d_currently_selected_persps();
 bool persp3d_has_all_boxes_in_selection (Persp3D *persp);